From f89d595185dd065f2ccb634a21024d1b44531898 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 4 Aug 2023 01:14:04 +0000 Subject: [PATCH] feat: update to latest copilot.vim/dist --- copilot/dist/agent.js | 8 +------- copilot/dist/agent.js.LICENSE.txt | 2 -- copilot/dist/agent.js.map | 2 +- .../dist/compiled/darwin/arm64/kerberos.node | Bin 0 -> 143360 bytes .../dist/compiled/darwin/x64/kerberos.node | Bin 0 -> 122056 bytes .../dist/compiled/linux/arm64/kerberos.node | Bin 0 -> 1278608 bytes copilot/dist/compiled/linux/x64/kerberos.node | Bin 0 -> 1295480 bytes copilot/dist/compiled/win32/x64/kerberos.node | Bin 0 -> 688640 bytes copilot/dist/crypt32.node | Bin 0 -> 130048 bytes 9 files changed, 2 insertions(+), 10 deletions(-) create mode 100755 copilot/dist/compiled/darwin/arm64/kerberos.node create mode 100755 copilot/dist/compiled/darwin/x64/kerberos.node create mode 100755 copilot/dist/compiled/linux/arm64/kerberos.node create mode 100755 copilot/dist/compiled/linux/x64/kerberos.node create mode 100644 copilot/dist/compiled/win32/x64/kerberos.node create mode 100644 copilot/dist/crypt32.node diff --git a/copilot/dist/agent.js b/copilot/dist/agent.js index 95872d5a..7dc4b7a8 100644 --- a/copilot/dist/agent.js +++ b/copilot/dist/agent.js @@ -1,9 +1,3 @@ /*! For license information please see agent.js.LICENSE.txt */ -(()=>{var __webpack_modules__={39593:(e,t,n)=>{"use strict";const r=n(34411),i=Symbol("max"),o=Symbol("length"),s=Symbol("lengthCalculator"),a=Symbol("allowStale"),c=Symbol("maxAge"),l=Symbol("dispose"),u=Symbol("noDisposeOnSet"),p=Symbol("lruList"),d=Symbol("cache"),h=Symbol("updateAgeOnGet"),f=()=>1,m=(e,t,n)=>{const r=e[d].get(t);if(r){const t=r.value;if(g(e,t)){if(_(e,r),!e[a])return}else n&&(e[h]&&(r.value.now=Date.now()),e[p].unshiftNode(r));return t.value}},g=(e,t)=>{if(!t||!t.maxAge&&!e[c])return!1;const n=Date.now()-t.now;return t.maxAge?n>t.maxAge:e[c]&&n>e[c]},y=e=>{if(e[o]>e[i])for(let t=e[p].tail;e[o]>e[i]&&null!==t;){const n=t.prev;_(e,t),t=n}},_=(e,t)=>{if(t){const n=t.value;e[l]&&e[l](n.key,n.value),e[o]-=n.length,e[d].delete(n.key),e[p].removeNode(t)}};class v{constructor(e,t,n,r,i){this.key=e,this.value=t,this.length=n,this.now=r,this.maxAge=i||0}}const b=(e,t,n,r)=>{let i=n.value;g(e,i)&&(_(e,n),e[a]||(i=void 0)),i&&t.call(r,i.value,i.key,e)};e.exports=class{constructor(e){if("number"==typeof e&&(e={max:e}),e||(e={}),e.max&&("number"!=typeof e.max||e.max<0))throw new TypeError("max must be a non-negative number");this[i]=e.max||1/0;const t=e.length||f;if(this[s]="function"!=typeof t?f:t,this[a]=e.stale||!1,e.maxAge&&"number"!=typeof e.maxAge)throw new TypeError("maxAge must be a number");this[c]=e.maxAge||0,this[l]=e.dispose,this[u]=e.noDisposeOnSet||!1,this[h]=e.updateAgeOnGet||!1,this.reset()}set max(e){if("number"!=typeof e||e<0)throw new TypeError("max must be a non-negative number");this[i]=e||1/0,y(this)}get max(){return this[i]}set allowStale(e){this[a]=!!e}get allowStale(){return this[a]}set maxAge(e){if("number"!=typeof e)throw new TypeError("maxAge must be a non-negative number");this[c]=e,y(this)}get maxAge(){return this[c]}set lengthCalculator(e){"function"!=typeof e&&(e=f),e!==this[s]&&(this[s]=e,this[o]=0,this[p].forEach((e=>{e.length=this[s](e.value,e.key),this[o]+=e.length}))),y(this)}get lengthCalculator(){return this[s]}get length(){return this[o]}get itemCount(){return this[p].length}rforEach(e,t){t=t||this;for(let n=this[p].tail;null!==n;){const r=n.prev;b(this,e,n,t),n=r}}forEach(e,t){t=t||this;for(let n=this[p].head;null!==n;){const r=n.next;b(this,e,n,t),n=r}}keys(){return this[p].toArray().map((e=>e.key))}values(){return this[p].toArray().map((e=>e.value))}reset(){this[l]&&this[p]&&this[p].length&&this[p].forEach((e=>this[l](e.key,e.value))),this[d]=new Map,this[p]=new r,this[o]=0}dump(){return this[p].map((e=>!g(this,e)&&{k:e.key,v:e.value,e:e.now+(e.maxAge||0)})).toArray().filter((e=>e))}dumpLru(){return this[p]}set(e,t,n){if((n=n||this[c])&&"number"!=typeof n)throw new TypeError("maxAge must be a number");const r=n?Date.now():0,a=this[s](t,e);if(this[d].has(e)){if(a>this[i])return _(this,this[d].get(e)),!1;const s=this[d].get(e).value;return this[l]&&(this[u]||this[l](e,s.value)),s.now=r,s.maxAge=n,s.value=t,this[o]+=a-s.length,s.length=a,this.get(e),y(this),!0}const h=new v(e,t,a,r,n);return h.length>this[i]?(this[l]&&this[l](e,t),!1):(this[o]+=h.length,this[p].unshift(h),this[d].set(e,this[p].head),y(this),!0)}has(e){if(!this[d].has(e))return!1;const t=this[d].get(e).value;return!g(this,t)}get(e){return m(this,e,!0)}peek(e){return m(this,e,!1)}pop(){const e=this[p].tail;return e?(_(this,e),e.value):null}del(e){_(this,this[d].get(e))}load(e){this.reset();const t=Date.now();for(let n=e.length-1;n>=0;n--){const r=e[n],i=r.e||0;if(0===i)this.set(r.k,r.v);else{const e=i-t;e>0&&this.set(r.k,r.v,e)}}}prune(){this[d].forEach(((e,t)=>m(this,t,!1)))}}},22257:(e,t,n)=>{const r=Symbol("SemVer ANY");class i{static get ANY(){return r}constructor(e,t){if(t=o(t),e instanceof i){if(e.loose===!!t.loose)return e;e=e.value}e=e.trim().split(/\s+/).join(" "),l("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===r?this.value="":this.value=this.operator+this.semver.version,l("comp",this)}parse(e){const t=this.options.loose?s[a.COMPARATORLOOSE]:s[a.COMPARATOR],n=e.match(t);if(!n)throw new TypeError(`Invalid comparator: ${e}`);this.operator=void 0!==n[1]?n[1]:"","="===this.operator&&(this.operator=""),n[2]?this.semver=new u(n[2],this.options.loose):this.semver=r}toString(){return this.value}test(e){if(l("Comparator.test",e,this.options.loose),this.semver===r||e===r)return!0;if("string"==typeof e)try{e=new u(e,this.options)}catch(e){return!1}return c(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof i))throw new TypeError("a Comparator is required");return""===this.operator?""===this.value||new p(e.value,t).test(this.value):""===e.operator?""===e.value||new p(this.value,t).test(e.semver):!((t=o(t)).includePrerelease&&("<0.0.0-0"===this.value||"<0.0.0-0"===e.value)||!t.includePrerelease&&(this.value.startsWith("<0.0.0")||e.value.startsWith("<0.0.0"))||(!this.operator.startsWith(">")||!e.operator.startsWith(">"))&&(!this.operator.startsWith("<")||!e.operator.startsWith("<"))&&(this.semver.version!==e.semver.version||!this.operator.includes("=")||!e.operator.includes("="))&&!(c(this.semver,"<",e.semver,t)&&this.operator.startsWith(">")&&e.operator.startsWith("<"))&&!(c(this.semver,">",e.semver,t)&&this.operator.startsWith("<")&&e.operator.startsWith(">")))}}e.exports=i;const o=n(12893),{safeRe:s,t:a}=n(55765),c=n(7539),l=n(74225),u=n(26376),p=n(66902)},66902:(e,t,n)=>{class r{constructor(e,t){if(t=o(t),e instanceof r)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new r(e.raw,t);if(e instanceof s)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e.trim().split(/\s+/).join(" "),this.set=this.raw.split("||").map((e=>this.parseRange(e))).filter((e=>e.length)),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){const e=this.set[0];if(this.set=this.set.filter((e=>!g(e[0]))),0===this.set.length)this.set=[e];else if(this.set.length>1)for(const e of this.set)if(1===e.length&&y(e[0])){this.set=[e];break}}this.format()}format(){return this.range=this.set.map((e=>e.join(" ").trim())).join("||").trim(),this.range}toString(){return this.range}parseRange(e){const t=((this.options.includePrerelease&&f)|(this.options.loose&&m))+":"+e,n=i.get(t);if(n)return n;const r=this.options.loose,o=r?l[u.HYPHENRANGELOOSE]:l[u.HYPHENRANGE];e=e.replace(o,k(this.options.includePrerelease)),a("hyphen replace",e),e=e.replace(l[u.COMPARATORTRIM],p),a("comparator trim",e),e=e.replace(l[u.TILDETRIM],d),a("tilde trim",e),e=e.replace(l[u.CARETTRIM],h),a("caret trim",e);let c=e.split(" ").map((e=>v(e,this.options))).join(" ").split(/\s+/).map((e=>A(e,this.options)));r&&(c=c.filter((e=>(a("loose invalid filter",e,this.options),!!e.match(l[u.COMPARATORLOOSE]))))),a("range list",c);const y=new Map,_=c.map((e=>new s(e,this.options)));for(const e of _){if(g(e))return[e];y.set(e.value,e)}y.size>1&&y.has("")&&y.delete("");const b=[...y.values()];return i.set(t,b),b}intersects(e,t){if(!(e instanceof r))throw new TypeError("a Range is required");return this.set.some((n=>_(n,t)&&e.set.some((e=>_(e,t)&&n.every((n=>e.every((e=>n.intersects(e,t)))))))))}test(e){if(!e)return!1;if("string"==typeof e)try{e=new c(e,this.options)}catch(e){return!1}for(let t=0;t"<0.0.0-0"===e.value,y=e=>""===e.value,_=(e,t)=>{let n=!0;const r=e.slice();let i=r.pop();for(;n&&r.length;)n=r.every((e=>i.intersects(e,t))),i=r.pop();return n},v=(e,t)=>(a("comp",e,t),e=w(e,t),a("caret",e),e=E(e,t),a("tildes",e),e=x(e,t),a("xrange",e),e=I(e,t),a("stars",e),e),b=e=>!e||"x"===e.toLowerCase()||"*"===e,E=(e,t)=>e.trim().split(/\s+/).map((e=>T(e,t))).join(" "),T=(e,t)=>{const n=t.loose?l[u.TILDELOOSE]:l[u.TILDE];return e.replace(n,((t,n,r,i,o)=>{let s;return a("tilde",e,t,n,r,i,o),b(n)?s="":b(r)?s=`>=${n}.0.0 <${+n+1}.0.0-0`:b(i)?s=`>=${n}.${r}.0 <${n}.${+r+1}.0-0`:o?(a("replaceTilde pr",o),s=`>=${n}.${r}.${i}-${o} <${n}.${+r+1}.0-0`):s=`>=${n}.${r}.${i} <${n}.${+r+1}.0-0`,a("tilde return",s),s}))},w=(e,t)=>e.trim().split(/\s+/).map((e=>S(e,t))).join(" "),S=(e,t)=>{a("caret",e,t);const n=t.loose?l[u.CARETLOOSE]:l[u.CARET],r=t.includePrerelease?"-0":"";return e.replace(n,((t,n,i,o,s)=>{let c;return a("caret",e,t,n,i,o,s),b(n)?c="":b(i)?c=`>=${n}.0.0${r} <${+n+1}.0.0-0`:b(o)?c="0"===n?`>=${n}.${i}.0${r} <${n}.${+i+1}.0-0`:`>=${n}.${i}.0${r} <${+n+1}.0.0-0`:s?(a("replaceCaret pr",s),c="0"===n?"0"===i?`>=${n}.${i}.${o}-${s} <${n}.${i}.${+o+1}-0`:`>=${n}.${i}.${o}-${s} <${n}.${+i+1}.0-0`:`>=${n}.${i}.${o}-${s} <${+n+1}.0.0-0`):(a("no pr"),c="0"===n?"0"===i?`>=${n}.${i}.${o}${r} <${n}.${i}.${+o+1}-0`:`>=${n}.${i}.${o}${r} <${n}.${+i+1}.0-0`:`>=${n}.${i}.${o} <${+n+1}.0.0-0`),a("caret return",c),c}))},x=(e,t)=>(a("replaceXRanges",e,t),e.split(/\s+/).map((e=>C(e,t))).join(" ")),C=(e,t)=>{e=e.trim();const n=t.loose?l[u.XRANGELOOSE]:l[u.XRANGE];return e.replace(n,((n,r,i,o,s,c)=>{a("xRange",e,n,r,i,o,s,c);const l=b(i),u=l||b(o),p=u||b(s),d=p;return"="===r&&d&&(r=""),c=t.includePrerelease?"-0":"",l?n=">"===r||"<"===r?"<0.0.0-0":"*":r&&d?(u&&(o=0),s=0,">"===r?(r=">=",u?(i=+i+1,o=0,s=0):(o=+o+1,s=0)):"<="===r&&(r="<",u?i=+i+1:o=+o+1),"<"===r&&(c="-0"),n=`${r+i}.${o}.${s}${c}`):u?n=`>=${i}.0.0${c} <${+i+1}.0.0-0`:p&&(n=`>=${i}.${o}.0${c} <${i}.${+o+1}.0-0`),a("xRange return",n),n}))},I=(e,t)=>(a("replaceStars",e,t),e.trim().replace(l[u.STAR],"")),A=(e,t)=>(a("replaceGTE0",e,t),e.trim().replace(l[t.includePrerelease?u.GTE0PRE:u.GTE0],"")),k=e=>(t,n,r,i,o,s,a,c,l,u,p,d,h)=>`${n=b(r)?"":b(i)?`>=${r}.0.0${e?"-0":""}`:b(o)?`>=${r}.${i}.0${e?"-0":""}`:s?`>=${n}`:`>=${n}${e?"-0":""}`} ${c=b(l)?"":b(u)?`<${+l+1}.0.0-0`:b(p)?`<${l}.${+u+1}.0-0`:d?`<=${l}.${u}.${p}-${d}`:e?`<${l}.${u}.${+p+1}-0`:`<=${c}`}`.trim(),R=(e,t,n)=>{for(let n=0;n0){const r=e[n].semver;if(r.major===t.major&&r.minor===t.minor&&r.patch===t.patch)return!0}return!1}return!0}},26376:(e,t,n)=>{const r=n(74225),{MAX_LENGTH:i,MAX_SAFE_INTEGER:o}=n(83295),{safeRe:s,t:a}=n(55765),c=n(12893),{compareIdentifiers:l}=n(86742);class u{constructor(e,t){if(t=c(t),e instanceof u){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if("string"!=typeof e)throw new TypeError(`Invalid version. Must be a string. Got type "${typeof e}".`);if(e.length>i)throw new TypeError(`version is longer than ${i} characters`);r("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;const n=e.trim().match(t.loose?s[a.LOOSE]:s[a.FULL]);if(!n)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>o||this.major<0)throw new TypeError("Invalid major version");if(this.minor>o||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>o||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map((e=>{if(/^[0-9]+$/.test(e)){const t=+e;if(t>=0&&t=0;)"number"==typeof this.prerelease[r]&&(this.prerelease[r]++,r=-2);if(-1===r){if(t===this.prerelease.join(".")&&!1===n)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(e)}}if(t){let r=[t,e];!1===n&&(r=[t]),0===l(this.prerelease[0],t)?isNaN(this.prerelease[1])&&(this.prerelease=r):this.prerelease=r}break}default:throw new Error(`invalid increment argument: ${e}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}e.exports=u},13507:(e,t,n)=>{const r=n(33959);e.exports=(e,t)=>{const n=r(e.trim().replace(/^[=v]+/,""),t);return n?n.version:null}},7539:(e,t,n)=>{const r=n(58718),i=n(81194),o=n(71312),s=n(25903),a=n(21544),c=n(12056);e.exports=(e,t,n,l)=>{switch(t){case"===":return"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),e===n;case"!==":return"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),e!==n;case"":case"=":case"==":return r(e,n,l);case"!=":return i(e,n,l);case">":return o(e,n,l);case">=":return s(e,n,l);case"<":return a(e,n,l);case"<=":return c(e,n,l);default:throw new TypeError(`Invalid operator: ${t}`)}}},99038:(e,t,n)=>{const r=n(26376),i=n(33959),{safeRe:o,t:s}=n(55765);e.exports=(e,t)=>{if(e instanceof r)return e;if("number"==typeof e&&(e=String(e)),"string"!=typeof e)return null;let n=null;if((t=t||{}).rtl){let t;for(;(t=o[s.COERCERTL].exec(e))&&(!n||n.index+n[0].length!==e.length);)n&&t.index+t[0].length===n.index+n[0].length||(n=t),o[s.COERCERTL].lastIndex=t.index+t[1].length+t[2].length;o[s.COERCERTL].lastIndex=-1}else n=e.match(o[s.COERCE]);return null===n?null:i(`${n[2]}.${n[3]||"0"}.${n[4]||"0"}`,t)}},88880:(e,t,n)=>{const r=n(26376);e.exports=(e,t,n)=>{const i=new r(e,n),o=new r(t,n);return i.compare(o)||i.compareBuild(o)}},27880:(e,t,n)=>{const r=n(46269);e.exports=(e,t)=>r(e,t,!0)},46269:(e,t,n)=>{const r=n(26376);e.exports=(e,t,n)=>new r(e,n).compare(new r(t,n))},62378:(e,t,n)=>{const r=n(33959);e.exports=(e,t)=>{const n=r(e,null,!0),i=r(t,null,!0),o=n.compare(i);if(0===o)return null;const s=o>0,a=s?n:i,c=s?i:n,l=!!a.prerelease.length;if(c.prerelease.length&&!l)return c.patch||c.minor?a.patch?"patch":a.minor?"minor":"major":"major";const u=l?"pre":"";return n.major!==i.major?u+"major":n.minor!==i.minor?u+"minor":n.patch!==i.patch?u+"patch":"prerelease"}},58718:(e,t,n)=>{const r=n(46269);e.exports=(e,t,n)=>0===r(e,t,n)},71312:(e,t,n)=>{const r=n(46269);e.exports=(e,t,n)=>r(e,t,n)>0},25903:(e,t,n)=>{const r=n(46269);e.exports=(e,t,n)=>r(e,t,n)>=0},20253:(e,t,n)=>{const r=n(26376);e.exports=(e,t,n,i,o)=>{"string"==typeof n&&(o=i,i=n,n=void 0);try{return new r(e instanceof r?e.version:e,n).inc(t,i,o).version}catch(e){return null}}},21544:(e,t,n)=>{const r=n(46269);e.exports=(e,t,n)=>r(e,t,n)<0},12056:(e,t,n)=>{const r=n(46269);e.exports=(e,t,n)=>r(e,t,n)<=0},38679:(e,t,n)=>{const r=n(26376);e.exports=(e,t)=>new r(e,t).major},87789:(e,t,n)=>{const r=n(26376);e.exports=(e,t)=>new r(e,t).minor},81194:(e,t,n)=>{const r=n(46269);e.exports=(e,t,n)=>0!==r(e,t,n)},33959:(e,t,n)=>{const r=n(26376);e.exports=(e,t,n=!1)=>{if(e instanceof r)return e;try{return new r(e,t)}catch(e){if(!n)return null;throw e}}},52358:(e,t,n)=>{const r=n(26376);e.exports=(e,t)=>new r(e,t).patch},57559:(e,t,n)=>{const r=n(33959);e.exports=(e,t)=>{const n=r(e,t);return n&&n.prerelease.length?n.prerelease:null}},79795:(e,t,n)=>{const r=n(46269);e.exports=(e,t,n)=>r(t,e,n)},63657:(e,t,n)=>{const r=n(88880);e.exports=(e,t)=>e.sort(((e,n)=>r(n,e,t)))},45712:(e,t,n)=>{const r=n(66902);e.exports=(e,t,n)=>{try{t=new r(t,n)}catch(e){return!1}return t.test(e)}},21100:(e,t,n)=>{const r=n(88880);e.exports=(e,t)=>e.sort(((e,n)=>r(e,n,t)))},76397:(e,t,n)=>{const r=n(33959);e.exports=(e,t)=>{const n=r(e,t);return n?n.version:null}},81249:(e,t,n)=>{const r=n(55765),i=n(83295),o=n(26376),s=n(86742),a=n(33959),c=n(76397),l=n(13507),u=n(20253),p=n(62378),d=n(38679),h=n(87789),f=n(52358),m=n(57559),g=n(46269),y=n(79795),_=n(27880),v=n(88880),b=n(21100),E=n(63657),T=n(71312),w=n(21544),S=n(58718),x=n(81194),C=n(25903),I=n(12056),A=n(7539),k=n(99038),R=n(22257),P=n(66902),N=n(45712),O=n(51042),M=n(85775),D=n(71657),L=n(95316),F=n(89042),B=n(6826),j=n(97606),U=n(50032),q=n(82937),$=n(17908),H=n(50799);e.exports={parse:a,valid:c,clean:l,inc:u,diff:p,major:d,minor:h,patch:f,prerelease:m,compare:g,rcompare:y,compareLoose:_,compareBuild:v,sort:b,rsort:E,gt:T,lt:w,eq:S,neq:x,gte:C,lte:I,cmp:A,coerce:k,Comparator:R,Range:P,satisfies:N,toComparators:O,maxSatisfying:M,minSatisfying:D,minVersion:L,validRange:F,outside:B,gtr:j,ltr:U,intersects:q,simplifyRange:$,subset:H,SemVer:o,re:r.re,src:r.src,tokens:r.t,SEMVER_SPEC_VERSION:i.SEMVER_SPEC_VERSION,RELEASE_TYPES:i.RELEASE_TYPES,compareIdentifiers:s.compareIdentifiers,rcompareIdentifiers:s.rcompareIdentifiers}},83295:e=>{const t=Number.MAX_SAFE_INTEGER||9007199254740991;e.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:16,MAX_SAFE_BUILD_LENGTH:250,MAX_SAFE_INTEGER:t,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:"2.0.0",FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}},74225:e=>{const t="object"==typeof process&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};e.exports=t},86742:e=>{const t=/^[0-9]+$/,n=(e,n)=>{const r=t.test(e),i=t.test(n);return r&&i&&(e=+e,n=+n),e===n?0:r&&!i?-1:i&&!r?1:en(t,e)}},12893:e=>{const t=Object.freeze({loose:!0}),n=Object.freeze({});e.exports=e=>e?"object"!=typeof e?t:e:n},55765:(e,t,n)=>{const{MAX_SAFE_COMPONENT_LENGTH:r,MAX_SAFE_BUILD_LENGTH:i}=n(83295),o=n(74225),s=(t=e.exports={}).re=[],a=t.safeRe=[],c=t.src=[],l=t.t={};let u=0;const p="[a-zA-Z0-9-]",d=[["\\s",1],["\\d",r],[p,i]],h=(e,t,n)=>{const r=(e=>{for(const[t,n]of d)e=e.split(`${t}*`).join(`${t}{0,${n}}`).split(`${t}+`).join(`${t}{1,${n}}`);return e})(t),i=u++;o(e,i,t),l[e]=i,c[i]=t,s[i]=new RegExp(t,n?"g":void 0),a[i]=new RegExp(r,n?"g":void 0)};h("NUMERICIDENTIFIER","0|[1-9]\\d*"),h("NUMERICIDENTIFIERLOOSE","\\d+"),h("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${p}*`),h("MAINVERSION",`(${c[l.NUMERICIDENTIFIER]})\\.(${c[l.NUMERICIDENTIFIER]})\\.(${c[l.NUMERICIDENTIFIER]})`),h("MAINVERSIONLOOSE",`(${c[l.NUMERICIDENTIFIERLOOSE]})\\.(${c[l.NUMERICIDENTIFIERLOOSE]})\\.(${c[l.NUMERICIDENTIFIERLOOSE]})`),h("PRERELEASEIDENTIFIER",`(?:${c[l.NUMERICIDENTIFIER]}|${c[l.NONNUMERICIDENTIFIER]})`),h("PRERELEASEIDENTIFIERLOOSE",`(?:${c[l.NUMERICIDENTIFIERLOOSE]}|${c[l.NONNUMERICIDENTIFIER]})`),h("PRERELEASE",`(?:-(${c[l.PRERELEASEIDENTIFIER]}(?:\\.${c[l.PRERELEASEIDENTIFIER]})*))`),h("PRERELEASELOOSE",`(?:-?(${c[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${c[l.PRERELEASEIDENTIFIERLOOSE]})*))`),h("BUILDIDENTIFIER",`${p}+`),h("BUILD",`(?:\\+(${c[l.BUILDIDENTIFIER]}(?:\\.${c[l.BUILDIDENTIFIER]})*))`),h("FULLPLAIN",`v?${c[l.MAINVERSION]}${c[l.PRERELEASE]}?${c[l.BUILD]}?`),h("FULL",`^${c[l.FULLPLAIN]}$`),h("LOOSEPLAIN",`[v=\\s]*${c[l.MAINVERSIONLOOSE]}${c[l.PRERELEASELOOSE]}?${c[l.BUILD]}?`),h("LOOSE",`^${c[l.LOOSEPLAIN]}$`),h("GTLT","((?:<|>)?=?)"),h("XRANGEIDENTIFIERLOOSE",`${c[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),h("XRANGEIDENTIFIER",`${c[l.NUMERICIDENTIFIER]}|x|X|\\*`),h("XRANGEPLAIN",`[v=\\s]*(${c[l.XRANGEIDENTIFIER]})(?:\\.(${c[l.XRANGEIDENTIFIER]})(?:\\.(${c[l.XRANGEIDENTIFIER]})(?:${c[l.PRERELEASE]})?${c[l.BUILD]}?)?)?`),h("XRANGEPLAINLOOSE",`[v=\\s]*(${c[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[l.XRANGEIDENTIFIERLOOSE]})(?:${c[l.PRERELEASELOOSE]})?${c[l.BUILD]}?)?)?`),h("XRANGE",`^${c[l.GTLT]}\\s*${c[l.XRANGEPLAIN]}$`),h("XRANGELOOSE",`^${c[l.GTLT]}\\s*${c[l.XRANGEPLAINLOOSE]}$`),h("COERCE",`(^|[^\\d])(\\d{1,${r}})(?:\\.(\\d{1,${r}}))?(?:\\.(\\d{1,${r}}))?(?:$|[^\\d])`),h("COERCERTL",c[l.COERCE],!0),h("LONETILDE","(?:~>?)"),h("TILDETRIM",`(\\s*)${c[l.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",h("TILDE",`^${c[l.LONETILDE]}${c[l.XRANGEPLAIN]}$`),h("TILDELOOSE",`^${c[l.LONETILDE]}${c[l.XRANGEPLAINLOOSE]}$`),h("LONECARET","(?:\\^)"),h("CARETTRIM",`(\\s*)${c[l.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",h("CARET",`^${c[l.LONECARET]}${c[l.XRANGEPLAIN]}$`),h("CARETLOOSE",`^${c[l.LONECARET]}${c[l.XRANGEPLAINLOOSE]}$`),h("COMPARATORLOOSE",`^${c[l.GTLT]}\\s*(${c[l.LOOSEPLAIN]})$|^$`),h("COMPARATOR",`^${c[l.GTLT]}\\s*(${c[l.FULLPLAIN]})$|^$`),h("COMPARATORTRIM",`(\\s*)${c[l.GTLT]}\\s*(${c[l.LOOSEPLAIN]}|${c[l.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",h("HYPHENRANGE",`^\\s*(${c[l.XRANGEPLAIN]})\\s+-\\s+(${c[l.XRANGEPLAIN]})\\s*$`),h("HYPHENRANGELOOSE",`^\\s*(${c[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${c[l.XRANGEPLAINLOOSE]})\\s*$`),h("STAR","(<|>)?=?\\s*\\*"),h("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),h("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")},97606:(e,t,n)=>{const r=n(6826);e.exports=(e,t,n)=>r(e,t,">",n)},82937:(e,t,n)=>{const r=n(66902);e.exports=(e,t,n)=>(e=new r(e,n),t=new r(t,n),e.intersects(t,n))},50032:(e,t,n)=>{const r=n(6826);e.exports=(e,t,n)=>r(e,t,"<",n)},85775:(e,t,n)=>{const r=n(26376),i=n(66902);e.exports=(e,t,n)=>{let o=null,s=null,a=null;try{a=new i(t,n)}catch(e){return null}return e.forEach((e=>{a.test(e)&&(o&&-1!==s.compare(e)||(o=e,s=new r(o,n)))})),o}},71657:(e,t,n)=>{const r=n(26376),i=n(66902);e.exports=(e,t,n)=>{let o=null,s=null,a=null;try{a=new i(t,n)}catch(e){return null}return e.forEach((e=>{a.test(e)&&(o&&1!==s.compare(e)||(o=e,s=new r(o,n)))})),o}},95316:(e,t,n)=>{const r=n(26376),i=n(66902),o=n(71312);e.exports=(e,t)=>{e=new i(e,t);let n=new r("0.0.0");if(e.test(n))return n;if(n=new r("0.0.0-0"),e.test(n))return n;n=null;for(let t=0;t{const t=new r(e.semver.version);switch(e.operator){case">":0===t.prerelease.length?t.patch++:t.prerelease.push(0),t.raw=t.format();case"":case">=":s&&!o(t,s)||(s=t);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${e.operator}`)}})),!s||n&&!o(n,s)||(n=s)}return n&&e.test(n)?n:null}},6826:(e,t,n)=>{const r=n(26376),i=n(22257),{ANY:o}=i,s=n(66902),a=n(45712),c=n(71312),l=n(21544),u=n(12056),p=n(25903);e.exports=(e,t,n,d)=>{let h,f,m,g,y;switch(e=new r(e,d),t=new s(t,d),n){case">":h=c,f=u,m=l,g=">",y=">=";break;case"<":h=l,f=p,m=c,g="<",y="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(a(e,t,d))return!1;for(let n=0;n{e.semver===o&&(e=new i(">=0.0.0")),s=s||e,a=a||e,h(e.semver,s.semver,d)?s=e:m(e.semver,a.semver,d)&&(a=e)})),s.operator===g||s.operator===y)return!1;if((!a.operator||a.operator===g)&&f(e,a.semver))return!1;if(a.operator===y&&m(e,a.semver))return!1}return!0}},17908:(e,t,n)=>{const r=n(45712),i=n(46269);e.exports=(e,t,n)=>{const o=[];let s=null,a=null;const c=e.sort(((e,t)=>i(e,t,n)));for(const e of c)r(e,t,n)?(a=e,s||(s=e)):(a&&o.push([s,a]),a=null,s=null);s&&o.push([s,null]);const l=[];for(const[e,t]of o)e===t?l.push(e):t||e!==c[0]?t?e===c[0]?l.push(`<=${t}`):l.push(`${e} - ${t}`):l.push(`>=${e}`):l.push("*");const u=l.join(" || "),p="string"==typeof t.raw?t.raw:String(t);return u.length{const r=n(66902),i=n(22257),{ANY:o}=i,s=n(45712),a=n(46269),c=[new i(">=0.0.0-0")],l=[new i(">=0.0.0")],u=(e,t,n)=>{if(e===t)return!0;if(1===e.length&&e[0].semver===o){if(1===t.length&&t[0].semver===o)return!0;e=n.includePrerelease?c:l}if(1===t.length&&t[0].semver===o){if(n.includePrerelease)return!0;t=l}const r=new Set;let i,u,h,f,m,g,y;for(const t of e)">"===t.operator||">="===t.operator?i=p(i,t,n):"<"===t.operator||"<="===t.operator?u=d(u,t,n):r.add(t.semver);if(r.size>1)return null;if(i&&u){if(h=a(i.semver,u.semver,n),h>0)return null;if(0===h&&(">="!==i.operator||"<="!==u.operator))return null}for(const e of r){if(i&&!s(e,String(i),n))return null;if(u&&!s(e,String(u),n))return null;for(const r of t)if(!s(e,String(r),n))return!1;return!0}let _=!(!u||n.includePrerelease||!u.semver.prerelease.length)&&u.semver,v=!(!i||n.includePrerelease||!i.semver.prerelease.length)&&i.semver;_&&1===_.prerelease.length&&"<"===u.operator&&0===_.prerelease[0]&&(_=!1);for(const e of t){if(y=y||">"===e.operator||">="===e.operator,g=g||"<"===e.operator||"<="===e.operator,i)if(v&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===v.major&&e.semver.minor===v.minor&&e.semver.patch===v.patch&&(v=!1),">"===e.operator||">="===e.operator){if(f=p(i,e,n),f===e&&f!==i)return!1}else if(">="===i.operator&&!s(i.semver,String(e),n))return!1;if(u)if(_&&e.semver.prerelease&&e.semver.prerelease.length&&e.semver.major===_.major&&e.semver.minor===_.minor&&e.semver.patch===_.patch&&(_=!1),"<"===e.operator||"<="===e.operator){if(m=d(u,e,n),m===e&&m!==u)return!1}else if("<="===u.operator&&!s(u.semver,String(e),n))return!1;if(!e.operator&&(u||i)&&0!==h)return!1}return!(i&&g&&!u&&0!==h||u&&y&&!i&&0!==h||v||_)},p=(e,t,n)=>{if(!e)return t;const r=a(e.semver,t.semver,n);return r>0?e:r<0||">"===t.operator&&">="===e.operator?t:e},d=(e,t,n)=>{if(!e)return t;const r=a(e.semver,t.semver,n);return r<0?e:r>0||"<"===t.operator&&"<="===e.operator?t:e};e.exports=(e,t,n={})=>{if(e===t)return!0;e=new r(e,n),t=new r(t,n);let i=!1;e:for(const r of e.set){for(const e of t.set){const t=u(r,e,n);if(i=i||null!==t,t)continue e}if(i)return!1}return!0}},51042:(e,t,n)=>{const r=n(66902);e.exports=(e,t)=>new r(e,t).set.map((e=>e.map((e=>e.value)).join(" ").trim().split(" ")))},89042:(e,t,n)=>{const r=n(66902);e.exports=(e,t)=>{try{return new r(e,t).range||"*"}catch(e){return null}}},23870:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ProgressType=t.ProgressToken=t.createMessageConnection=t.NullLogger=t.ConnectionOptions=t.ConnectionStrategy=t.AbstractMessageBuffer=t.WriteableStreamMessageWriter=t.AbstractMessageWriter=t.MessageWriter=t.ReadableStreamMessageReader=t.AbstractMessageReader=t.MessageReader=t.SharedArrayReceiverStrategy=t.SharedArraySenderStrategy=t.CancellationToken=t.CancellationTokenSource=t.Emitter=t.Event=t.Disposable=t.LRUCache=t.Touch=t.LinkedMap=t.ParameterStructures=t.NotificationType9=t.NotificationType8=t.NotificationType7=t.NotificationType6=t.NotificationType5=t.NotificationType4=t.NotificationType3=t.NotificationType2=t.NotificationType1=t.NotificationType0=t.NotificationType=t.ErrorCodes=t.ResponseError=t.RequestType9=t.RequestType8=t.RequestType7=t.RequestType6=t.RequestType5=t.RequestType4=t.RequestType3=t.RequestType2=t.RequestType1=t.RequestType0=t.RequestType=t.Message=t.RAL=void 0,t.MessageStrategy=t.CancellationStrategy=t.CancellationSenderStrategy=t.CancellationReceiverStrategy=t.ConnectionError=t.ConnectionErrors=t.LogTraceNotification=t.SetTraceNotification=t.TraceFormat=t.TraceValues=t.Trace=void 0;const r=n(20839);Object.defineProperty(t,"Message",{enumerable:!0,get:function(){return r.Message}}),Object.defineProperty(t,"RequestType",{enumerable:!0,get:function(){return r.RequestType}}),Object.defineProperty(t,"RequestType0",{enumerable:!0,get:function(){return r.RequestType0}}),Object.defineProperty(t,"RequestType1",{enumerable:!0,get:function(){return r.RequestType1}}),Object.defineProperty(t,"RequestType2",{enumerable:!0,get:function(){return r.RequestType2}}),Object.defineProperty(t,"RequestType3",{enumerable:!0,get:function(){return r.RequestType3}}),Object.defineProperty(t,"RequestType4",{enumerable:!0,get:function(){return r.RequestType4}}),Object.defineProperty(t,"RequestType5",{enumerable:!0,get:function(){return r.RequestType5}}),Object.defineProperty(t,"RequestType6",{enumerable:!0,get:function(){return r.RequestType6}}),Object.defineProperty(t,"RequestType7",{enumerable:!0,get:function(){return r.RequestType7}}),Object.defineProperty(t,"RequestType8",{enumerable:!0,get:function(){return r.RequestType8}}),Object.defineProperty(t,"RequestType9",{enumerable:!0,get:function(){return r.RequestType9}}),Object.defineProperty(t,"ResponseError",{enumerable:!0,get:function(){return r.ResponseError}}),Object.defineProperty(t,"ErrorCodes",{enumerable:!0,get:function(){return r.ErrorCodes}}),Object.defineProperty(t,"NotificationType",{enumerable:!0,get:function(){return r.NotificationType}}),Object.defineProperty(t,"NotificationType0",{enumerable:!0,get:function(){return r.NotificationType0}}),Object.defineProperty(t,"NotificationType1",{enumerable:!0,get:function(){return r.NotificationType1}}),Object.defineProperty(t,"NotificationType2",{enumerable:!0,get:function(){return r.NotificationType2}}),Object.defineProperty(t,"NotificationType3",{enumerable:!0,get:function(){return r.NotificationType3}}),Object.defineProperty(t,"NotificationType4",{enumerable:!0,get:function(){return r.NotificationType4}}),Object.defineProperty(t,"NotificationType5",{enumerable:!0,get:function(){return r.NotificationType5}}),Object.defineProperty(t,"NotificationType6",{enumerable:!0,get:function(){return r.NotificationType6}}),Object.defineProperty(t,"NotificationType7",{enumerable:!0,get:function(){return r.NotificationType7}}),Object.defineProperty(t,"NotificationType8",{enumerable:!0,get:function(){return r.NotificationType8}}),Object.defineProperty(t,"NotificationType9",{enumerable:!0,get:function(){return r.NotificationType9}}),Object.defineProperty(t,"ParameterStructures",{enumerable:!0,get:function(){return r.ParameterStructures}});const i=n(96184);Object.defineProperty(t,"LinkedMap",{enumerable:!0,get:function(){return i.LinkedMap}}),Object.defineProperty(t,"LRUCache",{enumerable:!0,get:function(){return i.LRUCache}}),Object.defineProperty(t,"Touch",{enumerable:!0,get:function(){return i.Touch}});const o=n(83911);Object.defineProperty(t,"Disposable",{enumerable:!0,get:function(){return o.Disposable}});const s=n(27135);Object.defineProperty(t,"Event",{enumerable:!0,get:function(){return s.Event}}),Object.defineProperty(t,"Emitter",{enumerable:!0,get:function(){return s.Emitter}});const a=n(13881);Object.defineProperty(t,"CancellationTokenSource",{enumerable:!0,get:function(){return a.CancellationTokenSource}}),Object.defineProperty(t,"CancellationToken",{enumerable:!0,get:function(){return a.CancellationToken}});const c=n(98211);Object.defineProperty(t,"SharedArraySenderStrategy",{enumerable:!0,get:function(){return c.SharedArraySenderStrategy}}),Object.defineProperty(t,"SharedArrayReceiverStrategy",{enumerable:!0,get:function(){return c.SharedArrayReceiverStrategy}});const l=n(56525);Object.defineProperty(t,"MessageReader",{enumerable:!0,get:function(){return l.MessageReader}}),Object.defineProperty(t,"AbstractMessageReader",{enumerable:!0,get:function(){return l.AbstractMessageReader}}),Object.defineProperty(t,"ReadableStreamMessageReader",{enumerable:!0,get:function(){return l.ReadableStreamMessageReader}});const u=n(96654);Object.defineProperty(t,"MessageWriter",{enumerable:!0,get:function(){return u.MessageWriter}}),Object.defineProperty(t,"AbstractMessageWriter",{enumerable:!0,get:function(){return u.AbstractMessageWriter}}),Object.defineProperty(t,"WriteableStreamMessageWriter",{enumerable:!0,get:function(){return u.WriteableStreamMessageWriter}});const p=n(75530);Object.defineProperty(t,"AbstractMessageBuffer",{enumerable:!0,get:function(){return p.AbstractMessageBuffer}});const d=n(61343);Object.defineProperty(t,"ConnectionStrategy",{enumerable:!0,get:function(){return d.ConnectionStrategy}}),Object.defineProperty(t,"ConnectionOptions",{enumerable:!0,get:function(){return d.ConnectionOptions}}),Object.defineProperty(t,"NullLogger",{enumerable:!0,get:function(){return d.NullLogger}}),Object.defineProperty(t,"createMessageConnection",{enumerable:!0,get:function(){return d.createMessageConnection}}),Object.defineProperty(t,"ProgressToken",{enumerable:!0,get:function(){return d.ProgressToken}}),Object.defineProperty(t,"ProgressType",{enumerable:!0,get:function(){return d.ProgressType}}),Object.defineProperty(t,"Trace",{enumerable:!0,get:function(){return d.Trace}}),Object.defineProperty(t,"TraceValues",{enumerable:!0,get:function(){return d.TraceValues}}),Object.defineProperty(t,"TraceFormat",{enumerable:!0,get:function(){return d.TraceFormat}}),Object.defineProperty(t,"SetTraceNotification",{enumerable:!0,get:function(){return d.SetTraceNotification}}),Object.defineProperty(t,"LogTraceNotification",{enumerable:!0,get:function(){return d.LogTraceNotification}}),Object.defineProperty(t,"ConnectionErrors",{enumerable:!0,get:function(){return d.ConnectionErrors}}),Object.defineProperty(t,"ConnectionError",{enumerable:!0,get:function(){return d.ConnectionError}}),Object.defineProperty(t,"CancellationReceiverStrategy",{enumerable:!0,get:function(){return d.CancellationReceiverStrategy}}),Object.defineProperty(t,"CancellationSenderStrategy",{enumerable:!0,get:function(){return d.CancellationSenderStrategy}}),Object.defineProperty(t,"CancellationStrategy",{enumerable:!0,get:function(){return d.CancellationStrategy}}),Object.defineProperty(t,"MessageStrategy",{enumerable:!0,get:function(){return d.MessageStrategy}});const h=n(30147);t.RAL=h.default},13881:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CancellationTokenSource=t.CancellationToken=void 0;const r=n(30147),i=n(67574),o=n(27135);var s;!function(e){e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:o.Event.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:o.Event.None}),e.is=function(t){const n=t;return n&&(n===e.None||n===e.Cancelled||i.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}}(s=t.CancellationToken||(t.CancellationToken={}));const a=Object.freeze((function(e,t){const n=(0,r.default)().timer.setTimeout(e.bind(t),0);return{dispose(){n.dispose()}}}));class c{constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?a:(this._emitter||(this._emitter=new o.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}}t.CancellationTokenSource=class{get token(){return this._token||(this._token=new c),this._token}cancel(){this._token?this._token.cancel():this._token=s.Cancelled}dispose(){this._token?this._token instanceof c&&this._token.dispose():this._token=s.None}}},61343:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createMessageConnection=t.ConnectionOptions=t.MessageStrategy=t.CancellationStrategy=t.CancellationSenderStrategy=t.CancellationReceiverStrategy=t.RequestCancellationReceiverStrategy=t.IdCancellationReceiverStrategy=t.ConnectionStrategy=t.ConnectionError=t.ConnectionErrors=t.LogTraceNotification=t.SetTraceNotification=t.TraceFormat=t.TraceValues=t.Trace=t.NullLogger=t.ProgressType=t.ProgressToken=void 0;const r=n(30147),i=n(67574),o=n(20839),s=n(96184),a=n(27135),c=n(13881);var l,u,p,d,h,f,m,g,y,_,v,b,E,T,w,S,x,C;!function(e){e.type=new o.NotificationType("$/cancelRequest")}(l||(l={})),function(e){e.is=function(e){return"string"==typeof e||"number"==typeof e}}(u=t.ProgressToken||(t.ProgressToken={})),function(e){e.type=new o.NotificationType("$/progress")}(p||(p={})),t.ProgressType=class{constructor(){}},function(e){e.is=function(e){return i.func(e)}}(d||(d={})),t.NullLogger=Object.freeze({error:()=>{},warn:()=>{},info:()=>{},log:()=>{}}),function(e){e[e.Off=0]="Off",e[e.Messages=1]="Messages",e[e.Compact=2]="Compact",e[e.Verbose=3]="Verbose"}(h=t.Trace||(t.Trace={})),(C=t.TraceValues||(t.TraceValues={})).Off="off",C.Messages="messages",C.Compact="compact",C.Verbose="verbose",function(e){e.fromString=function(t){if(!i.string(t))return e.Off;switch(t=t.toLowerCase()){case"off":default:return e.Off;case"messages":return e.Messages;case"compact":return e.Compact;case"verbose":return e.Verbose}},e.toString=function(t){switch(t){case e.Off:return"off";case e.Messages:return"messages";case e.Compact:return"compact";case e.Verbose:return"verbose";default:return"off"}}}(h=t.Trace||(t.Trace={})),function(e){e.Text="text",e.JSON="json"}(t.TraceFormat||(t.TraceFormat={})),function(e){e.fromString=function(t){return i.string(t)&&"json"===(t=t.toLowerCase())?e.JSON:e.Text}}(f=t.TraceFormat||(t.TraceFormat={})),function(e){e.type=new o.NotificationType("$/setTrace")}(m=t.SetTraceNotification||(t.SetTraceNotification={})),function(e){e.type=new o.NotificationType("$/logTrace")}(g=t.LogTraceNotification||(t.LogTraceNotification={})),function(e){e[e.Closed=1]="Closed",e[e.Disposed=2]="Disposed",e[e.AlreadyListening=3]="AlreadyListening"}(y=t.ConnectionErrors||(t.ConnectionErrors={}));class I extends Error{constructor(e,t){super(t),this.code=e,Object.setPrototypeOf(this,I.prototype)}}t.ConnectionError=I,function(e){e.is=function(e){const t=e;return t&&i.func(t.cancelUndispatched)}}(_=t.ConnectionStrategy||(t.ConnectionStrategy={})),function(e){e.is=function(e){const t=e;return t&&(void 0===t.kind||"id"===t.kind)&&i.func(t.createCancellationTokenSource)&&(void 0===t.dispose||i.func(t.dispose))}}(v=t.IdCancellationReceiverStrategy||(t.IdCancellationReceiverStrategy={})),function(e){e.is=function(e){const t=e;return t&&"request"===t.kind&&i.func(t.createCancellationTokenSource)&&(void 0===t.dispose||i.func(t.dispose))}}(b=t.RequestCancellationReceiverStrategy||(t.RequestCancellationReceiverStrategy={})),function(e){e.Message=Object.freeze({createCancellationTokenSource:e=>new c.CancellationTokenSource}),e.is=function(e){return v.is(e)||b.is(e)}}(E=t.CancellationReceiverStrategy||(t.CancellationReceiverStrategy={})),function(e){e.Message=Object.freeze({sendCancellation:(e,t)=>e.sendNotification(l.type,{id:t}),cleanup(e){}}),e.is=function(e){const t=e;return t&&i.func(t.sendCancellation)&&i.func(t.cleanup)}}(T=t.CancellationSenderStrategy||(t.CancellationSenderStrategy={})),function(e){e.Message=Object.freeze({receiver:E.Message,sender:T.Message}),e.is=function(e){const t=e;return t&&E.is(t.receiver)&&T.is(t.sender)}}(w=t.CancellationStrategy||(t.CancellationStrategy={})),function(e){e.is=function(e){const t=e;return t&&i.func(t.handleMessage)}}(S=t.MessageStrategy||(t.MessageStrategy={})),(t.ConnectionOptions||(t.ConnectionOptions={})).is=function(e){const t=e;return t&&(w.is(t.cancellationStrategy)||_.is(t.connectionStrategy)||S.is(t.messageStrategy))},function(e){e[e.New=1]="New",e[e.Listening=2]="Listening",e[e.Closed=3]="Closed",e[e.Disposed=4]="Disposed"}(x||(x={})),t.createMessageConnection=function(e,n,_,b){const E=void 0!==_?_:t.NullLogger;let T=0,C=0,A=0;const k="2.0";let R;const P=new Map;let N;const O=new Map,M=new Map;let D,L,F=new s.LinkedMap,B=new Map,j=new Set,U=new Map,q=h.Off,$=f.Text,H=x.New;const V=new a.Emitter,z=new a.Emitter,W=new a.Emitter,K=new a.Emitter,G=new a.Emitter,X=b&&b.cancellationStrategy?b.cancellationStrategy:w.Message;function Y(e){if(null===e)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+e.toString()}function Z(e){}function Q(){return H===x.Listening}function J(){return H===x.Closed}function ee(){return H===x.Disposed}function te(){H!==x.New&&H!==x.Listening||(H=x.Closed,z.fire(void 0))}function ne(){D||0===F.size||(D=(0,r.default)().timer.setImmediate((()=>{D=void 0,function(){if(0===F.size)return;const e=F.shift();try{const t=b?.messageStrategy;S.is(t)?t.handleMessage(e,re):re(e)}finally{ne()}}()})))}function re(e){o.Message.isRequest(e)?function(e){if(ee())return;function t(t,r,i){const s={jsonrpc:k,id:e.id};t instanceof o.ResponseError?s.error=t.toJson():s.result=void 0===t?null:t,se(s,r,i),n.write(s).catch((()=>E.error("Sending response failed.")))}function r(t,r,i){const o={jsonrpc:k,id:e.id,error:t.toJson()};se(o,r,i),n.write(o).catch((()=>E.error("Sending response failed.")))}!function(e){if(q!==h.Off&&L)if($===f.Text){let t;q!==h.Verbose&&q!==h.Compact||!e.params||(t=`Params: ${oe(e.params)}\n\n`),L.log(`Received request '${e.method} - (${e.id})'.`,t)}else ce("receive-request",e)}(e);const s=P.get(e.method);let a,c;s&&(a=s.type,c=s.handler);const l=Date.now();if(c||R){const s=e.id??String(Date.now()),u=v.is(X.receiver)?X.receiver.createCancellationTokenSource(s):X.receiver.createCancellationTokenSource(e);null!==e.id&&j.has(e.id)&&u.cancel(),null!==e.id&&U.set(s,u);try{let p;if(c)if(void 0===e.params){if(void 0!==a&&0!==a.numberOfParams)return void r(new o.ResponseError(o.ErrorCodes.InvalidParams,`Request ${e.method} defines ${a.numberOfParams} params but received none.`),e.method,l);p=c(u.token)}else if(Array.isArray(e.params)){if(void 0!==a&&a.parameterStructures===o.ParameterStructures.byName)return void r(new o.ResponseError(o.ErrorCodes.InvalidParams,`Request ${e.method} defines parameters by name but received parameters by position`),e.method,l);p=c(...e.params,u.token)}else{if(void 0!==a&&a.parameterStructures===o.ParameterStructures.byPosition)return void r(new o.ResponseError(o.ErrorCodes.InvalidParams,`Request ${e.method} defines parameters by position but received parameters by name`),e.method,l);p=c(e.params,u.token)}else R&&(p=R(e.method,e.params,u.token));const d=p;p?d.then?d.then((n=>{U.delete(s),t(n,e.method,l)}),(t=>{U.delete(s),t instanceof o.ResponseError?r(t,e.method,l):t&&i.string(t.message)?r(new o.ResponseError(o.ErrorCodes.InternalError,`Request ${e.method} failed with message: ${t.message}`),e.method,l):r(new o.ResponseError(o.ErrorCodes.InternalError,`Request ${e.method} failed unexpectedly without providing any details.`),e.method,l)})):(U.delete(s),t(p,e.method,l)):(U.delete(s),function(t,r,i){void 0===t&&(t=null);const o={jsonrpc:k,id:e.id,result:t};se(o,r,i),n.write(o).catch((()=>E.error("Sending response failed.")))}(p,e.method,l))}catch(n){U.delete(s),n instanceof o.ResponseError?t(n,e.method,l):n&&i.string(n.message)?r(new o.ResponseError(o.ErrorCodes.InternalError,`Request ${e.method} failed with message: ${n.message}`),e.method,l):r(new o.ResponseError(o.ErrorCodes.InternalError,`Request ${e.method} failed unexpectedly without providing any details.`),e.method,l)}}else r(new o.ResponseError(o.ErrorCodes.MethodNotFound,`Unhandled method ${e.method}`),e.method,l)}(e):o.Message.isNotification(e)?function(e){if(ee())return;let t,n;if(e.method===l.type.method){const t=e.params.id;return j.delete(t),void ae(e)}{const r=O.get(e.method);r&&(n=r.handler,t=r.type)}if(n||N)try{if(ae(e),n)if(void 0===e.params)void 0!==t&&0!==t.numberOfParams&&t.parameterStructures!==o.ParameterStructures.byName&&E.error(`Notification ${e.method} defines ${t.numberOfParams} params but received none.`),n();else if(Array.isArray(e.params)){const r=e.params;e.method===p.type.method&&2===r.length&&u.is(r[0])?n({token:r[0],value:r[1]}):(void 0!==t&&(t.parameterStructures===o.ParameterStructures.byName&&E.error(`Notification ${e.method} defines parameters by name but received parameters by position`),t.numberOfParams!==e.params.length&&E.error(`Notification ${e.method} defines ${t.numberOfParams} params but received ${r.length} arguments`)),n(...r))}else void 0!==t&&t.parameterStructures===o.ParameterStructures.byPosition&&E.error(`Notification ${e.method} defines parameters by position but received parameters by name`),n(e.params);else N&&N(e.method,e.params)}catch(t){t.message?E.error(`Notification handler '${e.method}' failed with message: ${t.message}`):E.error(`Notification handler '${e.method}' failed unexpectedly.`)}else W.fire(e)}(e):o.Message.isResponse(e)?function(e){if(!ee())if(null===e.id)e.error?E.error(`Received response message without id: Error is: \n${JSON.stringify(e.error,void 0,4)}`):E.error("Received response message without id. No further error information provided.");else{const t=e.id,n=B.get(t);if(function(e,t){if(q!==h.Off&&L)if($===f.Text){let n;if(q!==h.Verbose&&q!==h.Compact||(e.error&&e.error.data?n=`Error data: ${oe(e.error.data)}\n\n`:e.result?n=`Result: ${oe(e.result)}\n\n`:void 0===e.error&&(n="No result returned.\n\n")),t){const r=e.error?` Request failed: ${e.error.message} (${e.error.code}).`:"";L.log(`Received response '${t.method} - (${e.id})' in ${Date.now()-t.timerStart}ms.${r}`,n)}else L.log(`Received response ${e.id} without active response promise.`,n)}else ce("receive-response",e)}(e,n),void 0!==n){B.delete(t);try{if(e.error){const t=e.error;n.reject(new o.ResponseError(t.code,t.message,t.data))}else{if(void 0===e.result)throw new Error("Should never happen.");n.resolve(e.result)}}catch(e){e.message?E.error(`Response handler '${n.method}' failed with message: ${e.message}`):E.error(`Response handler '${n.method}' failed unexpectedly.`)}}}}(e):function(e){if(!e)return void E.error("Received empty message.");E.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(e,null,4)}`);const t=e;if(i.string(t.id)||i.number(t.id)){const e=t.id,n=B.get(e);n&&n.reject(new Error("The received response has neither a result nor an error property."))}}(e)}e.onClose(te),e.onError((function(e){V.fire([e,void 0,void 0])})),n.onClose(te),n.onError((function(e){V.fire(e)}));const ie=e=>{try{if(o.Message.isNotification(e)&&e.method===l.type.method){const t=e.params.id,r=Y(t),i=F.get(r);if(o.Message.isRequest(i)){const o=b?.connectionStrategy,s=o&&o.cancelUndispatched?o.cancelUndispatched(i,Z):void 0;if(s&&(void 0!==s.error||void 0!==s.result))return F.delete(r),U.delete(t),s.id=i.id,se(s,e.method,Date.now()),void n.write(s).catch((()=>E.error("Sending response for canceled message failed.")))}const s=U.get(t);if(void 0!==s)return s.cancel(),void ae(e);j.add(t)}!function(e,t){var n;o.Message.isRequest(t)?e.set(Y(t.id),t):o.Message.isResponse(t)?e.set(null===(n=t.id)?"res-unknown-"+(++A).toString():"res-"+n.toString(),t):e.set("not-"+(++C).toString(),t)}(F,e)}finally{ne()}};function oe(e){if(null!=e)switch(q){case h.Verbose:return JSON.stringify(e,null,4);case h.Compact:return JSON.stringify(e);default:return}}function se(e,t,n){if(q!==h.Off&&L)if($===f.Text){let r;q!==h.Verbose&&q!==h.Compact||(e.error&&e.error.data?r=`Error data: ${oe(e.error.data)}\n\n`:e.result?r=`Result: ${oe(e.result)}\n\n`:void 0===e.error&&(r="No result returned.\n\n")),L.log(`Sending response '${t} - (${e.id})'. Processing request took ${Date.now()-n}ms`,r)}else ce("send-response",e)}function ae(e){if(q!==h.Off&&L&&e.method!==g.type.method)if($===f.Text){let t;q!==h.Verbose&&q!==h.Compact||(t=e.params?`Params: ${oe(e.params)}\n\n`:"No parameters provided.\n\n"),L.log(`Received notification '${e.method}'.`,t)}else ce("receive-notification",e)}function ce(e,t){if(!L||q===h.Off)return;const n={isLSPMessage:!0,type:e,message:t,timestamp:Date.now()};L.log(n)}function le(){if(J())throw new I(y.Closed,"Connection is closed.");if(ee())throw new I(y.Disposed,"Connection is disposed.")}function ue(e){return void 0===e?null:e}function pe(e){return null===e?void 0:e}function de(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}function he(e,t){switch(e){case o.ParameterStructures.auto:return de(t)?pe(t):[ue(t)];case o.ParameterStructures.byName:if(!de(t))throw new Error("Received parameters by name but param is not an object literal.");return pe(t);case o.ParameterStructures.byPosition:return[ue(t)];default:throw new Error(`Unknown parameter structure ${e.toString()}`)}}function fe(e,t){let n;const r=e.numberOfParams;switch(r){case 0:n=void 0;break;case 1:n=he(e.parameterStructures,t[0]);break;default:n=[];for(let e=0;e{let r,s;if(le(),i.string(e)){r=e;const n=t[0];let i=0,a=o.ParameterStructures.auto;o.ParameterStructures.is(n)&&(i=1,a=n);let c=t.length;const l=c-i;switch(l){case 0:s=void 0;break;case 1:s=he(a,t[i]);break;default:if(a===o.ParameterStructures.byName)throw new Error(`Received ${l} parameters for 'by Name' notification parameter structure.`);s=t.slice(i,c).map((e=>ue(e)))}}else{const n=t;r=e.method,s=fe(e,n)}const a={jsonrpc:k,method:r,params:s};return function(e){if(q!==h.Off&&L)if($===f.Text){let t;q!==h.Verbose&&q!==h.Compact||(t=e.params?`Params: ${oe(e.params)}\n\n`:"No parameters provided.\n\n"),L.log(`Sending notification '${e.method}'.`,t)}else ce("send-notification",e)}(a),n.write(a).catch((e=>{throw E.error("Sending notification failed."),e}))},onNotification:(e,t)=>{let n;return le(),i.func(e)?N=e:t&&(i.string(e)?(n=e,O.set(e,{type:void 0,handler:t})):(n=e.method,O.set(e.method,{type:e,handler:t}))),{dispose:()=>{void 0!==n?O.delete(n):N=void 0}}},onProgress:(e,t,n)=>{if(M.has(t))throw new Error(`Progress handler for token ${t} already registered`);return M.set(t,n),{dispose:()=>{M.delete(t)}}},sendProgress:(e,t,n)=>me.sendNotification(p.type,{token:t,value:n}),onUnhandledProgress:K.event,sendRequest:(e,...t)=>{let r,s,a;if(le(),function(){if(!Q())throw new Error("Call listen() first.")}(),i.string(e)){r=e;const n=t[0],i=t[t.length-1];let l=0,u=o.ParameterStructures.auto;o.ParameterStructures.is(n)&&(l=1,u=n);let p=t.length;c.CancellationToken.is(i)&&(p-=1,a=i);const d=p-l;switch(d){case 0:s=void 0;break;case 1:s=he(u,t[l]);break;default:if(u===o.ParameterStructures.byName)throw new Error(`Received ${d} parameters for 'by Name' request parameter structure.`);s=t.slice(l,p).map((e=>ue(e)))}}else{const n=t;r=e.method,s=fe(e,n);const i=e.numberOfParams;a=c.CancellationToken.is(n[i])?n[i]:void 0}const l=T++;let u;a&&(u=a.onCancellationRequested((()=>{const e=X.sender.sendCancellation(me,l);return void 0===e?(E.log(`Received no promise from cancellation strategy when cancelling id ${l}`),Promise.resolve()):e.catch((()=>{E.log(`Sending cancellation messages for id ${l} failed`)}))})));const p={jsonrpc:k,id:l,method:r,params:s};return function(e){if(q!==h.Off&&L)if($===f.Text){let t;q!==h.Verbose&&q!==h.Compact||!e.params||(t=`Params: ${oe(e.params)}\n\n`),L.log(`Sending request '${e.method} - (${e.id})'.`,t)}else ce("send-request",e)}(p),"function"==typeof X.sender.enableCancellation&&X.sender.enableCancellation(p),new Promise((async(e,t)=>{const i={method:r,timerStart:Date.now(),resolve:t=>{e(t),X.sender.cleanup(l),u?.dispose()},reject:e=>{t(e),X.sender.cleanup(l),u?.dispose()}};try{await n.write(p),B.set(l,i)}catch(e){throw E.error("Sending request failed."),i.reject(new o.ResponseError(o.ErrorCodes.MessageWriteError,e.message?e.message:"Unknown reason")),e}}))},onRequest:(e,t)=>{le();let n=null;return d.is(e)?(n=void 0,R=e):i.string(e)?(n=null,void 0!==t&&(n=e,P.set(e,{handler:t,type:void 0}))):void 0!==t&&(n=e.method,P.set(e.method,{type:e,handler:t})),{dispose:()=>{null!==n&&(void 0!==n?P.delete(n):R=void 0)}}},hasPendingResponse:()=>B.size>0,trace:async(e,t,n)=>{let r=!1,o=f.Text;void 0!==n&&(i.boolean(n)?r=n:(r=n.sendNotification||!1,o=n.traceFormat||f.Text)),q=e,$=o,L=q===h.Off?void 0:t,!r||J()||ee()||await me.sendNotification(m.type,{value:h.toString(e)})},onError:V.event,onClose:z.event,onUnhandledNotification:W.event,onDispose:G.event,end:()=>{n.end()},dispose:()=>{if(ee())return;H=x.Disposed,G.fire(void 0);const t=new o.ResponseError(o.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(const e of B.values())e.reject(t);B=new Map,U=new Map,j=new Set,F=new s.LinkedMap,i.func(n.dispose)&&n.dispose(),i.func(e.dispose)&&e.dispose()},listen:()=>{le(),function(){if(Q())throw new I(y.AlreadyListening,"Connection is already listening")}(),H=x.Listening,e.listen(ie)},inspect:()=>{(0,r.default)().console.log("inspect")}};return me.onNotification(g.type,(e=>{if(q===h.Off||!L)return;const t=q===h.Verbose||q===h.Compact;L.log(e.message,t?e.verbose:void 0)})),me.onNotification(p.type,(e=>{const t=M.get(e.token);t?t(e.value):K.fire(e)})),me}},83911:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Disposable=void 0,(t.Disposable||(t.Disposable={})).create=function(e){return{dispose:e}}},27135:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Emitter=t.Event=void 0;const r=n(30147);!function(e){const t={dispose(){}};e.None=function(){return t}}(t.Event||(t.Event={}));class i{add(e,t=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(t),Array.isArray(n)&&n.push({dispose:()=>this.remove(e,t)})}remove(e,t=null){if(!this._callbacks)return;let n=!1;for(let r=0,i=this._callbacks.length;r{this._callbacks||(this._callbacks=new i),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,t);const r={dispose:()=>{this._callbacks&&(this._callbacks.remove(e,t),r.dispose=o._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))}};return Array.isArray(n)&&n.push(r),r}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}}t.Emitter=o,o._noop=function(){}},67574:(e,t)=>{"use strict";function n(e){return"string"==typeof e||e instanceof String}function r(e){return Array.isArray(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.stringArray=t.array=t.func=t.error=t.number=t.string=t.boolean=void 0,t.boolean=function(e){return!0===e||!1===e},t.string=n,t.number=function(e){return"number"==typeof e||e instanceof Number},t.error=function(e){return e instanceof Error},t.func=function(e){return"function"==typeof e},t.array=r,t.stringArray=function(e){return r(e)&&e.every((e=>n(e)))}},96184:(e,t)=>{"use strict";var n,r;Object.defineProperty(t,"__esModule",{value:!0}),t.LRUCache=t.LinkedMap=t.Touch=void 0,function(e){e.None=0,e.First=1,e.AsOld=e.First,e.Last=2,e.AsNew=e.Last}(r=t.Touch||(t.Touch={}));class i{constructor(){this[n]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){return this._head?.value}get last(){return this._tail?.value}has(e){return this._map.has(e)}get(e,t=r.None){const n=this._map.get(e);if(n)return t!==r.None&&this.touch(n,t),n.value}set(e,t,n=r.None){let i=this._map.get(e);if(i)i.value=t,n!==r.None&&this.touch(i,n);else{switch(i={key:e,value:t,next:void 0,previous:void 0},n){case r.None:this.addItemLast(i);break;case r.First:this.addItemFirst(i);break;case r.Last:default:this.addItemLast(i)}this._map.set(e,i),this._size++}return this}delete(e){return!!this.remove(e)}remove(e){const t=this._map.get(e);if(t)return this._map.delete(e),this.removeItem(t),this._size--,t.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");const e=this._head;return this._map.delete(e.key),this.removeItem(e),this._size--,e.value}forEach(e,t){const n=this._state;let r=this._head;for(;r;){if(t?e.bind(t)(r.value,r.key,this):e(r.value,r.key,this),this._state!==n)throw new Error("LinkedMap got modified during iteration.");r=r.next}}keys(){const e=this._state;let t=this._head;const n={[Symbol.iterator]:()=>n,next:()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(t){const e={value:t.key,done:!1};return t=t.next,e}return{value:void 0,done:!0}}};return n}values(){const e=this._state;let t=this._head;const n={[Symbol.iterator]:()=>n,next:()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(t){const e={value:t.value,done:!1};return t=t.next,e}return{value:void 0,done:!0}}};return n}entries(){const e=this._state;let t=this._head;const n={[Symbol.iterator]:()=>n,next:()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(t){const e={value:[t.key,t.value],done:!1};return t=t.next,e}return{value:void 0,done:!0}}};return n}[(n=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(e){if(e>=this.size)return;if(0===e)return void this.clear();let t=this._head,n=this.size;for(;t&&n>e;)this._map.delete(t.key),t=t.next,n--;this._head=t,this._size=n,t&&(t.previous=void 0),this._state++}addItemFirst(e){if(this._head||this._tail){if(!this._head)throw new Error("Invalid list");e.next=this._head,this._head.previous=e}else this._tail=e;this._head=e,this._state++}addItemLast(e){if(this._head||this._tail){if(!this._tail)throw new Error("Invalid list");e.previous=this._tail,this._tail.next=e}else this._head=e;this._tail=e,this._state++}removeItem(e){if(e===this._head&&e===this._tail)this._head=void 0,this._tail=void 0;else if(e===this._head){if(!e.next)throw new Error("Invalid list");e.next.previous=void 0,this._head=e.next}else if(e===this._tail){if(!e.previous)throw new Error("Invalid list");e.previous.next=void 0,this._tail=e.previous}else{const t=e.next,n=e.previous;if(!t||!n)throw new Error("Invalid list");t.previous=n,n.next=t}e.next=void 0,e.previous=void 0,this._state++}touch(e,t){if(!this._head||!this._tail)throw new Error("Invalid list");if(t===r.First||t===r.Last)if(t===r.First){if(e===this._head)return;const t=e.next,n=e.previous;e===this._tail?(n.next=void 0,this._tail=n):(t.previous=n,n.next=t),e.previous=void 0,e.next=this._head,this._head.previous=e,this._head=e,this._state++}else if(t===r.Last){if(e===this._tail)return;const t=e.next,n=e.previous;e===this._head?(t.previous=void 0,this._head=t):(t.previous=n,n.next=t),e.next=void 0,e.previous=this._tail,this._tail.next=e,this._tail=e,this._state++}}toJSON(){const e=[];return this.forEach(((t,n)=>{e.push([n,t])})),e}fromJSON(e){this.clear();for(const[t,n]of e)this.set(t,n)}}t.LinkedMap=i,t.LRUCache=class extends i{constructor(e,t=1){super(),this._limit=e,this._ratio=Math.min(Math.max(0,t),1)}get limit(){return this._limit}set limit(e){this._limit=e,this.checkTrim()}get ratio(){return this._ratio}set ratio(e){this._ratio=Math.min(Math.max(0,e),1),this.checkTrim()}get(e,t=r.AsNew){return super.get(e,t)}peek(e){return super.get(e,r.None)}set(e,t){return super.set(e,t,r.Last),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}}},75530:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractMessageBuffer=void 0,t.AbstractMessageBuffer=class{constructor(e="utf-8"){this._encoding=e,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(e){const t="string"==typeof e?this.fromString(e,this._encoding):e;this._chunks.push(t),this._totalLength+=t.byteLength}tryReadHeaders(e=!1){if(0===this._chunks.length)return;let t=0,n=0,r=0,i=0;e:for(;nthis._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===e){const t=this._chunks[0];return this._chunks.shift(),this._totalLength-=e,this.asNative(t)}if(this._chunks[0].byteLength>e){const t=this._chunks[0],n=this.asNative(t,e);return this._chunks[0]=t.slice(e),this._totalLength-=e,n}const t=this.allocNative(e);let n=0;for(;e>0;){const r=this._chunks[0];if(r.byteLength>e){const i=r.slice(0,e);t.set(i,n),n+=e,this._chunks[0]=r.slice(e),this._totalLength-=e,e-=e}else t.set(r,n),n+=r.byteLength,this._chunks.shift(),this._totalLength-=r.byteLength,e-=r.byteLength}return t}}},56525:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ReadableStreamMessageReader=t.AbstractMessageReader=t.MessageReader=void 0;const r=n(30147),i=n(67574),o=n(27135),s=n(80142);var a;(t.MessageReader||(t.MessageReader={})).is=function(e){let t=e;return t&&i.func(t.listen)&&i.func(t.dispose)&&i.func(t.onError)&&i.func(t.onClose)&&i.func(t.onPartialMessage)};class c{constructor(){this.errorEmitter=new o.Emitter,this.closeEmitter=new o.Emitter,this.partialMessageEmitter=new o.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e){this.errorEmitter.fire(this.asError(e))}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}get onPartialMessage(){return this.partialMessageEmitter.event}firePartialMessage(e){this.partialMessageEmitter.fire(e)}asError(e){return e instanceof Error?e:new Error(`Reader received error. Reason: ${i.string(e.message)?e.message:"unknown"}`)}}t.AbstractMessageReader=c,function(e){e.fromOptions=function(e){let t,n;const i=new Map;let o;const s=new Map;if(void 0===e||"string"==typeof e)t=e??"utf-8";else{if(t=e.charset??"utf-8",void 0!==e.contentDecoder&&(n=e.contentDecoder,i.set(n.name,n)),void 0!==e.contentDecoders)for(const t of e.contentDecoders)i.set(t.name,t);if(void 0!==e.contentTypeDecoder&&(o=e.contentTypeDecoder,s.set(o.name,o)),void 0!==e.contentTypeDecoders)for(const t of e.contentTypeDecoders)s.set(t.name,t)}return void 0===o&&(o=(0,r.default)().applicationJson.decoder,s.set(o.name,o)),{charset:t,contentDecoder:n,contentDecoders:i,contentTypeDecoder:o,contentTypeDecoders:s}}}(a||(a={})),t.ReadableStreamMessageReader=class extends c{constructor(e,t){super(),this.readable=e,this.options=a.fromOptions(t),this.buffer=(0,r.default)().messageBuffer.create(this.options.charset),this._partialMessageTimeout=1e4,this.nextMessageLength=-1,this.messageToken=0,this.readSemaphore=new s.Semaphore(1)}set partialMessageTimeout(e){this._partialMessageTimeout=e}get partialMessageTimeout(){return this._partialMessageTimeout}listen(e){this.nextMessageLength=-1,this.messageToken=0,this.partialMessageTimer=void 0,this.callback=e;const t=this.readable.onData((e=>{this.onData(e)}));return this.readable.onError((e=>this.fireError(e))),this.readable.onClose((()=>this.fireClose())),t}onData(e){for(this.buffer.append(e);;){if(-1===this.nextMessageLength){const e=this.buffer.tryReadHeaders(!0);if(!e)return;const t=e.get("content-length");if(!t)return void this.fireError(new Error("Header must provide a Content-Length property."));const n=parseInt(t);if(isNaN(n))return void this.fireError(new Error("Content-Length value must be a number."));this.nextMessageLength=n}const e=this.buffer.tryReadBody(this.nextMessageLength);if(void 0===e)return void this.setPartialMessageTimer();this.clearPartialMessageTimer(),this.nextMessageLength=-1,this.readSemaphore.lock((async()=>{const t=void 0!==this.options.contentDecoder?await this.options.contentDecoder.decode(e):e,n=await this.options.contentTypeDecoder.decode(t,this.options);this.callback(n)})).catch((e=>{this.fireError(e)}))}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),this._partialMessageTimeout<=0||(this.partialMessageTimer=(0,r.default)().timer.setTimeout(((e,t)=>{this.partialMessageTimer=void 0,e===this.messageToken&&(this.firePartialMessage({messageToken:e,waitingTime:t}),this.setPartialMessageTimer())}),this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}}},96654:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WriteableStreamMessageWriter=t.AbstractMessageWriter=t.MessageWriter=void 0;const r=n(30147),i=n(67574),o=n(80142),s=n(27135);var a;(t.MessageWriter||(t.MessageWriter={})).is=function(e){let t=e;return t&&i.func(t.dispose)&&i.func(t.onClose)&&i.func(t.onError)&&i.func(t.write)};class c{constructor(){this.errorEmitter=new s.Emitter,this.closeEmitter=new s.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e,t,n){this.errorEmitter.fire([this.asError(e),t,n])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(e){return e instanceof Error?e:new Error(`Writer received error. Reason: ${i.string(e.message)?e.message:"unknown"}`)}}t.AbstractMessageWriter=c,function(e){e.fromOptions=function(e){return void 0===e||"string"==typeof e?{charset:e??"utf-8",contentTypeEncoder:(0,r.default)().applicationJson.encoder}:{charset:e.charset??"utf-8",contentEncoder:e.contentEncoder,contentTypeEncoder:e.contentTypeEncoder??(0,r.default)().applicationJson.encoder}}}(a||(a={})),t.WriteableStreamMessageWriter=class extends c{constructor(e,t){super(),this.writable=e,this.options=a.fromOptions(t),this.errorCount=0,this.writeSemaphore=new o.Semaphore(1),this.writable.onError((e=>this.fireError(e))),this.writable.onClose((()=>this.fireClose()))}async write(e){return this.writeSemaphore.lock((async()=>this.options.contentTypeEncoder.encode(e,this.options).then((e=>void 0!==this.options.contentEncoder?this.options.contentEncoder.encode(e):e)).then((t=>{const n=[];return n.push("Content-Length: ",t.byteLength.toString(),"\r\n"),n.push("\r\n"),this.doWrite(e,n,t)}),(e=>{throw this.fireError(e),e}))))}async doWrite(e,t,n){try{return await this.writable.write(t.join(""),"ascii"),this.writable.write(n)}catch(t){return this.handleError(t,e),Promise.reject(t)}}handleError(e,t){this.errorCount++,this.fireError(e,t,this.errorCount)}end(){this.writable.end()}}},20839:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Message=t.NotificationType9=t.NotificationType8=t.NotificationType7=t.NotificationType6=t.NotificationType5=t.NotificationType4=t.NotificationType3=t.NotificationType2=t.NotificationType1=t.NotificationType0=t.NotificationType=t.RequestType9=t.RequestType8=t.RequestType7=t.RequestType6=t.RequestType5=t.RequestType4=t.RequestType3=t.RequestType2=t.RequestType1=t.RequestType=t.RequestType0=t.AbstractMessageSignature=t.ParameterStructures=t.ResponseError=t.ErrorCodes=void 0;const r=n(67574);var i,o;!function(e){e.ParseError=-32700,e.InvalidRequest=-32600,e.MethodNotFound=-32601,e.InvalidParams=-32602,e.InternalError=-32603,e.jsonrpcReservedErrorRangeStart=-32099,e.serverErrorStart=-32099,e.MessageWriteError=-32099,e.MessageReadError=-32098,e.PendingResponseRejected=-32097,e.ConnectionInactive=-32096,e.ServerNotInitialized=-32002,e.UnknownErrorCode=-32001,e.jsonrpcReservedErrorRangeEnd=-32e3,e.serverErrorEnd=-32e3}(i=t.ErrorCodes||(t.ErrorCodes={}));class s extends Error{constructor(e,t,n){super(t),this.code=r.number(e)?e:i.UnknownErrorCode,this.data=n,Object.setPrototypeOf(this,s.prototype)}toJson(){const e={code:this.code,message:this.message};return void 0!==this.data&&(e.data=this.data),e}}t.ResponseError=s;class a{constructor(e){this.kind=e}static is(e){return e===a.auto||e===a.byName||e===a.byPosition}toString(){return this.kind}}t.ParameterStructures=a,a.auto=new a("auto"),a.byPosition=new a("byPosition"),a.byName=new a("byName");class c{constructor(e,t){this.method=e,this.numberOfParams=t}get parameterStructures(){return a.auto}}t.AbstractMessageSignature=c,t.RequestType0=class extends c{constructor(e){super(e,0)}},t.RequestType=class extends c{constructor(e,t=a.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}},t.RequestType1=class extends c{constructor(e,t=a.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}},t.RequestType2=class extends c{constructor(e){super(e,2)}},t.RequestType3=class extends c{constructor(e){super(e,3)}},t.RequestType4=class extends c{constructor(e){super(e,4)}},t.RequestType5=class extends c{constructor(e){super(e,5)}},t.RequestType6=class extends c{constructor(e){super(e,6)}},t.RequestType7=class extends c{constructor(e){super(e,7)}},t.RequestType8=class extends c{constructor(e){super(e,8)}},t.RequestType9=class extends c{constructor(e){super(e,9)}},t.NotificationType=class extends c{constructor(e,t=a.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}},t.NotificationType0=class extends c{constructor(e){super(e,0)}},t.NotificationType1=class extends c{constructor(e,t=a.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}},t.NotificationType2=class extends c{constructor(e){super(e,2)}},t.NotificationType3=class extends c{constructor(e){super(e,3)}},t.NotificationType4=class extends c{constructor(e){super(e,4)}},t.NotificationType5=class extends c{constructor(e){super(e,5)}},t.NotificationType6=class extends c{constructor(e){super(e,6)}},t.NotificationType7=class extends c{constructor(e){super(e,7)}},t.NotificationType8=class extends c{constructor(e){super(e,8)}},t.NotificationType9=class extends c{constructor(e){super(e,9)}},(o=t.Message||(t.Message={})).isRequest=function(e){const t=e;return t&&r.string(t.method)&&(r.string(t.id)||r.number(t.id))},o.isNotification=function(e){const t=e;return t&&r.string(t.method)&&void 0===e.id},o.isResponse=function(e){const t=e;return t&&(void 0!==t.result||!!t.error)&&(r.string(t.id)||r.number(t.id)||null===t.id)}},30147:(e,t)=>{"use strict";let n;function r(){if(void 0===n)throw new Error("No runtime abstraction layer installed");return n}Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.install=function(e){if(void 0===e)throw new Error("No runtime abstraction layer provided");n=e}}(r||(r={})),t.default=r},80142:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Semaphore=void 0;const r=n(30147);t.Semaphore=class{constructor(e=1){if(e<=0)throw new Error("Capacity must be greater than 0");this._capacity=e,this._active=0,this._waiting=[]}lock(e){return new Promise(((t,n)=>{this._waiting.push({thunk:e,resolve:t,reject:n}),this.runNext()}))}get active(){return this._active}runNext(){0!==this._waiting.length&&this._active!==this._capacity&&(0,r.default)().timer.setImmediate((()=>this.doRunNext()))}doRunNext(){if(0===this._waiting.length||this._active===this._capacity)return;const e=this._waiting.shift();if(this._active++,this._active>this._capacity)throw new Error("To many thunks active");try{const t=e.thunk();t instanceof Promise?t.then((t=>{this._active--,e.resolve(t),this.runNext()}),(t=>{this._active--,e.reject(t),this.runNext()})):(this._active--,e.resolve(t),this.runNext())}catch(t){this._active--,e.reject(t),this.runNext()}}}},98211:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SharedArrayReceiverStrategy=t.SharedArraySenderStrategy=void 0;const r=n(13881);var i;!function(e){e.Continue=0,e.Cancelled=1}(i||(i={})),t.SharedArraySenderStrategy=class{constructor(){this.buffers=new Map}enableCancellation(e){if(null===e.id)return;const t=new SharedArrayBuffer(4);new Int32Array(t,0,1)[0]=i.Continue,this.buffers.set(e.id,t),e.$cancellationData=t}async sendCancellation(e,t){const n=this.buffers.get(t);if(void 0===n)return;const r=new Int32Array(n,0,1);Atomics.store(r,0,i.Cancelled)}cleanup(e){this.buffers.delete(e)}dispose(){this.buffers.clear()}};class o{constructor(e){this.data=new Int32Array(e,0,1)}get isCancellationRequested(){return Atomics.load(this.data,0)===i.Cancelled}get onCancellationRequested(){throw new Error("Cancellation over SharedArrayBuffer doesn't support cancellation events")}}class s{constructor(e){this.token=new o(e)}cancel(){}dispose(){}}t.SharedArrayReceiverStrategy=class{constructor(){this.kind="request"}createCancellationTokenSource(e){const t=e.$cancellationData;return void 0===t?new r.CancellationTokenSource:new s(t)}}},74389:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.createMessageConnection=t.createServerSocketTransport=t.createClientSocketTransport=t.createServerPipeTransport=t.createClientPipeTransport=t.generateRandomPipeName=t.StreamMessageWriter=t.StreamMessageReader=t.SocketMessageWriter=t.SocketMessageReader=t.PortMessageWriter=t.PortMessageReader=t.IPCMessageWriter=t.IPCMessageReader=void 0;const o=n(23034);o.default.install();const s=n(71017),a=n(22037),c=n(6113),l=n(41808),u=n(23870);i(n(23870),t);class p extends u.AbstractMessageReader{constructor(e){super(),this.process=e;let t=this.process;t.on("error",(e=>this.fireError(e))),t.on("close",(()=>this.fireClose()))}listen(e){return this.process.on("message",e),u.Disposable.create((()=>this.process.off("message",e)))}}t.IPCMessageReader=p;class d extends u.AbstractMessageWriter{constructor(e){super(),this.process=e,this.errorCount=0;const t=this.process;t.on("error",(e=>this.fireError(e))),t.on("close",(()=>this.fireClose))}write(e){try{return"function"==typeof this.process.send&&this.process.send(e,void 0,void 0,(t=>{t?(this.errorCount++,this.handleError(t,e)):this.errorCount=0})),Promise.resolve()}catch(t){return this.handleError(t,e),Promise.reject(t)}}handleError(e,t){this.errorCount++,this.fireError(e,t,this.errorCount)}end(){}}t.IPCMessageWriter=d;class h extends u.AbstractMessageReader{constructor(e){super(),this.onData=new u.Emitter,e.on("close",(()=>this.fireClose)),e.on("error",(e=>this.fireError(e))),e.on("message",(e=>{this.onData.fire(e)}))}listen(e){return this.onData.event(e)}}t.PortMessageReader=h;class f extends u.AbstractMessageWriter{constructor(e){super(),this.port=e,this.errorCount=0,e.on("close",(()=>this.fireClose())),e.on("error",(e=>this.fireError(e)))}write(e){try{return this.port.postMessage(e),Promise.resolve()}catch(t){return this.handleError(t,e),Promise.reject(t)}}handleError(e,t){this.errorCount++,this.fireError(e,t,this.errorCount)}end(){}}t.PortMessageWriter=f;class m extends u.ReadableStreamMessageReader{constructor(e,t="utf-8"){super((0,o.default)().stream.asReadableStream(e),t)}}t.SocketMessageReader=m;class g extends u.WriteableStreamMessageWriter{constructor(e,t){super((0,o.default)().stream.asWritableStream(e),t),this.socket=e}dispose(){super.dispose(),this.socket.destroy()}}t.SocketMessageWriter=g;class y extends u.ReadableStreamMessageReader{constructor(e,t){super((0,o.default)().stream.asReadableStream(e),t)}}t.StreamMessageReader=y;class _ extends u.WriteableStreamMessageWriter{constructor(e,t){super((0,o.default)().stream.asWritableStream(e),t)}}t.StreamMessageWriter=_;const v=process.env.XDG_RUNTIME_DIR,b=new Map([["linux",107],["darwin",103]]);t.generateRandomPipeName=function(){const e=(0,c.randomBytes)(21).toString("hex");if("win32"===process.platform)return`\\\\.\\pipe\\vscode-jsonrpc-${e}-sock`;let t;t=v?s.join(v,`vscode-ipc-${e}.sock`):s.join(a.tmpdir(),`vscode-${e}.sock`);const n=b.get(process.platform);return void 0!==n&&t.length>n&&(0,o.default)().console.warn(`WARNING: IPC handle "${t}" is longer than ${n} characters.`),t},t.createClientPipeTransport=function(e,t="utf-8"){let n;const r=new Promise(((e,t)=>{n=e}));return new Promise(((i,o)=>{let s=(0,l.createServer)((e=>{s.close(),n([new m(e,t),new g(e,t)])}));s.on("error",o),s.listen(e,(()=>{s.removeListener("error",o),i({onConnected:()=>r})}))}))},t.createServerPipeTransport=function(e,t="utf-8"){const n=(0,l.createConnection)(e);return[new m(n,t),new g(n,t)]},t.createClientSocketTransport=function(e,t="utf-8"){let n;const r=new Promise(((e,t)=>{n=e}));return new Promise(((i,o)=>{const s=(0,l.createServer)((e=>{s.close(),n([new m(e,t),new g(e,t)])}));s.on("error",o),s.listen(e,"127.0.0.1",(()=>{s.removeListener("error",o),i({onConnected:()=>r})}))}))},t.createServerSocketTransport=function(e,t="utf-8"){const n=(0,l.createConnection)(e,"127.0.0.1");return[new m(n,t),new g(n,t)]},t.createMessageConnection=function(e,t,n,r){n||(n=u.NullLogger);const i=function(e){const t=e;return void 0!==t.read&&void 0!==t.addListener}(e)?new y(e):e,o=function(e){const t=e;return void 0!==t.write&&void 0!==t.addListener}(t)?new _(t):t;return u.ConnectionStrategy.is(r)&&(r={connectionStrategy:r}),(0,u.createMessageConnection)(i,o,n,r)}},23034:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(73837),i=n(23870);class o extends i.AbstractMessageBuffer{constructor(e="utf-8"){super(e)}emptyBuffer(){return o.emptyBuffer}fromString(e,t){return Buffer.from(e,t)}toString(e,t){return e instanceof Buffer?e.toString(t):new r.TextDecoder(t).decode(e)}asNative(e,t){return void 0===t?e instanceof Buffer?e:Buffer.from(e):e instanceof Buffer?e.slice(0,t):Buffer.from(e,0,t)}allocNative(e){return Buffer.allocUnsafe(e)}}o.emptyBuffer=Buffer.allocUnsafe(0);class s{constructor(e){this.stream=e}onClose(e){return this.stream.on("close",e),i.Disposable.create((()=>this.stream.off("close",e)))}onError(e){return this.stream.on("error",e),i.Disposable.create((()=>this.stream.off("error",e)))}onEnd(e){return this.stream.on("end",e),i.Disposable.create((()=>this.stream.off("end",e)))}onData(e){return this.stream.on("data",e),i.Disposable.create((()=>this.stream.off("data",e)))}}class a{constructor(e){this.stream=e}onClose(e){return this.stream.on("close",e),i.Disposable.create((()=>this.stream.off("close",e)))}onError(e){return this.stream.on("error",e),i.Disposable.create((()=>this.stream.off("error",e)))}onEnd(e){return this.stream.on("end",e),i.Disposable.create((()=>this.stream.off("end",e)))}write(e,t){return new Promise(((n,r)=>{const i=e=>{null==e?n():r(e)};"string"==typeof e?this.stream.write(e,t,i):this.stream.write(e,i)}))}end(){this.stream.end()}}const c=Object.freeze({messageBuffer:Object.freeze({create:e=>new o(e)}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:(e,t)=>{try{return Promise.resolve(Buffer.from(JSON.stringify(e,void 0,0),t.charset))}catch(e){return Promise.reject(e)}}}),decoder:Object.freeze({name:"application/json",decode:(e,t)=>{try{return e instanceof Buffer?Promise.resolve(JSON.parse(e.toString(t.charset))):Promise.resolve(JSON.parse(new r.TextDecoder(t.charset).decode(e)))}catch(e){return Promise.reject(e)}}})}),stream:Object.freeze({asReadableStream:e=>new s(e),asWritableStream:e=>new a(e)}),console,timer:Object.freeze({setTimeout(e,t,...n){const r=setTimeout(e,t,...n);return{dispose:()=>clearTimeout(r)}},setImmediate(e,...t){const n=setImmediate(e,...t);return{dispose:()=>clearImmediate(n)}},setInterval(e,t,...n){const r=setInterval(e,t,...n);return{dispose:()=>clearInterval(r)}}})});function l(){return c}!function(e){e.install=function(){i.RAL.install(c)}}(l||(l={})),t.default=l},95028:(e,t,n)=>{"use strict";e.exports=n(74389)},51661:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.LSPErrorCodes=t.createProtocolConnection=void 0,i(n(74389),t),i(n(91674),t),i(n(66140),t),i(n(10542),t);var o,s=n(73767);Object.defineProperty(t,"createProtocolConnection",{enumerable:!0,get:function(){return s.createProtocolConnection}}),(o=t.LSPErrorCodes||(t.LSPErrorCodes={})).lspReservedErrorRangeStart=-32899,o.RequestFailed=-32803,o.ServerCancelled=-32802,o.ContentModified=-32801,o.RequestCancelled=-32800,o.lspReservedErrorRangeEnd=-32800},73767:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createProtocolConnection=void 0;const r=n(74389);t.createProtocolConnection=function(e,t,n,i){return r.ConnectionStrategy.is(i)&&(i={connectionStrategy:i}),(0,r.createMessageConnection)(e,t,n,i)}},66140:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ProtocolNotificationType=t.ProtocolNotificationType0=t.ProtocolRequestType=t.ProtocolRequestType0=t.RegistrationType=t.MessageDirection=void 0;const r=n(74389);var i;(i=t.MessageDirection||(t.MessageDirection={})).clientToServer="clientToServer",i.serverToClient="serverToClient",i.both="both",t.RegistrationType=class{constructor(e){this.method=e}};class o extends r.RequestType0{constructor(e){super(e)}}t.ProtocolRequestType0=o;class s extends r.RequestType{constructor(e){super(e,r.ParameterStructures.byName)}}t.ProtocolRequestType=s;class a extends r.NotificationType0{constructor(e){super(e)}}t.ProtocolNotificationType0=a;class c extends r.NotificationType{constructor(e){super(e,r.ParameterStructures.byName)}}t.ProtocolNotificationType=c},82918:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CallHierarchyOutgoingCallsRequest=t.CallHierarchyIncomingCallsRequest=t.CallHierarchyPrepareRequest=void 0;const r=n(66140);var i,o,s;(s=t.CallHierarchyPrepareRequest||(t.CallHierarchyPrepareRequest={})).method="textDocument/prepareCallHierarchy",s.messageDirection=r.MessageDirection.clientToServer,s.type=new r.ProtocolRequestType(s.method),(o=t.CallHierarchyIncomingCallsRequest||(t.CallHierarchyIncomingCallsRequest={})).method="callHierarchy/incomingCalls",o.messageDirection=r.MessageDirection.clientToServer,o.type=new r.ProtocolRequestType(o.method),(i=t.CallHierarchyOutgoingCallsRequest||(t.CallHierarchyOutgoingCallsRequest={})).method="callHierarchy/outgoingCalls",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},79891:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPresentationRequest=t.DocumentColorRequest=void 0;const r=n(66140);var i,o;(o=t.DocumentColorRequest||(t.DocumentColorRequest={})).method="textDocument/documentColor",o.messageDirection=r.MessageDirection.clientToServer,o.type=new r.ProtocolRequestType(o.method),(i=t.ColorPresentationRequest||(t.ColorPresentationRequest={})).method="textDocument/colorPresentation",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},85934:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigurationRequest=void 0;const r=n(66140);var i;(i=t.ConfigurationRequest||(t.ConfigurationRequest={})).method="workspace/configuration",i.messageDirection=r.MessageDirection.serverToClient,i.type=new r.ProtocolRequestType(i.method)},40764:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DeclarationRequest=void 0;const r=n(66140);var i;(i=t.DeclarationRequest||(t.DeclarationRequest={})).method="textDocument/declaration",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},79824:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DiagnosticRefreshRequest=t.WorkspaceDiagnosticRequest=t.DocumentDiagnosticRequest=t.DocumentDiagnosticReportKind=t.DiagnosticServerCancellationData=void 0;const r=n(74389),i=n(69533),o=n(66140);var s,a,c,l;(t.DiagnosticServerCancellationData||(t.DiagnosticServerCancellationData={})).is=function(e){const t=e;return t&&i.boolean(t.retriggerRequest)},(l=t.DocumentDiagnosticReportKind||(t.DocumentDiagnosticReportKind={})).Full="full",l.Unchanged="unchanged",(c=t.DocumentDiagnosticRequest||(t.DocumentDiagnosticRequest={})).method="textDocument/diagnostic",c.messageDirection=o.MessageDirection.clientToServer,c.type=new o.ProtocolRequestType(c.method),c.partialResult=new r.ProgressType,(a=t.WorkspaceDiagnosticRequest||(t.WorkspaceDiagnosticRequest={})).method="workspace/diagnostic",a.messageDirection=o.MessageDirection.clientToServer,a.type=new o.ProtocolRequestType(a.method),a.partialResult=new r.ProgressType,(s=t.DiagnosticRefreshRequest||(t.DiagnosticRefreshRequest={})).method="workspace/diagnostic/refresh",s.messageDirection=o.MessageDirection.serverToClient,s.type=new o.ProtocolRequestType0(s.method)},37846:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WillDeleteFilesRequest=t.DidDeleteFilesNotification=t.DidRenameFilesNotification=t.WillRenameFilesRequest=t.DidCreateFilesNotification=t.WillCreateFilesRequest=t.FileOperationPatternKind=void 0;const r=n(66140);var i,o,s,a,c,l,u;(u=t.FileOperationPatternKind||(t.FileOperationPatternKind={})).file="file",u.folder="folder",(l=t.WillCreateFilesRequest||(t.WillCreateFilesRequest={})).method="workspace/willCreateFiles",l.messageDirection=r.MessageDirection.clientToServer,l.type=new r.ProtocolRequestType(l.method),(c=t.DidCreateFilesNotification||(t.DidCreateFilesNotification={})).method="workspace/didCreateFiles",c.messageDirection=r.MessageDirection.clientToServer,c.type=new r.ProtocolNotificationType(c.method),(a=t.WillRenameFilesRequest||(t.WillRenameFilesRequest={})).method="workspace/willRenameFiles",a.messageDirection=r.MessageDirection.clientToServer,a.type=new r.ProtocolRequestType(a.method),(s=t.DidRenameFilesNotification||(t.DidRenameFilesNotification={})).method="workspace/didRenameFiles",s.messageDirection=r.MessageDirection.clientToServer,s.type=new r.ProtocolNotificationType(s.method),(o=t.DidDeleteFilesNotification||(t.DidDeleteFilesNotification={})).method="workspace/didDeleteFiles",o.messageDirection=r.MessageDirection.clientToServer,o.type=new r.ProtocolNotificationType(o.method),(i=t.WillDeleteFilesRequest||(t.WillDeleteFilesRequest={})).method="workspace/willDeleteFiles",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},13394:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FoldingRangeRequest=void 0;const r=n(66140);var i;(i=t.FoldingRangeRequest||(t.FoldingRangeRequest={})).method="textDocument/foldingRange",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},82122:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ImplementationRequest=void 0;const r=n(66140);var i;(i=t.ImplementationRequest||(t.ImplementationRequest={})).method="textDocument/implementation",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},29999:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InlayHintRefreshRequest=t.InlayHintResolveRequest=t.InlayHintRequest=void 0;const r=n(66140);var i,o,s;(s=t.InlayHintRequest||(t.InlayHintRequest={})).method="textDocument/inlayHint",s.messageDirection=r.MessageDirection.clientToServer,s.type=new r.ProtocolRequestType(s.method),(o=t.InlayHintResolveRequest||(t.InlayHintResolveRequest={})).method="inlayHint/resolve",o.messageDirection=r.MessageDirection.clientToServer,o.type=new r.ProtocolRequestType(o.method),(i=t.InlayHintRefreshRequest||(t.InlayHintRefreshRequest={})).method="workspace/inlayHint/refresh",i.messageDirection=r.MessageDirection.serverToClient,i.type=new r.ProtocolRequestType0(i.method)},55246:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InlineValueRefreshRequest=t.InlineValueRequest=void 0;const r=n(66140);var i,o;(o=t.InlineValueRequest||(t.InlineValueRequest={})).method="textDocument/inlineValue",o.messageDirection=r.MessageDirection.clientToServer,o.type=new r.ProtocolRequestType(o.method),(i=t.InlineValueRefreshRequest||(t.InlineValueRefreshRequest={})).method="workspace/inlineValue/refresh",i.messageDirection=r.MessageDirection.serverToClient,i.type=new r.ProtocolRequestType0(i.method)},10542:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WorkspaceSymbolRequest=t.CodeActionResolveRequest=t.CodeActionRequest=t.DocumentSymbolRequest=t.DocumentHighlightRequest=t.ReferencesRequest=t.DefinitionRequest=t.SignatureHelpRequest=t.SignatureHelpTriggerKind=t.HoverRequest=t.CompletionResolveRequest=t.CompletionRequest=t.CompletionTriggerKind=t.PublishDiagnosticsNotification=t.WatchKind=t.RelativePattern=t.FileChangeType=t.DidChangeWatchedFilesNotification=t.WillSaveTextDocumentWaitUntilRequest=t.WillSaveTextDocumentNotification=t.TextDocumentSaveReason=t.DidSaveTextDocumentNotification=t.DidCloseTextDocumentNotification=t.DidChangeTextDocumentNotification=t.TextDocumentContentChangeEvent=t.DidOpenTextDocumentNotification=t.TextDocumentSyncKind=t.TelemetryEventNotification=t.LogMessageNotification=t.ShowMessageRequest=t.ShowMessageNotification=t.MessageType=t.DidChangeConfigurationNotification=t.ExitNotification=t.ShutdownRequest=t.InitializedNotification=t.InitializeErrorCodes=t.InitializeRequest=t.WorkDoneProgressOptions=t.TextDocumentRegistrationOptions=t.StaticRegistrationOptions=t.PositionEncodingKind=t.FailureHandlingKind=t.ResourceOperationKind=t.UnregistrationRequest=t.RegistrationRequest=t.DocumentSelector=t.NotebookCellTextDocumentFilter=t.NotebookDocumentFilter=t.TextDocumentFilter=void 0,t.TypeHierarchySubtypesRequest=t.TypeHierarchyPrepareRequest=t.MonikerRequest=t.MonikerKind=t.UniquenessLevel=t.WillDeleteFilesRequest=t.DidDeleteFilesNotification=t.WillRenameFilesRequest=t.DidRenameFilesNotification=t.WillCreateFilesRequest=t.DidCreateFilesNotification=t.FileOperationPatternKind=t.LinkedEditingRangeRequest=t.ShowDocumentRequest=t.SemanticTokensRegistrationType=t.SemanticTokensRefreshRequest=t.SemanticTokensRangeRequest=t.SemanticTokensDeltaRequest=t.SemanticTokensRequest=t.TokenFormat=t.CallHierarchyPrepareRequest=t.CallHierarchyOutgoingCallsRequest=t.CallHierarchyIncomingCallsRequest=t.WorkDoneProgressCancelNotification=t.WorkDoneProgressCreateRequest=t.WorkDoneProgress=t.SelectionRangeRequest=t.DeclarationRequest=t.FoldingRangeRequest=t.ColorPresentationRequest=t.DocumentColorRequest=t.ConfigurationRequest=t.DidChangeWorkspaceFoldersNotification=t.WorkspaceFoldersRequest=t.TypeDefinitionRequest=t.ImplementationRequest=t.ApplyWorkspaceEditRequest=t.ExecuteCommandRequest=t.PrepareRenameRequest=t.RenameRequest=t.PrepareSupportDefaultBehavior=t.DocumentOnTypeFormattingRequest=t.DocumentRangeFormattingRequest=t.DocumentFormattingRequest=t.DocumentLinkResolveRequest=t.DocumentLinkRequest=t.CodeLensRefreshRequest=t.CodeLensResolveRequest=t.CodeLensRequest=t.WorkspaceSymbolResolveRequest=void 0,t.DidCloseNotebookDocumentNotification=t.DidSaveNotebookDocumentNotification=t.DidChangeNotebookDocumentNotification=t.NotebookCellArrayChange=t.DidOpenNotebookDocumentNotification=t.NotebookDocumentSyncRegistrationType=t.NotebookDocument=t.NotebookCell=t.ExecutionSummary=t.NotebookCellKind=t.DiagnosticRefreshRequest=t.WorkspaceDiagnosticRequest=t.DocumentDiagnosticRequest=t.DocumentDiagnosticReportKind=t.DiagnosticServerCancellationData=t.InlayHintRefreshRequest=t.InlayHintResolveRequest=t.InlayHintRequest=t.InlineValueRefreshRequest=t.InlineValueRequest=t.TypeHierarchySupertypesRequest=void 0;const r=n(66140),i=n(91674),o=n(69533),s=n(82122);Object.defineProperty(t,"ImplementationRequest",{enumerable:!0,get:function(){return s.ImplementationRequest}});const a=n(71589);Object.defineProperty(t,"TypeDefinitionRequest",{enumerable:!0,get:function(){return a.TypeDefinitionRequest}});const c=n(98744);Object.defineProperty(t,"WorkspaceFoldersRequest",{enumerable:!0,get:function(){return c.WorkspaceFoldersRequest}}),Object.defineProperty(t,"DidChangeWorkspaceFoldersNotification",{enumerable:!0,get:function(){return c.DidChangeWorkspaceFoldersNotification}});const l=n(85934);Object.defineProperty(t,"ConfigurationRequest",{enumerable:!0,get:function(){return l.ConfigurationRequest}});const u=n(79891);Object.defineProperty(t,"DocumentColorRequest",{enumerable:!0,get:function(){return u.DocumentColorRequest}}),Object.defineProperty(t,"ColorPresentationRequest",{enumerable:!0,get:function(){return u.ColorPresentationRequest}});const p=n(13394);Object.defineProperty(t,"FoldingRangeRequest",{enumerable:!0,get:function(){return p.FoldingRangeRequest}});const d=n(40764);Object.defineProperty(t,"DeclarationRequest",{enumerable:!0,get:function(){return d.DeclarationRequest}});const h=n(5206);Object.defineProperty(t,"SelectionRangeRequest",{enumerable:!0,get:function(){return h.SelectionRangeRequest}});const f=n(21862);Object.defineProperty(t,"WorkDoneProgress",{enumerable:!0,get:function(){return f.WorkDoneProgress}}),Object.defineProperty(t,"WorkDoneProgressCreateRequest",{enumerable:!0,get:function(){return f.WorkDoneProgressCreateRequest}}),Object.defineProperty(t,"WorkDoneProgressCancelNotification",{enumerable:!0,get:function(){return f.WorkDoneProgressCancelNotification}});const m=n(82918);Object.defineProperty(t,"CallHierarchyIncomingCallsRequest",{enumerable:!0,get:function(){return m.CallHierarchyIncomingCallsRequest}}),Object.defineProperty(t,"CallHierarchyOutgoingCallsRequest",{enumerable:!0,get:function(){return m.CallHierarchyOutgoingCallsRequest}}),Object.defineProperty(t,"CallHierarchyPrepareRequest",{enumerable:!0,get:function(){return m.CallHierarchyPrepareRequest}});const g=n(39434);Object.defineProperty(t,"TokenFormat",{enumerable:!0,get:function(){return g.TokenFormat}}),Object.defineProperty(t,"SemanticTokensRequest",{enumerable:!0,get:function(){return g.SemanticTokensRequest}}),Object.defineProperty(t,"SemanticTokensDeltaRequest",{enumerable:!0,get:function(){return g.SemanticTokensDeltaRequest}}),Object.defineProperty(t,"SemanticTokensRangeRequest",{enumerable:!0,get:function(){return g.SemanticTokensRangeRequest}}),Object.defineProperty(t,"SemanticTokensRefreshRequest",{enumerable:!0,get:function(){return g.SemanticTokensRefreshRequest}}),Object.defineProperty(t,"SemanticTokensRegistrationType",{enumerable:!0,get:function(){return g.SemanticTokensRegistrationType}});const y=n(75726);Object.defineProperty(t,"ShowDocumentRequest",{enumerable:!0,get:function(){return y.ShowDocumentRequest}});const _=n(26305);Object.defineProperty(t,"LinkedEditingRangeRequest",{enumerable:!0,get:function(){return _.LinkedEditingRangeRequest}});const v=n(37846);Object.defineProperty(t,"FileOperationPatternKind",{enumerable:!0,get:function(){return v.FileOperationPatternKind}}),Object.defineProperty(t,"DidCreateFilesNotification",{enumerable:!0,get:function(){return v.DidCreateFilesNotification}}),Object.defineProperty(t,"WillCreateFilesRequest",{enumerable:!0,get:function(){return v.WillCreateFilesRequest}}),Object.defineProperty(t,"DidRenameFilesNotification",{enumerable:!0,get:function(){return v.DidRenameFilesNotification}}),Object.defineProperty(t,"WillRenameFilesRequest",{enumerable:!0,get:function(){return v.WillRenameFilesRequest}}),Object.defineProperty(t,"DidDeleteFilesNotification",{enumerable:!0,get:function(){return v.DidDeleteFilesNotification}}),Object.defineProperty(t,"WillDeleteFilesRequest",{enumerable:!0,get:function(){return v.WillDeleteFilesRequest}});const b=n(73443);Object.defineProperty(t,"UniquenessLevel",{enumerable:!0,get:function(){return b.UniquenessLevel}}),Object.defineProperty(t,"MonikerKind",{enumerable:!0,get:function(){return b.MonikerKind}}),Object.defineProperty(t,"MonikerRequest",{enumerable:!0,get:function(){return b.MonikerRequest}});const E=n(83693);Object.defineProperty(t,"TypeHierarchyPrepareRequest",{enumerable:!0,get:function(){return E.TypeHierarchyPrepareRequest}}),Object.defineProperty(t,"TypeHierarchySubtypesRequest",{enumerable:!0,get:function(){return E.TypeHierarchySubtypesRequest}}),Object.defineProperty(t,"TypeHierarchySupertypesRequest",{enumerable:!0,get:function(){return E.TypeHierarchySupertypesRequest}});const T=n(55246);Object.defineProperty(t,"InlineValueRequest",{enumerable:!0,get:function(){return T.InlineValueRequest}}),Object.defineProperty(t,"InlineValueRefreshRequest",{enumerable:!0,get:function(){return T.InlineValueRefreshRequest}});const w=n(29999);Object.defineProperty(t,"InlayHintRequest",{enumerable:!0,get:function(){return w.InlayHintRequest}}),Object.defineProperty(t,"InlayHintResolveRequest",{enumerable:!0,get:function(){return w.InlayHintResolveRequest}}),Object.defineProperty(t,"InlayHintRefreshRequest",{enumerable:!0,get:function(){return w.InlayHintRefreshRequest}});const S=n(79824);Object.defineProperty(t,"DiagnosticServerCancellationData",{enumerable:!0,get:function(){return S.DiagnosticServerCancellationData}}),Object.defineProperty(t,"DocumentDiagnosticReportKind",{enumerable:!0,get:function(){return S.DocumentDiagnosticReportKind}}),Object.defineProperty(t,"DocumentDiagnosticRequest",{enumerable:!0,get:function(){return S.DocumentDiagnosticRequest}}),Object.defineProperty(t,"WorkspaceDiagnosticRequest",{enumerable:!0,get:function(){return S.WorkspaceDiagnosticRequest}}),Object.defineProperty(t,"DiagnosticRefreshRequest",{enumerable:!0,get:function(){return S.DiagnosticRefreshRequest}});const x=n(47169);var C,I,A,k,R,P,N,O,M,D,L,F,B,j,U,q,$,H,V,z,W,K,G,X,Y,Z,Q,J,ee,te,ne,re,ie,oe,se,ae,ce,le,ue,pe,de,he,fe,me,ge,ye,_e,ve,be,Ee,Te,we,Se,xe,Ce,Ie,Ae,ke,Re;Object.defineProperty(t,"NotebookCellKind",{enumerable:!0,get:function(){return x.NotebookCellKind}}),Object.defineProperty(t,"ExecutionSummary",{enumerable:!0,get:function(){return x.ExecutionSummary}}),Object.defineProperty(t,"NotebookCell",{enumerable:!0,get:function(){return x.NotebookCell}}),Object.defineProperty(t,"NotebookDocument",{enumerable:!0,get:function(){return x.NotebookDocument}}),Object.defineProperty(t,"NotebookDocumentSyncRegistrationType",{enumerable:!0,get:function(){return x.NotebookDocumentSyncRegistrationType}}),Object.defineProperty(t,"DidOpenNotebookDocumentNotification",{enumerable:!0,get:function(){return x.DidOpenNotebookDocumentNotification}}),Object.defineProperty(t,"NotebookCellArrayChange",{enumerable:!0,get:function(){return x.NotebookCellArrayChange}}),Object.defineProperty(t,"DidChangeNotebookDocumentNotification",{enumerable:!0,get:function(){return x.DidChangeNotebookDocumentNotification}}),Object.defineProperty(t,"DidSaveNotebookDocumentNotification",{enumerable:!0,get:function(){return x.DidSaveNotebookDocumentNotification}}),Object.defineProperty(t,"DidCloseNotebookDocumentNotification",{enumerable:!0,get:function(){return x.DidCloseNotebookDocumentNotification}}),function(e){e.is=function(e){const t=e;return o.string(t.language)||o.string(t.scheme)||o.string(t.pattern)}}(C=t.TextDocumentFilter||(t.TextDocumentFilter={})),function(e){e.is=function(e){const t=e;return o.objectLiteral(t)&&(o.string(t.notebookType)||o.string(t.scheme)||o.string(t.pattern))}}(I=t.NotebookDocumentFilter||(t.NotebookDocumentFilter={})),function(e){e.is=function(e){const t=e;return o.objectLiteral(t)&&(o.string(t.notebook)||I.is(t.notebook))&&(void 0===t.language||o.string(t.language))}}(A=t.NotebookCellTextDocumentFilter||(t.NotebookCellTextDocumentFilter={})),function(e){e.is=function(e){if(!Array.isArray(e))return!1;for(let t of e)if(!o.string(t)&&!C.is(t)&&!A.is(t))return!1;return!0}}(k=t.DocumentSelector||(t.DocumentSelector={})),(Re=t.RegistrationRequest||(t.RegistrationRequest={})).method="client/registerCapability",Re.messageDirection=r.MessageDirection.serverToClient,Re.type=new r.ProtocolRequestType(Re.method),(ke=t.UnregistrationRequest||(t.UnregistrationRequest={})).method="client/unregisterCapability",ke.messageDirection=r.MessageDirection.serverToClient,ke.type=new r.ProtocolRequestType(ke.method),(Ae=t.ResourceOperationKind||(t.ResourceOperationKind={})).Create="create",Ae.Rename="rename",Ae.Delete="delete",(Ie=t.FailureHandlingKind||(t.FailureHandlingKind={})).Abort="abort",Ie.Transactional="transactional",Ie.TextOnlyTransactional="textOnlyTransactional",Ie.Undo="undo",(Ce=t.PositionEncodingKind||(t.PositionEncodingKind={})).UTF8="utf-8",Ce.UTF16="utf-16",Ce.UTF32="utf-32",(t.StaticRegistrationOptions||(t.StaticRegistrationOptions={})).hasId=function(e){const t=e;return t&&o.string(t.id)&&t.id.length>0},(t.TextDocumentRegistrationOptions||(t.TextDocumentRegistrationOptions={})).is=function(e){const t=e;return t&&(null===t.documentSelector||k.is(t.documentSelector))},(xe=t.WorkDoneProgressOptions||(t.WorkDoneProgressOptions={})).is=function(e){const t=e;return o.objectLiteral(t)&&(void 0===t.workDoneProgress||o.boolean(t.workDoneProgress))},xe.hasWorkDoneProgress=function(e){const t=e;return t&&o.boolean(t.workDoneProgress)},(Se=t.InitializeRequest||(t.InitializeRequest={})).method="initialize",Se.messageDirection=r.MessageDirection.clientToServer,Se.type=new r.ProtocolRequestType(Se.method),(t.InitializeErrorCodes||(t.InitializeErrorCodes={})).unknownProtocolVersion=1,(we=t.InitializedNotification||(t.InitializedNotification={})).method="initialized",we.messageDirection=r.MessageDirection.clientToServer,we.type=new r.ProtocolNotificationType(we.method),(Te=t.ShutdownRequest||(t.ShutdownRequest={})).method="shutdown",Te.messageDirection=r.MessageDirection.clientToServer,Te.type=new r.ProtocolRequestType0(Te.method),(Ee=t.ExitNotification||(t.ExitNotification={})).method="exit",Ee.messageDirection=r.MessageDirection.clientToServer,Ee.type=new r.ProtocolNotificationType0(Ee.method),(be=t.DidChangeConfigurationNotification||(t.DidChangeConfigurationNotification={})).method="workspace/didChangeConfiguration",be.messageDirection=r.MessageDirection.clientToServer,be.type=new r.ProtocolNotificationType(be.method),(ve=t.MessageType||(t.MessageType={})).Error=1,ve.Warning=2,ve.Info=3,ve.Log=4,(_e=t.ShowMessageNotification||(t.ShowMessageNotification={})).method="window/showMessage",_e.messageDirection=r.MessageDirection.serverToClient,_e.type=new r.ProtocolNotificationType(_e.method),(ye=t.ShowMessageRequest||(t.ShowMessageRequest={})).method="window/showMessageRequest",ye.messageDirection=r.MessageDirection.serverToClient,ye.type=new r.ProtocolRequestType(ye.method),(ge=t.LogMessageNotification||(t.LogMessageNotification={})).method="window/logMessage",ge.messageDirection=r.MessageDirection.serverToClient,ge.type=new r.ProtocolNotificationType(ge.method),(me=t.TelemetryEventNotification||(t.TelemetryEventNotification={})).method="telemetry/event",me.messageDirection=r.MessageDirection.serverToClient,me.type=new r.ProtocolNotificationType(me.method),(fe=t.TextDocumentSyncKind||(t.TextDocumentSyncKind={})).None=0,fe.Full=1,fe.Incremental=2,(he=t.DidOpenTextDocumentNotification||(t.DidOpenTextDocumentNotification={})).method="textDocument/didOpen",he.messageDirection=r.MessageDirection.clientToServer,he.type=new r.ProtocolNotificationType(he.method),(de=t.TextDocumentContentChangeEvent||(t.TextDocumentContentChangeEvent={})).isIncremental=function(e){let t=e;return null!=t&&"string"==typeof t.text&&void 0!==t.range&&(void 0===t.rangeLength||"number"==typeof t.rangeLength)},de.isFull=function(e){let t=e;return null!=t&&"string"==typeof t.text&&void 0===t.range&&void 0===t.rangeLength},(pe=t.DidChangeTextDocumentNotification||(t.DidChangeTextDocumentNotification={})).method="textDocument/didChange",pe.messageDirection=r.MessageDirection.clientToServer,pe.type=new r.ProtocolNotificationType(pe.method),(ue=t.DidCloseTextDocumentNotification||(t.DidCloseTextDocumentNotification={})).method="textDocument/didClose",ue.messageDirection=r.MessageDirection.clientToServer,ue.type=new r.ProtocolNotificationType(ue.method),(le=t.DidSaveTextDocumentNotification||(t.DidSaveTextDocumentNotification={})).method="textDocument/didSave",le.messageDirection=r.MessageDirection.clientToServer,le.type=new r.ProtocolNotificationType(le.method),(ce=t.TextDocumentSaveReason||(t.TextDocumentSaveReason={})).Manual=1,ce.AfterDelay=2,ce.FocusOut=3,(ae=t.WillSaveTextDocumentNotification||(t.WillSaveTextDocumentNotification={})).method="textDocument/willSave",ae.messageDirection=r.MessageDirection.clientToServer,ae.type=new r.ProtocolNotificationType(ae.method),(se=t.WillSaveTextDocumentWaitUntilRequest||(t.WillSaveTextDocumentWaitUntilRequest={})).method="textDocument/willSaveWaitUntil",se.messageDirection=r.MessageDirection.clientToServer,se.type=new r.ProtocolRequestType(se.method),(oe=t.DidChangeWatchedFilesNotification||(t.DidChangeWatchedFilesNotification={})).method="workspace/didChangeWatchedFiles",oe.messageDirection=r.MessageDirection.clientToServer,oe.type=new r.ProtocolNotificationType(oe.method),(ie=t.FileChangeType||(t.FileChangeType={})).Created=1,ie.Changed=2,ie.Deleted=3,(t.RelativePattern||(t.RelativePattern={})).is=function(e){const t=e;return o.objectLiteral(t)&&(i.URI.is(t.baseUri)||i.WorkspaceFolder.is(t.baseUri))&&o.string(t.pattern)},(re=t.WatchKind||(t.WatchKind={})).Create=1,re.Change=2,re.Delete=4,(ne=t.PublishDiagnosticsNotification||(t.PublishDiagnosticsNotification={})).method="textDocument/publishDiagnostics",ne.messageDirection=r.MessageDirection.serverToClient,ne.type=new r.ProtocolNotificationType(ne.method),(te=t.CompletionTriggerKind||(t.CompletionTriggerKind={})).Invoked=1,te.TriggerCharacter=2,te.TriggerForIncompleteCompletions=3,(ee=t.CompletionRequest||(t.CompletionRequest={})).method="textDocument/completion",ee.messageDirection=r.MessageDirection.clientToServer,ee.type=new r.ProtocolRequestType(ee.method),(J=t.CompletionResolveRequest||(t.CompletionResolveRequest={})).method="completionItem/resolve",J.messageDirection=r.MessageDirection.clientToServer,J.type=new r.ProtocolRequestType(J.method),(Q=t.HoverRequest||(t.HoverRequest={})).method="textDocument/hover",Q.messageDirection=r.MessageDirection.clientToServer,Q.type=new r.ProtocolRequestType(Q.method),(Z=t.SignatureHelpTriggerKind||(t.SignatureHelpTriggerKind={})).Invoked=1,Z.TriggerCharacter=2,Z.ContentChange=3,(Y=t.SignatureHelpRequest||(t.SignatureHelpRequest={})).method="textDocument/signatureHelp",Y.messageDirection=r.MessageDirection.clientToServer,Y.type=new r.ProtocolRequestType(Y.method),(X=t.DefinitionRequest||(t.DefinitionRequest={})).method="textDocument/definition",X.messageDirection=r.MessageDirection.clientToServer,X.type=new r.ProtocolRequestType(X.method),(G=t.ReferencesRequest||(t.ReferencesRequest={})).method="textDocument/references",G.messageDirection=r.MessageDirection.clientToServer,G.type=new r.ProtocolRequestType(G.method),(K=t.DocumentHighlightRequest||(t.DocumentHighlightRequest={})).method="textDocument/documentHighlight",K.messageDirection=r.MessageDirection.clientToServer,K.type=new r.ProtocolRequestType(K.method),(W=t.DocumentSymbolRequest||(t.DocumentSymbolRequest={})).method="textDocument/documentSymbol",W.messageDirection=r.MessageDirection.clientToServer,W.type=new r.ProtocolRequestType(W.method),(z=t.CodeActionRequest||(t.CodeActionRequest={})).method="textDocument/codeAction",z.messageDirection=r.MessageDirection.clientToServer,z.type=new r.ProtocolRequestType(z.method),(V=t.CodeActionResolveRequest||(t.CodeActionResolveRequest={})).method="codeAction/resolve",V.messageDirection=r.MessageDirection.clientToServer,V.type=new r.ProtocolRequestType(V.method),(H=t.WorkspaceSymbolRequest||(t.WorkspaceSymbolRequest={})).method="workspace/symbol",H.messageDirection=r.MessageDirection.clientToServer,H.type=new r.ProtocolRequestType(H.method),($=t.WorkspaceSymbolResolveRequest||(t.WorkspaceSymbolResolveRequest={})).method="workspaceSymbol/resolve",$.messageDirection=r.MessageDirection.clientToServer,$.type=new r.ProtocolRequestType($.method),(q=t.CodeLensRequest||(t.CodeLensRequest={})).method="textDocument/codeLens",q.messageDirection=r.MessageDirection.clientToServer,q.type=new r.ProtocolRequestType(q.method),(U=t.CodeLensResolveRequest||(t.CodeLensResolveRequest={})).method="codeLens/resolve",U.messageDirection=r.MessageDirection.clientToServer,U.type=new r.ProtocolRequestType(U.method),(j=t.CodeLensRefreshRequest||(t.CodeLensRefreshRequest={})).method="workspace/codeLens/refresh",j.messageDirection=r.MessageDirection.serverToClient,j.type=new r.ProtocolRequestType0(j.method),(B=t.DocumentLinkRequest||(t.DocumentLinkRequest={})).method="textDocument/documentLink",B.messageDirection=r.MessageDirection.clientToServer,B.type=new r.ProtocolRequestType(B.method),(F=t.DocumentLinkResolveRequest||(t.DocumentLinkResolveRequest={})).method="documentLink/resolve",F.messageDirection=r.MessageDirection.clientToServer,F.type=new r.ProtocolRequestType(F.method),(L=t.DocumentFormattingRequest||(t.DocumentFormattingRequest={})).method="textDocument/formatting",L.messageDirection=r.MessageDirection.clientToServer,L.type=new r.ProtocolRequestType(L.method),(D=t.DocumentRangeFormattingRequest||(t.DocumentRangeFormattingRequest={})).method="textDocument/rangeFormatting",D.messageDirection=r.MessageDirection.clientToServer,D.type=new r.ProtocolRequestType(D.method),(M=t.DocumentOnTypeFormattingRequest||(t.DocumentOnTypeFormattingRequest={})).method="textDocument/onTypeFormatting",M.messageDirection=r.MessageDirection.clientToServer,M.type=new r.ProtocolRequestType(M.method),(t.PrepareSupportDefaultBehavior||(t.PrepareSupportDefaultBehavior={})).Identifier=1,(O=t.RenameRequest||(t.RenameRequest={})).method="textDocument/rename",O.messageDirection=r.MessageDirection.clientToServer,O.type=new r.ProtocolRequestType(O.method),(N=t.PrepareRenameRequest||(t.PrepareRenameRequest={})).method="textDocument/prepareRename",N.messageDirection=r.MessageDirection.clientToServer,N.type=new r.ProtocolRequestType(N.method),(P=t.ExecuteCommandRequest||(t.ExecuteCommandRequest={})).method="workspace/executeCommand",P.messageDirection=r.MessageDirection.clientToServer,P.type=new r.ProtocolRequestType(P.method),(R=t.ApplyWorkspaceEditRequest||(t.ApplyWorkspaceEditRequest={})).method="workspace/applyEdit",R.messageDirection=r.MessageDirection.serverToClient,R.type=new r.ProtocolRequestType("workspace/applyEdit")},26305:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LinkedEditingRangeRequest=void 0;const r=n(66140);var i;(i=t.LinkedEditingRangeRequest||(t.LinkedEditingRangeRequest={})).method="textDocument/linkedEditingRange",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},73443:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MonikerRequest=t.MonikerKind=t.UniquenessLevel=void 0;const r=n(66140);var i,o,s;(s=t.UniquenessLevel||(t.UniquenessLevel={})).document="document",s.project="project",s.group="group",s.scheme="scheme",s.global="global",(o=t.MonikerKind||(t.MonikerKind={})).$import="import",o.$export="export",o.local="local",(i=t.MonikerRequest||(t.MonikerRequest={})).method="textDocument/moniker",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},47169:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DidCloseNotebookDocumentNotification=t.DidSaveNotebookDocumentNotification=t.DidChangeNotebookDocumentNotification=t.NotebookCellArrayChange=t.DidOpenNotebookDocumentNotification=t.NotebookDocumentSyncRegistrationType=t.NotebookDocument=t.NotebookCell=t.ExecutionSummary=t.NotebookCellKind=void 0;const r=n(91674),i=n(69533),o=n(66140);var s,a,c,l,u,p,d,h,f,m;!function(e){e.Markup=1,e.Code=2,e.is=function(e){return 1===e||2===e}}(s=t.NotebookCellKind||(t.NotebookCellKind={})),function(e){e.create=function(e,t){const n={executionOrder:e};return!0!==t&&!1!==t||(n.success=t),n},e.is=function(e){const t=e;return i.objectLiteral(t)&&r.uinteger.is(t.executionOrder)&&(void 0===t.success||i.boolean(t.success))},e.equals=function(e,t){return e===t||null!=e&&null!=t&&e.executionOrder===t.executionOrder&&e.success===t.success}}(a=t.ExecutionSummary||(t.ExecutionSummary={})),function(e){function t(e,n){if(e===n)return!0;if(null==e||null==n)return!1;if(typeof e!=typeof n)return!1;if("object"!=typeof e)return!1;const r=Array.isArray(e),o=Array.isArray(n);if(r!==o)return!1;if(r&&o){if(e.length!==n.length)return!1;for(let r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WorkDoneProgressCancelNotification=t.WorkDoneProgressCreateRequest=t.WorkDoneProgress=void 0;const r=n(74389),i=n(66140);var o,s,a;(a=t.WorkDoneProgress||(t.WorkDoneProgress={})).type=new r.ProgressType,a.is=function(e){return e===a.type},(s=t.WorkDoneProgressCreateRequest||(t.WorkDoneProgressCreateRequest={})).method="window/workDoneProgress/create",s.messageDirection=i.MessageDirection.serverToClient,s.type=new i.ProtocolRequestType(s.method),(o=t.WorkDoneProgressCancelNotification||(t.WorkDoneProgressCancelNotification={})).method="window/workDoneProgress/cancel",o.messageDirection=i.MessageDirection.clientToServer,o.type=new i.ProtocolNotificationType(o.method)},5206:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SelectionRangeRequest=void 0;const r=n(66140);var i;(i=t.SelectionRangeRequest||(t.SelectionRangeRequest={})).method="textDocument/selectionRange",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},39434:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticTokensRefreshRequest=t.SemanticTokensRangeRequest=t.SemanticTokensDeltaRequest=t.SemanticTokensRequest=t.SemanticTokensRegistrationType=t.TokenFormat=void 0;const r=n(66140);var i,o,s,a,c;(t.TokenFormat||(t.TokenFormat={})).Relative="relative",function(e){e.method="textDocument/semanticTokens",e.type=new r.RegistrationType(e.method)}(i=t.SemanticTokensRegistrationType||(t.SemanticTokensRegistrationType={})),(c=t.SemanticTokensRequest||(t.SemanticTokensRequest={})).method="textDocument/semanticTokens/full",c.messageDirection=r.MessageDirection.clientToServer,c.type=new r.ProtocolRequestType(c.method),c.registrationMethod=i.method,(a=t.SemanticTokensDeltaRequest||(t.SemanticTokensDeltaRequest={})).method="textDocument/semanticTokens/full/delta",a.messageDirection=r.MessageDirection.clientToServer,a.type=new r.ProtocolRequestType(a.method),a.registrationMethod=i.method,(s=t.SemanticTokensRangeRequest||(t.SemanticTokensRangeRequest={})).method="textDocument/semanticTokens/range",s.messageDirection=r.MessageDirection.clientToServer,s.type=new r.ProtocolRequestType(s.method),s.registrationMethod=i.method,(o=t.SemanticTokensRefreshRequest||(t.SemanticTokensRefreshRequest={})).method="workspace/semanticTokens/refresh",o.messageDirection=r.MessageDirection.serverToClient,o.type=new r.ProtocolRequestType0(o.method)},75726:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ShowDocumentRequest=void 0;const r=n(66140);var i;(i=t.ShowDocumentRequest||(t.ShowDocumentRequest={})).method="window/showDocument",i.messageDirection=r.MessageDirection.serverToClient,i.type=new r.ProtocolRequestType(i.method)},71589:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TypeDefinitionRequest=void 0;const r=n(66140);var i;(i=t.TypeDefinitionRequest||(t.TypeDefinitionRequest={})).method="textDocument/typeDefinition",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},83693:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TypeHierarchySubtypesRequest=t.TypeHierarchySupertypesRequest=t.TypeHierarchyPrepareRequest=void 0;const r=n(66140);var i,o,s;(s=t.TypeHierarchyPrepareRequest||(t.TypeHierarchyPrepareRequest={})).method="textDocument/prepareTypeHierarchy",s.messageDirection=r.MessageDirection.clientToServer,s.type=new r.ProtocolRequestType(s.method),(o=t.TypeHierarchySupertypesRequest||(t.TypeHierarchySupertypesRequest={})).method="typeHierarchy/supertypes",o.messageDirection=r.MessageDirection.clientToServer,o.type=new r.ProtocolRequestType(o.method),(i=t.TypeHierarchySubtypesRequest||(t.TypeHierarchySubtypesRequest={})).method="typeHierarchy/subtypes",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolRequestType(i.method)},98744:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DidChangeWorkspaceFoldersNotification=t.WorkspaceFoldersRequest=void 0;const r=n(66140);var i,o;(o=t.WorkspaceFoldersRequest||(t.WorkspaceFoldersRequest={})).method="workspace/workspaceFolders",o.messageDirection=r.MessageDirection.serverToClient,o.type=new r.ProtocolRequestType0(o.method),(i=t.DidChangeWorkspaceFoldersNotification||(t.DidChangeWorkspaceFoldersNotification={})).method="workspace/didChangeWorkspaceFolders",i.messageDirection=r.MessageDirection.clientToServer,i.type=new r.ProtocolNotificationType(i.method)},69533:(e,t)=>{"use strict";function n(e){return"string"==typeof e||e instanceof String}function r(e){return Array.isArray(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.objectLiteral=t.typedArray=t.stringArray=t.array=t.func=t.error=t.number=t.string=t.boolean=void 0,t.boolean=function(e){return!0===e||!1===e},t.string=n,t.number=function(e){return"number"==typeof e||e instanceof Number},t.error=function(e){return e instanceof Error},t.func=function(e){return"function"==typeof e},t.array=r,t.stringArray=function(e){return r(e)&&e.every((e=>n(e)))},t.typedArray=function(e,t){return Array.isArray(e)&&e.every(t)},t.objectLiteral=function(e){return null!==e&&"object"==typeof e}},40273:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.createProtocolConnection=void 0;const o=n(95028);i(n(95028),t),i(n(51661),t),t.createProtocolConnection=function(e,t,n,r){return(0,o.createMessageConnection)(e,t,n,r)}},96560:(e,t,n)=>{"use strict";e.exports=n(40273)},96813:(e,t,n)=>{"use strict";n.r(t),n.d(t,{TextDocument:()=>r});var r,i=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;ie?r=i:n=i+1}var o=n-1;return{line:o,character:e-t[o]}},e.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var n=t[e.line],r=e.line+1n.line||t.line===n.line&&t.character>n.character?{start:n,end:t}:e}function l(e){var t=c(e.range);return t!==e.range?{newText:e.newText,range:t}:e}!function(e){e.create=function(e,t,n,r){return new o(e,t,n,r)},e.update=function(e,t,n){if(e instanceof o)return e.update(t,n),e;throw new Error("TextDocument.update: document must be created by TextDocument.create")},e.applyEdits=function(e,t){for(var n=e.getText(),r=0,i=[],o=0,a=s(t.map(l),(function(e,t){var n=e.range.start.line-t.range.start.line;return 0===n?e.range.start.character-t.range.start.character:n}));or&&i.push(n.substring(r,u)),c.newText.length&&i.push(c.newText),r=e.offsetAt(c.range.end)}return i.push(n.substr(r)),i.join("")}}(r||(r={}))},91674:(e,t,n)=>{"use strict";var r,i,o,s,a,c,l,u,p,d,h,f,m,g,y,_,v,b,E,T,w,S,x,C,I,A,k,R;n.r(t),n.d(t,{AnnotatedTextEdit:()=>x,ChangeAnnotation:()=>w,ChangeAnnotationIdentifier:()=>S,CodeAction:()=>oe,CodeActionContext:()=>ie,CodeActionKind:()=>ne,CodeActionTriggerKind:()=>re,CodeDescription:()=>v,CodeLens:()=>se,Color:()=>p,ColorInformation:()=>d,ColorPresentation:()=>h,Command:()=>E,CompletionItem:()=>H,CompletionItemKind:()=>F,CompletionItemLabelDetails:()=>$,CompletionItemTag:()=>j,CompletionList:()=>V,CreateFile:()=>I,DeleteFile:()=>k,Diagnostic:()=>b,DiagnosticRelatedInformation:()=>g,DiagnosticSeverity:()=>y,DiagnosticTag:()=>_,DocumentHighlight:()=>Y,DocumentHighlightKind:()=>X,DocumentLink:()=>ce,DocumentSymbol:()=>te,DocumentUri:()=>r,EOL:()=>xe,FoldingRange:()=>m,FoldingRangeKind:()=>f,FormattingOptions:()=>ae,Hover:()=>W,InlayHint:()=>ve,InlayHintKind:()=>ye,InlayHintLabelPart:()=>_e,InlineValueContext:()=>ge,InlineValueEvaluatableExpression:()=>me,InlineValueText:()=>he,InlineValueVariableLookup:()=>fe,InsertReplaceEdit:()=>U,InsertTextFormat:()=>B,InsertTextMode:()=>q,Location:()=>l,LocationLink:()=>u,MarkedString:()=>z,MarkupContent:()=>L,MarkupKind:()=>D,OptionalVersionedTextDocumentIdentifier:()=>O,ParameterInformation:()=>K,Position:()=>a,Range:()=>c,RenameFile:()=>A,SelectionRange:()=>le,SemanticTokenModifiers:()=>pe,SemanticTokenTypes:()=>ue,SemanticTokens:()=>de,SignatureInformation:()=>G,SymbolInformation:()=>J,SymbolKind:()=>Z,SymbolTag:()=>Q,TextDocument:()=>Se,TextDocumentEdit:()=>C,TextDocumentIdentifier:()=>P,TextDocumentItem:()=>M,TextEdit:()=>T,URI:()=>i,VersionedTextDocumentIdentifier:()=>N,WorkspaceChange:()=>we,WorkspaceEdit:()=>R,WorkspaceFolder:()=>be,WorkspaceSymbol:()=>ee,integer:()=>o,uinteger:()=>s}),function(e){e.is=function(e){return"string"==typeof e}}(r||(r={})),function(e){e.is=function(e){return"string"==typeof e}}(i||(i={})),function(e){e.MIN_VALUE=-2147483648,e.MAX_VALUE=2147483647,e.is=function(t){return"number"==typeof t&&e.MIN_VALUE<=t&&t<=e.MAX_VALUE}}(o||(o={})),function(e){e.MIN_VALUE=0,e.MAX_VALUE=2147483647,e.is=function(t){return"number"==typeof t&&e.MIN_VALUE<=t&&t<=e.MAX_VALUE}}(s||(s={})),function(e){e.create=function(e,t){return e===Number.MAX_VALUE&&(e=s.MAX_VALUE),t===Number.MAX_VALUE&&(t=s.MAX_VALUE),{line:e,character:t}},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&Ce.uinteger(t.line)&&Ce.uinteger(t.character)}}(a||(a={})),function(e){e.create=function(e,t,n,r){if(Ce.uinteger(e)&&Ce.uinteger(t)&&Ce.uinteger(n)&&Ce.uinteger(r))return{start:a.create(e,t),end:a.create(n,r)};if(a.is(e)&&a.is(t))return{start:e,end:t};throw new Error("Range#create called with invalid arguments[".concat(e,", ").concat(t,", ").concat(n,", ").concat(r,"]"))},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&a.is(t.start)&&a.is(t.end)}}(c||(c={})),function(e){e.create=function(e,t){return{uri:e,range:t}},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&c.is(t.range)&&(Ce.string(t.uri)||Ce.undefined(t.uri))}}(l||(l={})),function(e){e.create=function(e,t,n,r){return{targetUri:e,targetRange:t,targetSelectionRange:n,originSelectionRange:r}},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&c.is(t.targetRange)&&Ce.string(t.targetUri)&&c.is(t.targetSelectionRange)&&(c.is(t.originSelectionRange)||Ce.undefined(t.originSelectionRange))}}(u||(u={})),function(e){e.create=function(e,t,n,r){return{red:e,green:t,blue:n,alpha:r}},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&Ce.numberRange(t.red,0,1)&&Ce.numberRange(t.green,0,1)&&Ce.numberRange(t.blue,0,1)&&Ce.numberRange(t.alpha,0,1)}}(p||(p={})),function(e){e.create=function(e,t){return{range:e,color:t}},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&c.is(t.range)&&p.is(t.color)}}(d||(d={})),function(e){e.create=function(e,t,n){return{label:e,textEdit:t,additionalTextEdits:n}},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&Ce.string(t.label)&&(Ce.undefined(t.textEdit)||T.is(t))&&(Ce.undefined(t.additionalTextEdits)||Ce.typedArray(t.additionalTextEdits,T.is))}}(h||(h={})),function(e){e.Comment="comment",e.Imports="imports",e.Region="region"}(f||(f={})),function(e){e.create=function(e,t,n,r,i,o){var s={startLine:e,endLine:t};return Ce.defined(n)&&(s.startCharacter=n),Ce.defined(r)&&(s.endCharacter=r),Ce.defined(i)&&(s.kind=i),Ce.defined(o)&&(s.collapsedText=o),s},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&Ce.uinteger(t.startLine)&&Ce.uinteger(t.startLine)&&(Ce.undefined(t.startCharacter)||Ce.uinteger(t.startCharacter))&&(Ce.undefined(t.endCharacter)||Ce.uinteger(t.endCharacter))&&(Ce.undefined(t.kind)||Ce.string(t.kind))}}(m||(m={})),function(e){e.create=function(e,t){return{location:e,message:t}},e.is=function(e){var t=e;return Ce.defined(t)&&l.is(t.location)&&Ce.string(t.message)}}(g||(g={})),function(e){e.Error=1,e.Warning=2,e.Information=3,e.Hint=4}(y||(y={})),function(e){e.Unnecessary=1,e.Deprecated=2}(_||(_={})),function(e){e.is=function(e){var t=e;return Ce.objectLiteral(t)&&Ce.string(t.href)}}(v||(v={})),function(e){e.create=function(e,t,n,r,i,o){var s={range:e,message:t};return Ce.defined(n)&&(s.severity=n),Ce.defined(r)&&(s.code=r),Ce.defined(i)&&(s.source=i),Ce.defined(o)&&(s.relatedInformation=o),s},e.is=function(e){var t,n=e;return Ce.defined(n)&&c.is(n.range)&&Ce.string(n.message)&&(Ce.number(n.severity)||Ce.undefined(n.severity))&&(Ce.integer(n.code)||Ce.string(n.code)||Ce.undefined(n.code))&&(Ce.undefined(n.codeDescription)||Ce.string(null===(t=n.codeDescription)||void 0===t?void 0:t.href))&&(Ce.string(n.source)||Ce.undefined(n.source))&&(Ce.undefined(n.relatedInformation)||Ce.typedArray(n.relatedInformation,g.is))}}(b||(b={})),function(e){e.create=function(e,t){for(var n=[],r=2;r0&&(i.arguments=n),i},e.is=function(e){var t=e;return Ce.defined(t)&&Ce.string(t.title)&&Ce.string(t.command)}}(E||(E={})),function(e){e.replace=function(e,t){return{range:e,newText:t}},e.insert=function(e,t){return{range:{start:e,end:e},newText:t}},e.del=function(e){return{range:e,newText:""}},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&Ce.string(t.newText)&&c.is(t.range)}}(T||(T={})),function(e){e.create=function(e,t,n){var r={label:e};return void 0!==t&&(r.needsConfirmation=t),void 0!==n&&(r.description=n),r},e.is=function(e){var t=e;return Ce.objectLiteral(t)&&Ce.string(t.label)&&(Ce.boolean(t.needsConfirmation)||void 0===t.needsConfirmation)&&(Ce.string(t.description)||void 0===t.description)}}(w||(w={})),function(e){e.is=function(e){var t=e;return Ce.string(t)}}(S||(S={})),function(e){e.replace=function(e,t,n){return{range:e,newText:t,annotationId:n}},e.insert=function(e,t,n){return{range:{start:e,end:e},newText:t,annotationId:n}},e.del=function(e,t){return{range:e,newText:"",annotationId:t}},e.is=function(e){var t=e;return T.is(t)&&(w.is(t.annotationId)||S.is(t.annotationId))}}(x||(x={})),function(e){e.create=function(e,t){return{textDocument:e,edits:t}},e.is=function(e){var t=e;return Ce.defined(t)&&O.is(t.textDocument)&&Array.isArray(t.edits)}}(C||(C={})),function(e){e.create=function(e,t,n){var r={kind:"create",uri:e};return void 0===t||void 0===t.overwrite&&void 0===t.ignoreIfExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},e.is=function(e){var t=e;return t&&"create"===t.kind&&Ce.string(t.uri)&&(void 0===t.options||(void 0===t.options.overwrite||Ce.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||Ce.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||S.is(t.annotationId))}}(I||(I={})),function(e){e.create=function(e,t,n,r){var i={kind:"rename",oldUri:e,newUri:t};return void 0===n||void 0===n.overwrite&&void 0===n.ignoreIfExists||(i.options=n),void 0!==r&&(i.annotationId=r),i},e.is=function(e){var t=e;return t&&"rename"===t.kind&&Ce.string(t.oldUri)&&Ce.string(t.newUri)&&(void 0===t.options||(void 0===t.options.overwrite||Ce.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||Ce.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||S.is(t.annotationId))}}(A||(A={})),function(e){e.create=function(e,t,n){var r={kind:"delete",uri:e};return void 0===t||void 0===t.recursive&&void 0===t.ignoreIfNotExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},e.is=function(e){var t=e;return t&&"delete"===t.kind&&Ce.string(t.uri)&&(void 0===t.options||(void 0===t.options.recursive||Ce.boolean(t.options.recursive))&&(void 0===t.options.ignoreIfNotExists||Ce.boolean(t.options.ignoreIfNotExists)))&&(void 0===t.annotationId||S.is(t.annotationId))}}(k||(k={})),function(e){e.is=function(e){var t=e;return t&&(void 0!==t.changes||void 0!==t.documentChanges)&&(void 0===t.documentChanges||t.documentChanges.every((function(e){return Ce.string(e.kind)?I.is(e)||A.is(e)||k.is(e):C.is(e)})))}}(R||(R={}));var P,N,O,M,D,L,F,B,j,U,q,$,H,V,z,W,K,G,X,Y,Z,Q,J,ee,te,ne,re,ie,oe,se,ae,ce,le,ue,pe,de,he,fe,me,ge,ye,_e,ve,be,Ee=function(){function e(e,t){this.edits=e,this.changeAnnotations=t}return e.prototype.insert=function(e,t,n){var r,i;if(void 0===n?r=T.insert(e,t):S.is(n)?(i=n,r=x.insert(e,t,n)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(n),r=x.insert(e,t,i)),this.edits.push(r),void 0!==i)return i},e.prototype.replace=function(e,t,n){var r,i;if(void 0===n?r=T.replace(e,t):S.is(n)?(i=n,r=x.replace(e,t,n)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(n),r=x.replace(e,t,i)),this.edits.push(r),void 0!==i)return i},e.prototype.delete=function(e,t){var n,r;if(void 0===t?n=T.del(e):S.is(t)?(r=t,n=x.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),r=this.changeAnnotations.manage(t),n=x.del(e,r)),this.edits.push(n),void 0!==r)return r},e.prototype.add=function(e){this.edits.push(e)},e.prototype.all=function(){return this.edits},e.prototype.clear=function(){this.edits.splice(0,this.edits.length)},e.prototype.assertChangeAnnotations=function(e){if(void 0===e)throw new Error("Text edit change is not configured to manage change annotations.")},e}(),Te=function(){function e(e){this._annotations=void 0===e?Object.create(null):e,this._counter=0,this._size=0}return e.prototype.all=function(){return this._annotations},Object.defineProperty(e.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),e.prototype.manage=function(e,t){var n;if(S.is(e)?n=e:(n=this.nextId(),t=e),void 0!==this._annotations[n])throw new Error("Id ".concat(n," is already in use."));if(void 0===t)throw new Error("No annotation provided for id ".concat(n));return this._annotations[n]=t,this._size++,n},e.prototype.nextId=function(){return this._counter++,this._counter.toString()},e}(),we=function(){function e(e){var t=this;this._textEditChanges=Object.create(null),void 0!==e?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new Te(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach((function(e){if(C.is(e)){var n=new Ee(e.edits,t._changeAnnotations);t._textEditChanges[e.textDocument.uri]=n}}))):e.changes&&Object.keys(e.changes).forEach((function(n){var r=new Ee(e.changes[n]);t._textEditChanges[n]=r}))):this._workspaceEdit={}}return Object.defineProperty(e.prototype,"edit",{get:function(){return this.initDocumentChanges(),void 0!==this._changeAnnotations&&(0===this._changeAnnotations.size?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),e.prototype.getTextEditChange=function(e){if(O.is(e)){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var t={uri:e.uri,version:e.version};if(!(r=this._textEditChanges[t.uri])){var n={textDocument:t,edits:i=[]};this._workspaceEdit.documentChanges.push(n),r=new Ee(i,this._changeAnnotations),this._textEditChanges[t.uri]=r}return r}if(this.initChanges(),void 0===this._workspaceEdit.changes)throw new Error("Workspace edit is not configured for normal text edit changes.");var r;if(!(r=this._textEditChanges[e])){var i=[];this._workspaceEdit.changes[e]=i,r=new Ee(i),this._textEditChanges[e]=r}return r},e.prototype.initDocumentChanges=function(){void 0===this._workspaceEdit.documentChanges&&void 0===this._workspaceEdit.changes&&(this._changeAnnotations=new Te,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},e.prototype.initChanges=function(){void 0===this._workspaceEdit.documentChanges&&void 0===this._workspaceEdit.changes&&(this._workspaceEdit.changes=Object.create(null))},e.prototype.createFile=function(e,t,n){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var r,i,o;if(w.is(t)||S.is(t)?r=t:n=t,void 0===r?i=I.create(e,n):(o=S.is(r)?r:this._changeAnnotations.manage(r),i=I.create(e,n,o)),this._workspaceEdit.documentChanges.push(i),void 0!==o)return o},e.prototype.renameFile=function(e,t,n,r){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var i,o,s;if(w.is(n)||S.is(n)?i=n:r=n,void 0===i?o=A.create(e,t,r):(s=S.is(i)?i:this._changeAnnotations.manage(i),o=A.create(e,t,r,s)),this._workspaceEdit.documentChanges.push(o),void 0!==s)return s},e.prototype.deleteFile=function(e,t,n){if(this.initDocumentChanges(),void 0===this._workspaceEdit.documentChanges)throw new Error("Workspace edit is not configured for document changes.");var r,i,o;if(w.is(t)||S.is(t)?r=t:n=t,void 0===r?i=k.create(e,n):(o=S.is(r)?r:this._changeAnnotations.manage(r),i=k.create(e,n,o)),this._workspaceEdit.documentChanges.push(i),void 0!==o)return o},e}();!function(e){e.create=function(e){return{uri:e}},e.is=function(e){var t=e;return Ce.defined(t)&&Ce.string(t.uri)}}(P||(P={})),function(e){e.create=function(e,t){return{uri:e,version:t}},e.is=function(e){var t=e;return Ce.defined(t)&&Ce.string(t.uri)&&Ce.integer(t.version)}}(N||(N={})),function(e){e.create=function(e,t){return{uri:e,version:t}},e.is=function(e){var t=e;return Ce.defined(t)&&Ce.string(t.uri)&&(null===t.version||Ce.integer(t.version))}}(O||(O={})),function(e){e.create=function(e,t,n,r){return{uri:e,languageId:t,version:n,text:r}},e.is=function(e){var t=e;return Ce.defined(t)&&Ce.string(t.uri)&&Ce.string(t.languageId)&&Ce.integer(t.version)&&Ce.string(t.text)}}(M||(M={})),function(e){e.PlainText="plaintext",e.Markdown="markdown",e.is=function(t){var n=t;return n===e.PlainText||n===e.Markdown}}(D||(D={})),function(e){e.is=function(e){var t=e;return Ce.objectLiteral(e)&&D.is(t.kind)&&Ce.string(t.value)}}(L||(L={})),function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25}(F||(F={})),function(e){e.PlainText=1,e.Snippet=2}(B||(B={})),function(e){e.Deprecated=1}(j||(j={})),function(e){e.create=function(e,t,n){return{newText:e,insert:t,replace:n}},e.is=function(e){var t=e;return t&&Ce.string(t.newText)&&c.is(t.insert)&&c.is(t.replace)}}(U||(U={})),function(e){e.asIs=1,e.adjustIndentation=2}(q||(q={})),function(e){e.is=function(e){var t=e;return t&&(Ce.string(t.detail)||void 0===t.detail)&&(Ce.string(t.description)||void 0===t.description)}}($||($={})),function(e){e.create=function(e){return{label:e}}}(H||(H={})),function(e){e.create=function(e,t){return{items:e||[],isIncomplete:!!t}}}(V||(V={})),function(e){e.fromPlainText=function(e){return e.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")},e.is=function(e){var t=e;return Ce.string(t)||Ce.objectLiteral(t)&&Ce.string(t.language)&&Ce.string(t.value)}}(z||(z={})),function(e){e.is=function(e){var t=e;return!!t&&Ce.objectLiteral(t)&&(L.is(t.contents)||z.is(t.contents)||Ce.typedArray(t.contents,z.is))&&(void 0===e.range||c.is(e.range))}}(W||(W={})),function(e){e.create=function(e,t){return t?{label:e,documentation:t}:{label:e}}}(K||(K={})),function(e){e.create=function(e,t){for(var n=[],r=2;r=0;s--){var a=i[s],c=e.offsetAt(a.range.start),l=e.offsetAt(a.range.end);if(!(l<=o))throw new Error("Overlapping edit");r=r.substring(0,c)+a.newText+r.substring(l,r.length),o=c}return r}}(Se||(Se={}));var Ce,Ie=function(){function e(e,t,n,r){this._uri=e,this._languageId=t,this._version=n,this._content=r,this._lineOffsets=void 0}return Object.defineProperty(e.prototype,"uri",{get:function(){return this._uri},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"languageId",{get:function(){return this._languageId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"version",{get:function(){return this._version},enumerable:!1,configurable:!0}),e.prototype.getText=function(e){if(e){var t=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(t,n)}return this._content},e.prototype.update=function(e,t){this._content=e.text,this._version=t,this._lineOffsets=void 0},e.prototype.getLineOffsets=function(){if(void 0===this._lineOffsets){for(var e=[],t=this._content,n=!0,r=0;r0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets},e.prototype.positionAt=function(e){e=Math.max(Math.min(e,this._content.length),0);var t=this.getLineOffsets(),n=0,r=t.length;if(0===r)return a.create(0,e);for(;ne?r=i:n=i+1}var o=n-1;return a.create(o,e-t[o])},e.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var n=t[e.line],r=e.line+1{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CallHierarchyFeature=void 0;const r=n(40273);t.CallHierarchyFeature=e=>class extends e{get callHierarchy(){return{onPrepare:e=>this.connection.onRequest(r.CallHierarchyPrepareRequest.type,((t,n)=>e(t,n,this.attachWorkDoneProgress(t),void 0))),onIncomingCalls:e=>{const t=r.CallHierarchyIncomingCallsRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))},onOutgoingCalls:e=>{const t=r.CallHierarchyOutgoingCallsRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))}}}}},52507:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigurationFeature=void 0;const r=n(40273),i=n(40289);t.ConfigurationFeature=e=>class extends e{getConfiguration(e){return e?i.string(e)?this._getConfiguration({section:e}):this._getConfiguration(e):this._getConfiguration({})}_getConfiguration(e){let t={items:Array.isArray(e)?e:[e]};return this.connection.sendRequest(r.ConfigurationRequest.type,t).then((t=>Array.isArray(t)?Array.isArray(e)?t:t[0]:Array.isArray(e)?[]:null))}}},6634:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DiagnosticFeature=void 0;const r=n(40273);t.DiagnosticFeature=e=>class extends e{get diagnostics(){return{refresh:()=>this.connection.sendRequest(r.DiagnosticRefreshRequest.type),on:e=>this.connection.onRequest(r.DocumentDiagnosticRequest.type,((t,n)=>e(t,n,this.attachWorkDoneProgress(t),this.attachPartialResultProgress(r.DocumentDiagnosticRequest.partialResult,t)))),onWorkspace:e=>this.connection.onRequest(r.WorkspaceDiagnosticRequest.type,((t,n)=>e(t,n,this.attachWorkDoneProgress(t),this.attachPartialResultProgress(r.WorkspaceDiagnosticRequest.partialResult,t))))}}}},50828:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FileOperationsFeature=void 0;const r=n(40273);t.FileOperationsFeature=e=>class extends e{onDidCreateFiles(e){return this.connection.onNotification(r.DidCreateFilesNotification.type,(t=>{e(t)}))}onDidRenameFiles(e){return this.connection.onNotification(r.DidRenameFilesNotification.type,(t=>{e(t)}))}onDidDeleteFiles(e){return this.connection.onNotification(r.DidDeleteFilesNotification.type,(t=>{e(t)}))}onWillCreateFiles(e){return this.connection.onRequest(r.WillCreateFilesRequest.type,((t,n)=>e(t,n)))}onWillRenameFiles(e){return this.connection.onRequest(r.WillRenameFilesRequest.type,((t,n)=>e(t,n)))}onWillDeleteFiles(e){return this.connection.onRequest(r.WillDeleteFilesRequest.type,((t,n)=>e(t,n)))}}},46507:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InlayHintFeature=void 0;const r=n(40273);t.InlayHintFeature=e=>class extends e{get inlayHint(){return{refresh:()=>this.connection.sendRequest(r.InlayHintRefreshRequest.type),on:e=>this.connection.onRequest(r.InlayHintRequest.type,((t,n)=>e(t,n,this.attachWorkDoneProgress(t)))),resolve:e=>this.connection.onRequest(r.InlayHintResolveRequest.type,((t,n)=>e(t,n)))}}}},58970:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.InlineValueFeature=void 0;const r=n(40273);t.InlineValueFeature=e=>class extends e{get inlineValue(){return{refresh:()=>this.connection.sendRequest(r.InlineValueRefreshRequest.type),on:e=>this.connection.onRequest(r.InlineValueRequest.type,((t,n)=>e(t,n,this.attachWorkDoneProgress(t))))}}}},22776:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LinkedEditingRangeFeature=void 0;const r=n(40273);t.LinkedEditingRangeFeature=e=>class extends e{onLinkedEditingRange(e){return this.connection.onRequest(r.LinkedEditingRangeRequest.type,((t,n)=>e(t,n,this.attachWorkDoneProgress(t),void 0)))}}},8120:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MonikerFeature=void 0;const r=n(40273);t.MonikerFeature=e=>class extends e{get moniker(){return{on:e=>{const t=r.MonikerRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))}}}}},29748:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NotebookDocuments=t.NotebookSyncFeature=void 0;const r=n(40273),i=n(38382);t.NotebookSyncFeature=e=>class extends e{get synchronization(){return{onDidOpenNotebookDocument:e=>this.connection.onNotification(r.DidOpenNotebookDocumentNotification.type,(t=>{e(t)})),onDidChangeNotebookDocument:e=>this.connection.onNotification(r.DidChangeNotebookDocumentNotification.type,(t=>{e(t)})),onDidSaveNotebookDocument:e=>this.connection.onNotification(r.DidSaveNotebookDocumentNotification.type,(t=>{e(t)})),onDidCloseNotebookDocument:e=>this.connection.onNotification(r.DidCloseNotebookDocumentNotification.type,(t=>{e(t)}))}}};class o{onDidOpenTextDocument(e){return this.openHandler=e,r.Disposable.create((()=>{this.openHandler=void 0}))}openTextDocument(e){this.openHandler&&this.openHandler(e)}onDidChangeTextDocument(e){return this.changeHandler=e,r.Disposable.create((()=>{this.changeHandler=e}))}changeTextDocument(e){this.changeHandler&&this.changeHandler(e)}onDidCloseTextDocument(e){return this.closeHandler=e,r.Disposable.create((()=>{this.closeHandler=void 0}))}closeTextDocument(e){this.closeHandler&&this.closeHandler(e)}onWillSaveTextDocument(){return o.NULL_DISPOSE}onWillSaveTextDocumentWaitUntil(){return o.NULL_DISPOSE}onDidSaveTextDocument(){return o.NULL_DISPOSE}}o.NULL_DISPOSE=Object.freeze({dispose:()=>{}}),t.NotebookDocuments=class{constructor(e){e instanceof i.TextDocuments?this._cellTextDocuments=e:this._cellTextDocuments=new i.TextDocuments(e),this.notebookDocuments=new Map,this.notebookCellMap=new Map,this._onDidOpen=new r.Emitter,this._onDidChange=new r.Emitter,this._onDidSave=new r.Emitter,this._onDidClose=new r.Emitter}get cellTextDocuments(){return this._cellTextDocuments}getCellTextDocument(e){return this._cellTextDocuments.get(e.document)}getNotebookDocument(e){return this.notebookDocuments.get(e)}getNotebookCell(e){const t=this.notebookCellMap.get(e);return t&&t[0]}findNotebookDocumentForCell(e){const t="string"==typeof e?e:e.document,n=this.notebookCellMap.get(t);return n&&n[1]}get onDidOpen(){return this._onDidOpen.event}get onDidSave(){return this._onDidSave.event}get onDidChange(){return this._onDidChange.event}get onDidClose(){return this._onDidClose.event}listen(e){const t=new o,n=[];return n.push(this.cellTextDocuments.listen(t)),n.push(e.notebooks.synchronization.onDidOpenNotebookDocument((e=>{this.notebookDocuments.set(e.notebookDocument.uri,e.notebookDocument);for(const n of e.cellTextDocuments)t.openTextDocument({textDocument:n});this.updateCellMap(e.notebookDocument),this._onDidOpen.fire(e.notebookDocument)}))),n.push(e.notebooks.synchronization.onDidChangeNotebookDocument((e=>{const n=this.notebookDocuments.get(e.notebookDocument.uri);if(void 0===n)return;n.version=e.notebookDocument.version;const r=n.metadata;let i=!1;const o=e.change;void 0!==o.metadata&&(i=!0,n.metadata=o.metadata);const s=[],a=[],c=[],l=[];if(void 0!==o.cells){const e=o.cells;if(void 0!==e.structure){const r=e.structure.array;if(n.cells.splice(r.start,r.deleteCount,...void 0!==r.cells?r.cells:[]),void 0!==e.structure.didOpen)for(const n of e.structure.didOpen)t.openTextDocument({textDocument:n}),s.push(n.uri);if(e.structure.didClose)for(const n of e.structure.didClose)t.closeTextDocument({textDocument:n}),a.push(n.uri)}if(void 0!==e.data){const t=new Map(e.data.map((e=>[e.document,e])));for(let e=0;e<=n.cells.length;e++){const r=t.get(n.cells[e].document);if(void 0!==r){const i=n.cells.splice(e,1,r);if(c.push({old:i[0],new:r}),t.delete(r.document),0===t.size)break}}}if(void 0!==e.textContent)for(const n of e.textContent)t.changeTextDocument({textDocument:n.document,contentChanges:n.changes}),l.push(n.document.uri)}this.updateCellMap(n);const u={notebookDocument:n};i&&(u.metadata={old:r,new:n.metadata});const p=[];for(const e of s)p.push(this.getNotebookCell(e));const d=[];for(const e of a)d.push(this.getNotebookCell(e));const h=[];for(const e of l)h.push(this.getNotebookCell(e));(p.length>0||d.length>0||c.length>0||h.length>0)&&(u.cells={added:p,removed:d,changed:{data:c,textContent:h}}),void 0===u.metadata&&void 0===u.cells||this._onDidChange.fire(u)}))),n.push(e.notebooks.synchronization.onDidSaveNotebookDocument((e=>{const t=this.notebookDocuments.get(e.notebookDocument.uri);void 0!==t&&this._onDidSave.fire(t)}))),n.push(e.notebooks.synchronization.onDidCloseNotebookDocument((e=>{const n=this.notebookDocuments.get(e.notebookDocument.uri);if(void 0!==n){this._onDidClose.fire(n);for(const n of e.cellTextDocuments)t.closeTextDocument({textDocument:n});this.notebookDocuments.delete(e.notebookDocument.uri);for(const e of n.cells)this.notebookCellMap.delete(e.document)}}))),r.Disposable.create((()=>{n.forEach((e=>e.dispose()))}))}updateCellMap(e){for(const t of e.cells)this.notebookCellMap.set(t.document,[t,e])}}},42731:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.attachPartialResult=t.ProgressFeature=t.attachWorkDone=void 0;const r=n(40273),i=n(37560);class o{constructor(e,t){this._connection=e,this._token=t,o.Instances.set(this._token,this)}begin(e,t,n,i){let o={kind:"begin",title:e,percentage:t,message:n,cancellable:i};this._connection.sendProgress(r.WorkDoneProgress.type,this._token,o)}report(e,t){let n={kind:"report"};"number"==typeof e?(n.percentage=e,void 0!==t&&(n.message=t)):n.message=e,this._connection.sendProgress(r.WorkDoneProgress.type,this._token,n)}done(){o.Instances.delete(this._token),this._connection.sendProgress(r.WorkDoneProgress.type,this._token,{kind:"end"})}}o.Instances=new Map;class s extends o{constructor(e,t){super(e,t),this._source=new r.CancellationTokenSource}get token(){return this._source.token}done(){this._source.dispose(),super.done()}cancel(){this._source.cancel()}}class a{constructor(){}begin(){}report(){}done(){}}class c extends a{constructor(){super(),this._source=new r.CancellationTokenSource}get token(){return this._source.token}done(){this._source.dispose()}cancel(){this._source.cancel()}}var l;t.attachWorkDone=function(e,t){if(void 0===t||void 0===t.workDoneToken)return new a;const n=t.workDoneToken;return delete t.workDoneToken,new o(e,n)},t.ProgressFeature=e=>class extends e{constructor(){super(),this._progressSupported=!1}initialize(e){super.initialize(e),!0===e?.window?.workDoneProgress&&(this._progressSupported=!0,this.connection.onNotification(r.WorkDoneProgressCancelNotification.type,(e=>{let t=o.Instances.get(e.token);(t instanceof s||t instanceof c)&&t.cancel()})))}attachWorkDoneProgress(e){return void 0===e?new a:new o(this.connection,e)}createWorkDoneProgress(){if(this._progressSupported){const e=(0,i.generateUuid)();return this.connection.sendRequest(r.WorkDoneProgressCreateRequest.type,{token:e}).then((()=>new s(this.connection,e)))}return Promise.resolve(new c)}},function(e){e.type=new r.ProgressType}(l||(l={}));class u{constructor(e,t){this._connection=e,this._token=t}report(e){this._connection.sendProgress(l.type,this._token,e)}}t.attachPartialResult=function(e,t){if(void 0===t||void 0===t.partialResultToken)return;const n=t.partialResultToken;return delete t.partialResultToken,new u(e,n)}},59817:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticTokensBuilder=t.SemanticTokensDiff=t.SemanticTokensFeature=void 0;const r=n(40273);t.SemanticTokensFeature=e=>class extends e{get semanticTokens(){return{refresh:()=>this.connection.sendRequest(r.SemanticTokensRefreshRequest.type),on:e=>{const t=r.SemanticTokensRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))},onDelta:e=>{const t=r.SemanticTokensDeltaRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))},onRange:e=>{const t=r.SemanticTokensRangeRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))}}}};class i{constructor(e,t){this.originalSequence=e,this.modifiedSequence=t}computeDiff(){const e=this.originalSequence.length,t=this.modifiedSequence.length;let n=0;for(;n=n&&i>=n&&this.originalSequence[r]===this.modifiedSequence[i];)r--,i--;(r0&&(o-=this._prevLine,0===o&&(s-=this._prevChar)),this._data[this._dataLen++]=o,this._data[this._dataLen++]=s,this._data[this._dataLen++]=n,this._data[this._dataLen++]=r,this._data[this._dataLen++]=i,this._prevLine=e,this._prevChar=t}get id(){return this._id.toString()}previousResult(e){this.id===e&&(this._prevData=this._data),this.initialize()}build(){return this._prevData=void 0,{resultId:this.id,data:this._data}}canBuildEdits(){return void 0!==this._prevData}buildEdits(){return void 0!==this._prevData?{resultId:this.id,edits:new i(this._prevData,this._data).computeDiff()}:this.build()}}},49891:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createConnection=t.combineFeatures=t.combineNotebooksFeatures=t.combineLanguagesFeatures=t.combineWorkspaceFeatures=t.combineWindowFeatures=t.combineClientFeatures=t.combineTracerFeatures=t.combineTelemetryFeatures=t.combineConsoleFeatures=t._NotebooksImpl=t._LanguagesImpl=t.BulkUnregistration=t.BulkRegistration=t.ErrorMessageTracker=void 0;const r=n(40273),i=n(40289),o=n(37560),s=n(42731),a=n(52507),c=n(91836),l=n(47985),u=n(59817),p=n(85421),d=n(50828),h=n(22776),f=n(64606),m=n(58970),g=n(46507),y=n(6634),_=n(29748),v=n(8120);function b(e){if(null!==e)return e}t.ErrorMessageTracker=class{constructor(){this._messages=Object.create(null)}add(e){let t=this._messages[e];t||(t=0),t++,this._messages[e]=t}sendErrors(e){Object.keys(this._messages).forEach((t=>{e.window.showErrorMessage(t)}))}};class E{constructor(){}rawAttach(e){this._rawConnection=e}attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}fillServerCapabilities(e){}initialize(e){}error(e){this.send(r.MessageType.Error,e)}warn(e){this.send(r.MessageType.Warning,e)}info(e){this.send(r.MessageType.Info,e)}log(e){this.send(r.MessageType.Log,e)}send(e,t){this._rawConnection&&this._rawConnection.sendNotification(r.LogMessageNotification.type,{type:e,message:t}).catch((()=>{(0,r.RAL)().console.error("Sending log message failed")}))}}const T=(0,p.ShowDocumentFeature)((0,s.ProgressFeature)(class{constructor(){}attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}initialize(e){}fillServerCapabilities(e){}showErrorMessage(e,...t){let n={type:r.MessageType.Error,message:e,actions:t};return this.connection.sendRequest(r.ShowMessageRequest.type,n).then(b)}showWarningMessage(e,...t){let n={type:r.MessageType.Warning,message:e,actions:t};return this.connection.sendRequest(r.ShowMessageRequest.type,n).then(b)}showInformationMessage(e,...t){let n={type:r.MessageType.Info,message:e,actions:t};return this.connection.sendRequest(r.ShowMessageRequest.type,n).then(b)}}));(t.BulkRegistration||(t.BulkRegistration={})).create=function(){return new w};class w{constructor(){this._registrations=[],this._registered=new Set}add(e,t){const n=i.string(e)?e:e.method;if(this._registered.has(n))throw new Error(`${n} is already added to this registration`);const r=o.generateUuid();this._registrations.push({id:r,method:n,registerOptions:t||{}}),this._registered.add(n)}asRegistrationParams(){return{registrations:this._registrations}}}(t.BulkUnregistration||(t.BulkUnregistration={})).create=function(){return new S(void 0,[])};class S{constructor(e,t){this._connection=e,this._unregistrations=new Map,t.forEach((e=>{this._unregistrations.set(e.method,e)}))}get isAttached(){return!!this._connection}attach(e){this._connection=e}add(e){this._unregistrations.set(e.method,e)}dispose(){let e=[];for(let t of this._unregistrations.values())e.push(t);let t={unregisterations:e};this._connection.sendRequest(r.UnregistrationRequest.type,t).catch((()=>{this._connection.console.info("Bulk unregistration failed.")}))}disposeSingle(e){const t=i.string(e)?e:e.method,n=this._unregistrations.get(t);if(!n)return!1;let o={unregisterations:[n]};return this._connection.sendRequest(r.UnregistrationRequest.type,o).then((()=>{this._unregistrations.delete(t)}),(e=>{this._connection.console.info(`Un-registering request handler for ${n.id} failed.`)})),!0}}class x{attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}initialize(e){}fillServerCapabilities(e){}register(e,t,n){return e instanceof w?this.registerMany(e):e instanceof S?this.registerSingle1(e,t,n):this.registerSingle2(e,t)}registerSingle1(e,t,n){const s=i.string(t)?t:t.method,a=o.generateUuid();let c={registrations:[{id:a,method:s,registerOptions:n||{}}]};return e.isAttached||e.attach(this.connection),this.connection.sendRequest(r.RegistrationRequest.type,c).then((t=>(e.add({id:a,method:s}),e)),(e=>(this.connection.console.info(`Registering request handler for ${s} failed.`),Promise.reject(e))))}registerSingle2(e,t){const n=i.string(e)?e:e.method,s=o.generateUuid();let a={registrations:[{id:s,method:n,registerOptions:t||{}}]};return this.connection.sendRequest(r.RegistrationRequest.type,a).then((e=>r.Disposable.create((()=>{this.unregisterSingle(s,n).catch((()=>{this.connection.console.info(`Un-registering capability with id ${s} failed.`)}))}))),(e=>(this.connection.console.info(`Registering request handler for ${n} failed.`),Promise.reject(e))))}unregisterSingle(e,t){let n={unregisterations:[{id:e,method:t}]};return this.connection.sendRequest(r.UnregistrationRequest.type,n).catch((()=>{this.connection.console.info(`Un-registering request handler for ${e} failed.`)}))}registerMany(e){let t=e.asRegistrationParams();return this.connection.sendRequest(r.RegistrationRequest.type,t).then((()=>new S(this._connection,t.registrations.map((e=>({id:e.id,method:e.method}))))),(e=>(this.connection.console.info("Bulk registration failed."),Promise.reject(e))))}}const C=(0,d.FileOperationsFeature)((0,c.WorkspaceFoldersFeature)((0,a.ConfigurationFeature)(class{constructor(){}attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}initialize(e){}fillServerCapabilities(e){}applyEdit(e){let t=(n=e)&&n.edit?e:{edit:e};var n;return this.connection.sendRequest(r.ApplyWorkspaceEditRequest.type,t)}})));class I{constructor(){this._trace=r.Trace.Off}attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}initialize(e){}fillServerCapabilities(e){}set trace(e){this._trace=e}log(e,t){this._trace!==r.Trace.Off&&this.connection.sendNotification(r.LogTraceNotification.type,{message:e,verbose:this._trace===r.Trace.Verbose?t:void 0}).catch((()=>{}))}}class A{constructor(){}attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}initialize(e){}fillServerCapabilities(e){}logEvent(e){this.connection.sendNotification(r.TelemetryEventNotification.type,e).catch((()=>{this.connection.console.log("Sending TelemetryEventNotification failed")}))}}class k{constructor(){}attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}initialize(e){}fillServerCapabilities(e){}attachWorkDoneProgress(e){return(0,s.attachWorkDone)(this.connection,e)}attachPartialResultProgress(e,t){return(0,s.attachPartialResult)(this.connection,t)}}t._LanguagesImpl=k;const R=(0,v.MonikerFeature)((0,y.DiagnosticFeature)((0,g.InlayHintFeature)((0,m.InlineValueFeature)((0,f.TypeHierarchyFeature)((0,h.LinkedEditingRangeFeature)((0,u.SemanticTokensFeature)((0,l.CallHierarchyFeature)(k))))))));class P{constructor(){}attach(e){this._connection=e}get connection(){if(!this._connection)throw new Error("Remote is not attached to a connection yet.");return this._connection}initialize(e){}fillServerCapabilities(e){}attachWorkDoneProgress(e){return(0,s.attachWorkDone)(this.connection,e)}attachPartialResultProgress(e,t){return(0,s.attachPartialResult)(this.connection,t)}}t._NotebooksImpl=P;const N=(0,_.NotebookSyncFeature)(P);function O(e,t){return function(n){return t(e(n))}}function M(e,t){return function(n){return t(e(n))}}function D(e,t){return function(n){return t(e(n))}}function L(e,t){return function(n){return t(e(n))}}function F(e,t){return function(n){return t(e(n))}}function B(e,t){return function(n){return t(e(n))}}function j(e,t){return function(n){return t(e(n))}}function U(e,t){return function(n){return t(e(n))}}t.combineConsoleFeatures=O,t.combineTelemetryFeatures=M,t.combineTracerFeatures=D,t.combineClientFeatures=L,t.combineWindowFeatures=F,t.combineWorkspaceFeatures=B,t.combineLanguagesFeatures=j,t.combineNotebooksFeatures=U,t.combineFeatures=function(e,t){function n(e,t,n){return e&&t?n(e,t):e||t}return{__brand:"features",console:n(e.console,t.console,O),tracer:n(e.tracer,t.tracer,D),telemetry:n(e.telemetry,t.telemetry,M),client:n(e.client,t.client,L),window:n(e.window,t.window,F),workspace:n(e.workspace,t.workspace,B),languages:n(e.languages,t.languages,j),notebooks:n(e.notebooks,t.notebooks,U)}},t.createConnection=function(e,t,n){const o=n&&n.console?new(n.console(E)):new E,a=e(o);o.rawAttach(a);const c=n&&n.tracer?new(n.tracer(I)):new I,l=n&&n.telemetry?new(n.telemetry(A)):new A,u=n&&n.client?new(n.client(x)):new x,p=n&&n.window?new(n.window(T)):new T,d=n&&n.workspace?new(n.workspace(C)):new C,h=n&&n.languages?new(n.languages(R)):new R,f=n&&n.notebooks?new(n.notebooks(N)):new N,m=[o,c,l,u,p,d,h,f];function g(e){return e instanceof Promise?e:i.thenable(e)?new Promise(((t,n)=>{e.then((e=>t(e)),(e=>n(e)))})):Promise.resolve(e)}let y,_,v,b={listen:()=>a.listen(),sendRequest:(e,...t)=>a.sendRequest(i.string(e)?e:e.method,...t),onRequest:(e,t)=>a.onRequest(e,t),sendNotification:(e,t)=>{const n=i.string(e)?e:e.method;return 1===arguments.length?a.sendNotification(n):a.sendNotification(n,t)},onNotification:(e,t)=>a.onNotification(e,t),onProgress:a.onProgress,sendProgress:a.sendProgress,onInitialize:e=>(_=e,{dispose:()=>{_=void 0}}),onInitialized:e=>a.onNotification(r.InitializedNotification.type,e),onShutdown:e=>(y=e,{dispose:()=>{y=void 0}}),onExit:e=>(v=e,{dispose:()=>{v=void 0}}),get console(){return o},get telemetry(){return l},get tracer(){return c},get client(){return u},get window(){return p},get workspace(){return d},get languages(){return h},get notebooks(){return f},onDidChangeConfiguration:e=>a.onNotification(r.DidChangeConfigurationNotification.type,e),onDidChangeWatchedFiles:e=>a.onNotification(r.DidChangeWatchedFilesNotification.type,e),__textDocumentSync:void 0,onDidOpenTextDocument:e=>a.onNotification(r.DidOpenTextDocumentNotification.type,e),onDidChangeTextDocument:e=>a.onNotification(r.DidChangeTextDocumentNotification.type,e),onDidCloseTextDocument:e=>a.onNotification(r.DidCloseTextDocumentNotification.type,e),onWillSaveTextDocument:e=>a.onNotification(r.WillSaveTextDocumentNotification.type,e),onWillSaveTextDocumentWaitUntil:e=>a.onRequest(r.WillSaveTextDocumentWaitUntilRequest.type,e),onDidSaveTextDocument:e=>a.onNotification(r.DidSaveTextDocumentNotification.type,e),sendDiagnostics:e=>a.sendNotification(r.PublishDiagnosticsNotification.type,e),onHover:e=>a.onRequest(r.HoverRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),void 0))),onCompletion:e=>a.onRequest(r.CompletionRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onCompletionResolve:e=>a.onRequest(r.CompletionResolveRequest.type,e),onSignatureHelp:e=>a.onRequest(r.SignatureHelpRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),void 0))),onDeclaration:e=>a.onRequest(r.DeclarationRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onDefinition:e=>a.onRequest(r.DefinitionRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onTypeDefinition:e=>a.onRequest(r.TypeDefinitionRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onImplementation:e=>a.onRequest(r.ImplementationRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onReferences:e=>a.onRequest(r.ReferencesRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onDocumentHighlight:e=>a.onRequest(r.DocumentHighlightRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onDocumentSymbol:e=>a.onRequest(r.DocumentSymbolRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onWorkspaceSymbol:e=>a.onRequest(r.WorkspaceSymbolRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onWorkspaceSymbolResolve:e=>a.onRequest(r.WorkspaceSymbolResolveRequest.type,e),onCodeAction:e=>a.onRequest(r.CodeActionRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onCodeActionResolve:e=>a.onRequest(r.CodeActionResolveRequest.type,((t,n)=>e(t,n))),onCodeLens:e=>a.onRequest(r.CodeLensRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onCodeLensResolve:e=>a.onRequest(r.CodeLensResolveRequest.type,((t,n)=>e(t,n))),onDocumentFormatting:e=>a.onRequest(r.DocumentFormattingRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),void 0))),onDocumentRangeFormatting:e=>a.onRequest(r.DocumentRangeFormattingRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),void 0))),onDocumentOnTypeFormatting:e=>a.onRequest(r.DocumentOnTypeFormattingRequest.type,((t,n)=>e(t,n))),onRenameRequest:e=>a.onRequest(r.RenameRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),void 0))),onPrepareRename:e=>a.onRequest(r.PrepareRenameRequest.type,((t,n)=>e(t,n))),onDocumentLinks:e=>a.onRequest(r.DocumentLinkRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onDocumentLinkResolve:e=>a.onRequest(r.DocumentLinkResolveRequest.type,((t,n)=>e(t,n))),onDocumentColor:e=>a.onRequest(r.DocumentColorRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onColorPresentation:e=>a.onRequest(r.ColorPresentationRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onFoldingRanges:e=>a.onRequest(r.FoldingRangeRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onSelectionRanges:e=>a.onRequest(r.SelectionRangeRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),(0,s.attachPartialResult)(a,t)))),onExecuteCommand:e=>a.onRequest(r.ExecuteCommandRequest.type,((t,n)=>e(t,n,(0,s.attachWorkDone)(a,t),void 0))),dispose:()=>a.dispose()};for(let e of m)e.attach(b);return a.onRequest(r.InitializeRequest.type,(e=>{t.initialize(e),i.string(e.trace)&&(c.trace=r.Trace.fromString(e.trace));for(let t of m)t.initialize(e.capabilities);if(_)return g(_(e,(new r.CancellationTokenSource).token,(0,s.attachWorkDone)(a,e),void 0)).then((e=>{if(e instanceof r.ResponseError)return e;let t=e;t||(t={capabilities:{}});let n=t.capabilities;n||(n={},t.capabilities=n),void 0===n.textDocumentSync||null===n.textDocumentSync?n.textDocumentSync=i.number(b.__textDocumentSync)?b.__textDocumentSync:r.TextDocumentSyncKind.None:i.number(n.textDocumentSync)||i.number(n.textDocumentSync.change)||(n.textDocumentSync.change=i.number(b.__textDocumentSync)?b.__textDocumentSync:r.TextDocumentSyncKind.None);for(let e of m)e.fillServerCapabilities(n);return t}));{let e={capabilities:{textDocumentSync:r.TextDocumentSyncKind.None}};for(let t of m)t.fillServerCapabilities(e.capabilities);return e}})),a.onRequest(r.ShutdownRequest.type,(()=>(t.shutdownReceived=!0,y?y((new r.CancellationTokenSource).token):void 0))),a.onNotification(r.ExitNotification.type,(()=>{try{v&&v()}finally{t.shutdownReceived?t.exit(0):t.exit(1)}})),a.onNotification(r.SetTraceNotification.type,(e=>{c.trace=r.Trace.fromString(e.value)})),b}},85421:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ShowDocumentFeature=void 0;const r=n(40273);t.ShowDocumentFeature=e=>class extends e{showDocument(e){return this.connection.sendRequest(r.ShowDocumentRequest.type,e)}}},38382:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TextDocuments=void 0;const r=n(40273);t.TextDocuments=class{constructor(e){this._configuration=e,this._syncedDocuments=new Map,this._onDidChangeContent=new r.Emitter,this._onDidOpen=new r.Emitter,this._onDidClose=new r.Emitter,this._onDidSave=new r.Emitter,this._onWillSave=new r.Emitter}get onDidOpen(){return this._onDidOpen.event}get onDidChangeContent(){return this._onDidChangeContent.event}get onWillSave(){return this._onWillSave.event}onWillSaveWaitUntil(e){this._willSaveWaitUntil=e}get onDidSave(){return this._onDidSave.event}get onDidClose(){return this._onDidClose.event}get(e){return this._syncedDocuments.get(e)}all(){return Array.from(this._syncedDocuments.values())}keys(){return Array.from(this._syncedDocuments.keys())}listen(e){e.__textDocumentSync=r.TextDocumentSyncKind.Incremental;const t=[];return t.push(e.onDidOpenTextDocument((e=>{const t=e.textDocument,n=this._configuration.create(t.uri,t.languageId,t.version,t.text);this._syncedDocuments.set(t.uri,n);const r=Object.freeze({document:n});this._onDidOpen.fire(r),this._onDidChangeContent.fire(r)}))),t.push(e.onDidChangeTextDocument((e=>{const t=e.textDocument,n=e.contentChanges;if(0===n.length)return;const{version:r}=t;if(null==r)throw new Error(`Received document change event for ${t.uri} without valid version identifier`);let i=this._syncedDocuments.get(t.uri);void 0!==i&&(i=this._configuration.update(i,n,r),this._syncedDocuments.set(t.uri,i),this._onDidChangeContent.fire(Object.freeze({document:i})))}))),t.push(e.onDidCloseTextDocument((e=>{let t=this._syncedDocuments.get(e.textDocument.uri);void 0!==t&&(this._syncedDocuments.delete(e.textDocument.uri),this._onDidClose.fire(Object.freeze({document:t})))}))),t.push(e.onWillSaveTextDocument((e=>{let t=this._syncedDocuments.get(e.textDocument.uri);void 0!==t&&this._onWillSave.fire(Object.freeze({document:t,reason:e.reason}))}))),t.push(e.onWillSaveTextDocumentWaitUntil(((e,t)=>{let n=this._syncedDocuments.get(e.textDocument.uri);return void 0!==n&&this._willSaveWaitUntil?this._willSaveWaitUntil(Object.freeze({document:n,reason:e.reason}),t):[]}))),t.push(e.onDidSaveTextDocument((e=>{let t=this._syncedDocuments.get(e.textDocument.uri);void 0!==t&&this._onDidSave.fire(Object.freeze({document:t}))}))),r.Disposable.create((()=>{t.forEach((e=>e.dispose()))}))}}},64606:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TypeHierarchyFeature=void 0;const r=n(40273);t.TypeHierarchyFeature=e=>class extends e{get typeHierarchy(){return{onPrepare:e=>this.connection.onRequest(r.TypeHierarchyPrepareRequest.type,((t,n)=>e(t,n,this.attachWorkDoneProgress(t),void 0))),onSupertypes:e=>{const t=r.TypeHierarchySupertypesRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))},onSubtypes:e=>{const t=r.TypeHierarchySubtypesRequest.type;return this.connection.onRequest(t,((n,r)=>e(n,r,this.attachWorkDoneProgress(n),this.attachPartialResultProgress(t,n))))}}}}},40289:(e,t)=>{"use strict";function n(e){return"string"==typeof e||e instanceof String}function r(e){return"function"==typeof e}function i(e){return Array.isArray(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.thenable=t.typedArray=t.stringArray=t.array=t.func=t.error=t.number=t.string=t.boolean=void 0,t.boolean=function(e){return!0===e||!1===e},t.string=n,t.number=function(e){return"number"==typeof e||e instanceof Number},t.error=function(e){return e instanceof Error},t.func=r,t.array=i,t.stringArray=function(e){return i(e)&&e.every((e=>n(e)))},t.typedArray=function(e,t){return Array.isArray(e)&&e.every(t)},t.thenable=function(e){return e&&r(e.then)}},37560:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.generateUuid=t.parse=t.isUUID=t.v4=t.empty=void 0;class n{constructor(e){this._value=e}asHex(){return this._value}equals(e){return this.asHex()===e.asHex()}}class r extends n{constructor(){super([r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),"-",r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),"-","4",r._randomHex(),r._randomHex(),r._randomHex(),"-",r._oneOf(r._timeHighBits),r._randomHex(),r._randomHex(),r._randomHex(),"-",r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex(),r._randomHex()].join(""))}static _oneOf(e){return e[Math.floor(e.length*Math.random())]}static _randomHex(){return r._oneOf(r._chars)}}function i(){return new r}r._chars=["0","1","2","3","4","5","6","6","7","8","9","a","b","c","d","e","f"],r._timeHighBits=["8","9","a","b"],t.empty=new n("00000000-0000-0000-0000-000000000000"),t.v4=i;const o=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function s(e){return o.test(e)}t.isUUID=s,t.parse=function(e){if(!s(e))throw new Error("invalid uuid");return new n(e)},t.generateUuid=function(){return i().asHex()}},91836:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WorkspaceFoldersFeature=void 0;const r=n(40273);t.WorkspaceFoldersFeature=e=>class extends e{constructor(){super(),this._notificationIsAutoRegistered=!1}initialize(e){super.initialize(e);let t=e.workspace;t&&t.workspaceFolders&&(this._onDidChangeWorkspaceFolders=new r.Emitter,this.connection.onNotification(r.DidChangeWorkspaceFoldersNotification.type,(e=>{this._onDidChangeWorkspaceFolders.fire(e.event)})))}fillServerCapabilities(e){super.fillServerCapabilities(e);const t=e.workspace?.workspaceFolders?.changeNotifications;this._notificationIsAutoRegistered=!0===t||"string"==typeof t}getWorkspaceFolders(){return this.connection.sendRequest(r.WorkspaceFoldersRequest.type)}get onDidChangeWorkspaceFolders(){if(!this._onDidChangeWorkspaceFolders)throw new Error("Client doesn't support sending workspace folder change events.");return this._notificationIsAutoRegistered||this._unregistration||(this._unregistration=this.connection.client.register(r.DidChangeWorkspaceFoldersNotification.type)),this._onDidChangeWorkspaceFolders.event}}},87613:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resolveModulePath=t.FileSystem=t.resolveGlobalYarnPath=t.resolveGlobalNodePath=t.resolve=t.uriToFilePath=void 0;const r=n(57310),i=n(71017),o=n(57147),s=n(32081);function a(){return"win32"===process.platform}function c(e,t,n,r){const a="NODE_PATH",c=["var p = process;","p.on('message',function(m){","if(m.c==='e'){","p.exit(0);","}","else if(m.c==='rs'){","try{","var r=require.resolve(m.a);","p.send({c:'r',s:true,r:r});","}","catch(err){","p.send({c:'r',s:false});","}","}","});"].join("");return new Promise(((l,u)=>{let p=process.env,d=Object.create(null);Object.keys(p).forEach((e=>d[e]=p[e])),t&&o.existsSync(t)&&(d[a]?d[a]=t+i.delimiter+d[a]:d[a]=t,r&&r(`NODE_PATH value is: ${d[a]}`)),d.ELECTRON_RUN_AS_NODE="1";try{let t=(0,s.fork)("",[],{cwd:n,env:d,execArgv:["-e",c]});if(void 0===t.pid)return void u(new Error(`Starting process to resolve node module ${e} failed`));t.on("error",(e=>{u(e)})),t.on("message",(n=>{"r"===n.c&&(t.send({c:"e"}),n.s?l(n.r):u(new Error(`Failed to resolve module: ${e}`)))}));let r={c:"rs",a:e};t.send(r)}catch(e){u(e)}}))}function l(e){let t="npm";const n=Object.create(null);Object.keys(process.env).forEach((e=>n[e]=process.env[e])),n.NO_UPDATE_NOTIFIER="true";const r={encoding:"utf8",env:n};a()&&(t="npm.cmd",r.shell=!0);let o=()=>{};try{process.on("SIGPIPE",o);let n=(0,s.spawnSync)(t,["config","get","prefix"],r).stdout;if(!n)return void(e&&e("'npm config get prefix' didn't return a value."));let c=n.trim();return e&&e(`'npm config get prefix' value is: ${c}`),c.length>0?a()?i.join(c,"node_modules"):i.join(c,"lib","node_modules"):void 0}catch(e){return}finally{process.removeListener("SIGPIPE",o)}}var u;t.uriToFilePath=function(e){let t=r.parse(e);if("file:"!==t.protocol||!t.path)return;let n=t.path.split("/");for(var o=0,s=n.length;o1){let e=n[0],t=n[1];0===e.length&&t.length>1&&":"===t[1]&&n.shift()}return i.normalize(n.join("/"))},t.resolve=c,t.resolveGlobalNodePath=l,t.resolveGlobalYarnPath=function(e){let t="yarn",n={encoding:"utf8"};a()&&(t="yarn.cmd",n.shell=!0);let r=()=>{};try{process.on("SIGPIPE",r);let o=(0,s.spawnSync)(t,["global","dir","--json"],n),a=o.stdout;if(!a)return void(e&&(e("'yarn global dir' didn't return a value."),o.stderr&&e(o.stderr)));let c=a.trim().split(/\r?\n/);for(let e of c)try{let t=JSON.parse(e);if("log"===t.type)return i.join(t.data,"node_modules")}catch(e){}return}catch(e){return}finally{process.removeListener("SIGPIPE",r)}},function(e){let t;function n(){return void 0!==t||(t=!("win32"===process.platform||o.existsSync(__filename.toUpperCase())&&o.existsSync(__filename.toLowerCase()))),t}e.isCaseSensitive=n,e.isParent=function(e,t){return n()?0===i.normalize(t).indexOf(i.normalize(e)):0===i.normalize(t).toLowerCase().indexOf(i.normalize(e).toLowerCase())}}(u=t.FileSystem||(t.FileSystem={})),t.resolveModulePath=function(e,t,n,r){return n?(i.isAbsolute(n)||(n=i.join(e,n)),c(t,n,n,r).then((e=>u.isParent(n,e)?e:Promise.reject(new Error(`Failed to load ${t} from node path location.`)))).then(void 0,(n=>c(t,l(r),e,r)))):c(t,l(r),e,r)}},35809:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.createConnection=t.Files=void 0;const o=n(40289),s=n(49891),a=n(87613),c=n(96560);var l;i(n(96560),t),i(n(76265),t),(l=t.Files||(t.Files={})).uriToFilePath=a.uriToFilePath,l.resolveGlobalNodePath=a.resolveGlobalNodePath,l.resolveGlobalYarnPath=a.resolveGlobalYarnPath,l.resolve=a.resolve,l.resolveModulePath=a.resolveModulePath;let u,p=!1;!function(){const e="--clientProcessId";function t(e){try{let t=parseInt(e);isNaN(t)||(u=setInterval((()=>{try{process.kill(t,0)}catch(e){process.exit(p?0:1)}}),3e3))}catch(e){}}for(let n=2;n{const t=e.processId;o.number(t)&&void 0===u&&setInterval((()=>{try{process.kill(t,0)}catch(e){process.exit(p?0:1)}}),3e3)},get shutdownReceived(){return p},set shutdownReceived(e){p=e},exit:e=>{process.exit(e)}};t.createConnection=function(e,t,n,r){let i,a,l,u;return void 0!==e&&"features"===e.__brand&&(i=e,e=t,t=n,n=r),c.ConnectionStrategy.is(e)||c.ConnectionOptions.is(e)?u=e:(a=e,l=t,u=n),function(e,t,n,r){if(!e&&!t&&process.argv.length>2){let n,r,o=process.argv.slice(2);for(let s=0;s{process.exit(p?0:1)})),t.on("close",(()=>{process.exit(p?0:1)}))}return(0,s.createConnection)((r=>(0,c.createProtocolConnection)(e,t,r,n)),d,r)}(a,l,u,i)}},68212:(e,t,n)=>{"use strict";e.exports=n(35809)},49602:e=>{"use strict";e.exports=function(e){e.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}},34411:(e,t,n)=>{"use strict";function r(e){var t=this;if(t instanceof r||(t=new r),t.tail=null,t.head=null,t.length=0,e&&"function"==typeof e.forEach)e.forEach((function(e){t.push(e)}));else if(arguments.length>0)for(var n=0,i=arguments.length;n1)n=t;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");r=this.head.next,n=this.head.value}for(var i=0;null!==r;i++)n=e(n,r.value,i),r=r.next;return n},r.prototype.reduceReverse=function(e,t){var n,r=this.tail;if(arguments.length>1)n=t;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");r=this.tail.prev,n=this.tail.value}for(var i=this.length-1;null!==r;i--)n=e(n,r.value,i),r=r.prev;return n},r.prototype.toArray=function(){for(var e=new Array(this.length),t=0,n=this.head;null!==n;t++)e[t]=n.value,n=n.next;return e},r.prototype.toArrayReverse=function(){for(var e=new Array(this.length),t=0,n=this.tail;null!==n;t++)e[t]=n.value,n=n.prev;return e},r.prototype.slice=function(e,t){(t=t||this.length)<0&&(t+=this.length),(e=e||0)<0&&(e+=this.length);var n=new r;if(tthis.length&&(t=this.length);for(var i=0,o=this.head;null!==o&&ithis.length&&(t=this.length);for(var i=this.length,o=this.tail;null!==o&&i>t;i--)o=o.prev;for(;null!==o&&i>e;i--,o=o.prev)n.push(o.value);return n},r.prototype.splice=function(e,t,...n){e>this.length&&(e=this.length-1),e<0&&(e=this.length+e);for(var r=0,o=this.head;null!==o&&r{"use strict";n.r(t),n.d(t,{TextDocument:()=>i});class r{constructor(e,t,n,r){this._uri=e,this._languageId=t,this._version=n,this._content=r,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){const t=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(t,n)}return this._content}update(e,t){for(let t of e)if(r.isIncremental(t)){const e=a(t.range),n=this.offsetAt(e.start),r=this.offsetAt(e.end);this._content=this._content.substring(0,n)+t.text+this._content.substring(r,this._content.length);const i=Math.max(e.start.line,0),o=Math.max(e.end.line,0);let c=this._lineOffsets;const l=s(t.text,!1,n);if(o-i===l.length)for(let e=0,t=l.length;ee?r=i:n=i+1}let i=n-1;return{line:i,character:e-t[i]}}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let n=t[e.line],r=e.line+1n.line||t.line===n.line&&t.character>n.character?{start:n,end:t}:e}function c(e){const t=a(e.range);return t!==e.range?{newText:e.newText,range:t}:e}!function(e){e.create=function(e,t,n,i){return new r(e,t,n,i)},e.update=function(e,t,n){if(e instanceof r)return e.update(t,n),e;throw new Error("TextDocument.update: document must be created by TextDocument.create")},e.applyEdits=function(e,t){let n=e.getText(),r=o(t.map(c),((e,t)=>{let n=e.range.start.line-t.range.start.line;return 0===n?e.range.start.character-t.range.start.character:n})),i=0;const s=[];for(const t of r){let r=e.offsetAt(t.range.start);if(ri&&s.push(n.substring(i,r)),t.newText.length&&s.push(t.newText),i=e.offsetAt(t.range.end)}return s.push(n.substr(i)),s.join("")}}(i||(i={}))},39941:e=>{const t="object"==typeof performance&&performance&&"function"==typeof performance.now?performance:Date,n="function"==typeof AbortController?AbortController:class{constructor(){this.signal=new o}abort(){this.signal.dispatchEvent("abort")}},r="function"==typeof AbortSignal,i="function"==typeof n.AbortSignal,o=r?AbortSignal:i?n.AbortController:class{constructor(){this.aborted=!1,this._listeners=[]}dispatchEvent(e){if("abort"===e){this.aborted=!0;const t={type:e,target:this};this.onabort(t),this._listeners.forEach((e=>e(t)),this)}}onabort(){}addEventListener(e,t){"abort"===e&&this._listeners.push(t)}removeEventListener(e,t){"abort"===e&&(this._listeners=this._listeners.filter((e=>e!==t)))}},s=new Set,a=(e,t)=>{const n=`LRU_CACHE_OPTION_${e}`;u(n)&&p(n,`${e} option`,`options.${t}`,g)},c=(e,t)=>{const n=`LRU_CACHE_METHOD_${e}`;if(u(n)){const{prototype:r}=g,{get:i}=Object.getOwnPropertyDescriptor(r,e);p(n,`${e} method`,`cache.${t}()`,i)}},l=(...e)=>{"object"==typeof process&&process&&"function"==typeof process.emitWarning?process.emitWarning(...e):console.error(...e)},u=e=>!s.has(e),p=(e,t,n,r)=>{s.add(e),l(`The ${t} is deprecated. Please use ${n} instead.`,"DeprecationWarning",e,r)},d=e=>e&&e===Math.floor(e)&&e>0&&isFinite(e),h=e=>d(e)?e<=Math.pow(2,8)?Uint8Array:e<=Math.pow(2,16)?Uint16Array:e<=Math.pow(2,32)?Uint32Array:e<=Number.MAX_SAFE_INTEGER?f:null:null;class f extends Array{constructor(e){super(e),this.fill(0)}}class m{constructor(e){if(0===e)return[];const t=h(e);this.heap=new t(e),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}}class g{constructor(e={}){const{max:t=0,ttl:n,ttlResolution:r=1,ttlAutopurge:i,updateAgeOnGet:o,updateAgeOnHas:c,allowStale:p,dispose:f,disposeAfter:y,noDisposeOnSet:_,noUpdateTTL:v,maxSize:b=0,sizeCalculation:E,fetchMethod:T,fetchContext:w,noDeleteOnFetchRejection:S,noDeleteOnStaleGet:x}=e,{length:C,maxAge:I,stale:A}=e instanceof g?{}:e;if(0!==t&&!d(t))throw new TypeError("max option must be a nonnegative integer");const k=t?h(t):Array;if(!k)throw new Error("invalid max value: "+t);if(this.max=t,this.maxSize=b,this.sizeCalculation=E||C,this.sizeCalculation){if(!this.maxSize)throw new TypeError("cannot set sizeCalculation without setting maxSize");if("function"!=typeof this.sizeCalculation)throw new TypeError("sizeCalculation set to non-function")}if(this.fetchMethod=T||null,this.fetchMethod&&"function"!=typeof this.fetchMethod)throw new TypeError("fetchMethod must be a function if specified");if(this.fetchContext=w,!this.fetchMethod&&void 0!==w)throw new TypeError("cannot set fetchContext without fetchMethod");if(this.keyMap=new Map,this.keyList=new Array(t).fill(null),this.valList=new Array(t).fill(null),this.next=new k(t),this.prev=new k(t),this.head=0,this.tail=0,this.free=new m(t),this.initialFill=1,this.size=0,"function"==typeof f&&(this.dispose=f),"function"==typeof y?(this.disposeAfter=y,this.disposed=[]):(this.disposeAfter=null,this.disposed=null),this.noDisposeOnSet=!!_,this.noUpdateTTL=!!v,this.noDeleteOnFetchRejection=!!S,0!==this.maxSize){if(!d(this.maxSize))throw new TypeError("maxSize must be a positive integer if specified");this.initializeSizeTracking()}if(this.allowStale=!!p||!!A,this.noDeleteOnStaleGet=!!x,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!c,this.ttlResolution=d(r)||0===r?r:1,this.ttlAutopurge=!!i,this.ttl=n||I||0,this.ttl){if(!d(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.initializeTTLTracking()}if(0===this.max&&0===this.ttl&&0===this.maxSize)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.max&&!this.maxSize){const e="LRU_CACHE_UNBOUNDED";u(e)&&(s.add(e),l("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",e,g))}A&&a("stale","allowStale"),I&&a("maxAge","ttl"),C&&a("length","sizeCalculation")}getRemainingTTL(e){return this.has(e,{updateAgeOnHas:!1})?1/0:0}initializeTTLTracking(){this.ttls=new f(this.max),this.starts=new f(this.max),this.setItemTTL=(e,n,r=t.now())=>{if(this.starts[e]=0!==n?r:0,this.ttls[e]=n,0!==n&&this.ttlAutopurge){const t=setTimeout((()=>{this.isStale(e)&&this.delete(this.keyList[e])}),n+1);t.unref&&t.unref()}},this.updateItemAge=e=>{this.starts[e]=0!==this.ttls[e]?t.now():0};let e=0;const n=()=>{const n=t.now();if(this.ttlResolution>0){e=n;const t=setTimeout((()=>e=0),this.ttlResolution);t.unref&&t.unref()}return n};this.getRemainingTTL=t=>{const r=this.keyMap.get(t);return void 0===r?0:0===this.ttls[r]||0===this.starts[r]?1/0:this.starts[r]+this.ttls[r]-(e||n())},this.isStale=t=>0!==this.ttls[t]&&0!==this.starts[t]&&(e||n())-this.starts[t]>this.ttls[t]}updateItemAge(e){}setItemTTL(e,t,n){}isStale(e){return!1}initializeSizeTracking(){this.calculatedSize=0,this.sizes=new f(this.max),this.removeItemSize=e=>{this.calculatedSize-=this.sizes[e],this.sizes[e]=0},this.requireSize=(e,t,n,r)=>{if(!d(n)){if(!r)throw new TypeError("invalid size value (must be positive integer)");if("function"!=typeof r)throw new TypeError("sizeCalculation must be a function");if(n=r(t,e),!d(n))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}return n},this.addItemSize=(e,t)=>{this.sizes[e]=t;const n=this.maxSize-this.sizes[e];for(;this.calculatedSize>n;)this.evict(!0);this.calculatedSize+=this.sizes[e]}}removeItemSize(e){}addItemSize(e,t){}requireSize(e,t,n,r){if(n||r)throw new TypeError("cannot set size without setting maxSize on cache")}*indexes({allowStale:e=this.allowStale}={}){if(this.size)for(let t=this.tail;this.isValidIndex(t)&&(!e&&this.isStale(t)||(yield t),t!==this.head);)t=this.prev[t]}*rindexes({allowStale:e=this.allowStale}={}){if(this.size)for(let t=this.head;this.isValidIndex(t)&&(!e&&this.isStale(t)||(yield t),t!==this.tail);)t=this.next[t]}isValidIndex(e){return this.keyMap.get(this.keyList[e])===e}*entries(){for(const e of this.indexes())yield[this.keyList[e],this.valList[e]]}*rentries(){for(const e of this.rindexes())yield[this.keyList[e],this.valList[e]]}*keys(){for(const e of this.indexes())yield this.keyList[e]}*rkeys(){for(const e of this.rindexes())yield this.keyList[e]}*values(){for(const e of this.indexes())yield this.valList[e]}*rvalues(){for(const e of this.rindexes())yield this.valList[e]}[Symbol.iterator](){return this.entries()}find(e,t={}){for(const n of this.indexes())if(e(this.valList[n],this.keyList[n],this))return this.get(this.keyList[n],t)}forEach(e,t=this){for(const n of this.indexes())e.call(t,this.valList[n],this.keyList[n],this)}rforEach(e,t=this){for(const n of this.rindexes())e.call(t,this.valList[n],this.keyList[n],this)}get prune(){return c("prune","purgeStale"),this.purgeStale}purgeStale(){let e=!1;for(const t of this.rindexes({allowStale:!0}))this.isStale(t)&&(this.delete(this.keyList[t]),e=!0);return e}dump(){const e=[];for(const n of this.indexes({allowStale:!0})){const r=this.keyList[n],i=this.valList[n],o={value:this.isBackgroundFetch(i)?i.__staleWhileFetching:i};if(this.ttls){o.ttl=this.ttls[n];const e=t.now()-this.starts[n];o.start=Math.floor(Date.now()-e)}this.sizes&&(o.size=this.sizes[n]),e.unshift([r,o])}return e}load(e){this.clear();for(const[n,r]of e){if(r.start){const e=Date.now()-r.start;r.start=t.now()-e}this.set(n,r.value,r)}}dispose(e,t,n){}set(e,t,{ttl:n=this.ttl,start:r,noDisposeOnSet:i=this.noDisposeOnSet,size:o=0,sizeCalculation:s=this.sizeCalculation,noUpdateTTL:a=this.noUpdateTTL}={}){if(o=this.requireSize(e,t,o,s),this.maxSize&&o>this.maxSize)return this;let c=0===this.size?void 0:this.keyMap.get(e);if(void 0===c)c=this.newIndex(),this.keyList[c]=e,this.valList[c]=t,this.keyMap.set(e,c),this.next[this.tail]=c,this.prev[c]=this.tail,this.tail=c,this.size++,this.addItemSize(c,o),a=!1;else{const n=this.valList[c];t!==n&&(this.isBackgroundFetch(n)?n.__abortController.abort():i||(this.dispose(n,e,"set"),this.disposeAfter&&this.disposed.push([n,e,"set"])),this.removeItemSize(c),this.valList[c]=t,this.addItemSize(c,o)),this.moveToTail(c)}if(0===n||0!==this.ttl||this.ttls||this.initializeTTLTracking(),a||this.setItemTTL(c,n,r),this.disposeAfter)for(;this.disposed.length;)this.disposeAfter(...this.disposed.shift());return this}newIndex(){return 0===this.size?this.tail:this.size===this.max&&0!==this.max?this.evict(!1):0!==this.free.length?this.free.pop():this.initialFill++}pop(){if(this.size){const e=this.valList[this.head];return this.evict(!0),e}}evict(e){const t=this.head,n=this.keyList[t],r=this.valList[t];return this.isBackgroundFetch(r)?r.__abortController.abort():(this.dispose(r,n,"evict"),this.disposeAfter&&this.disposed.push([r,n,"evict"])),this.removeItemSize(t),e&&(this.keyList[t]=null,this.valList[t]=null,this.free.push(t)),this.head=this.next[t],this.keyMap.delete(n),this.size--,t}has(e,{updateAgeOnHas:t=this.updateAgeOnHas}={}){const n=this.keyMap.get(e);return void 0!==n&&!this.isStale(n)&&(t&&this.updateItemAge(n),!0)}peek(e,{allowStale:t=this.allowStale}={}){const n=this.keyMap.get(e);if(void 0!==n&&(t||!this.isStale(n))){const e=this.valList[n];return this.isBackgroundFetch(e)?e.__staleWhileFetching:e}}backgroundFetch(e,t,r,i){const o=void 0===t?void 0:this.valList[t];if(this.isBackgroundFetch(o))return o;const s=new n,a={signal:s.signal,options:r,context:i},c=new Promise((t=>t(this.fetchMethod(e,o,a)))).then((t=>(s.signal.aborted||this.set(e,t,a.options),t)),(n=>{if(this.valList[t]===c&&(r.noDeleteOnFetchRejection&&void 0!==c.__staleWhileFetching?this.valList[t]=c.__staleWhileFetching:this.delete(e)),c.__returned===c)throw n}));return c.__abortController=s,c.__staleWhileFetching=o,c.__returned=null,void 0===t?(this.set(e,c,a.options),t=this.keyMap.get(e)):this.valList[t]=c,c}isBackgroundFetch(e){return e&&"object"==typeof e&&"function"==typeof e.then&&Object.prototype.hasOwnProperty.call(e,"__staleWhileFetching")&&Object.prototype.hasOwnProperty.call(e,"__returned")&&(e.__returned===e||null===e.__returned)}async fetch(e,{allowStale:t=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:i=this.ttl,noDisposeOnSet:o=this.noDisposeOnSet,size:s=0,sizeCalculation:a=this.sizeCalculation,noUpdateTTL:c=this.noUpdateTTL,noDeleteOnFetchRejection:l=this.noDeleteOnFetchRejection,fetchContext:u=this.fetchContext,forceRefresh:p=!1}={}){if(!this.fetchMethod)return this.get(e,{allowStale:t,updateAgeOnGet:n,noDeleteOnStaleGet:r});const d={allowStale:t,updateAgeOnGet:n,noDeleteOnStaleGet:r,ttl:i,noDisposeOnSet:o,size:s,sizeCalculation:a,noUpdateTTL:c,noDeleteOnFetchRejection:l};let h=this.keyMap.get(e);if(void 0===h){const t=this.backgroundFetch(e,h,d,u);return t.__returned=t}{const r=this.valList[h];if(this.isBackgroundFetch(r))return t&&void 0!==r.__staleWhileFetching?r.__staleWhileFetching:r.__returned=r;if(!p&&!this.isStale(h))return this.moveToTail(h),n&&this.updateItemAge(h),r;const i=this.backgroundFetch(e,h,d,u);return t&&void 0!==i.__staleWhileFetching?i.__staleWhileFetching:i.__returned=i}}get(e,{allowStale:t=this.allowStale,updateAgeOnGet:n=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet}={}){const i=this.keyMap.get(e);if(void 0!==i){const o=this.valList[i],s=this.isBackgroundFetch(o);if(this.isStale(i))return s?t?o.__staleWhileFetching:void 0:(r||this.delete(e),t?o:void 0);if(s)return;return this.moveToTail(i),n&&this.updateItemAge(i),o}}connect(e,t){this.prev[t]=e,this.next[e]=t}moveToTail(e){e!==this.tail&&(e===this.head?this.head=this.next[e]:this.connect(this.prev[e],this.next[e]),this.connect(this.tail,e),this.tail=e)}get del(){return c("del","delete"),this.delete}delete(e){let t=!1;if(0!==this.size){const n=this.keyMap.get(e);if(void 0!==n)if(t=!0,1===this.size)this.clear();else{this.removeItemSize(n);const t=this.valList[n];this.isBackgroundFetch(t)?t.__abortController.abort():(this.dispose(t,e,"delete"),this.disposeAfter&&this.disposed.push([t,e,"delete"])),this.keyMap.delete(e),this.keyList[n]=null,this.valList[n]=null,n===this.tail?this.tail=this.prev[n]:n===this.head?this.head=this.next[n]:(this.next[this.prev[n]]=this.next[n],this.prev[this.next[n]]=this.prev[n]),this.size--,this.free.push(n)}}if(this.disposed)for(;this.disposed.length;)this.disposeAfter(...this.disposed.shift());return t}clear(){for(const e of this.rindexes({allowStale:!0})){const t=this.valList[e];if(this.isBackgroundFetch(t))t.__abortController.abort();else{const n=this.keyList[e];this.dispose(t,n,"delete"),this.disposeAfter&&this.disposed.push([t,n,"delete"])}}if(this.keyMap.clear(),this.valList.fill(null),this.keyList.fill(null),this.ttls&&(this.ttls.fill(0),this.starts.fill(0)),this.sizes&&this.sizes.fill(0),this.head=0,this.tail=0,this.initialFill=1,this.free.length=0,this.calculatedSize=0,this.size=0,this.disposed)for(;this.disposed.length;)this.disposeAfter(...this.disposed.shift())}get reset(){return c("reset","clear"),this.clear}get length(){return((e,t)=>{const n=`LRU_CACHE_PROPERTY_${e}`;if(u(n)){const{prototype:t}=g,{get:r}=Object.getOwnPropertyDescriptor(t,e);p(n,`${e} property`,"cache.size",r)}})("length"),this.size}static get AbortController(){return n}static get AbortSignal(){return o}}e.exports=g},86029:(e,t,n)=>{"use strict";const{randomBytes:r}=n(6113),{Readable:i}=n(12781),o=e=>"object"==typeof e&&0===["arrayBuffer","stream","text","slice","constructor"].map((t=>typeof e[t])).filter((e=>"function"!==e)).length&&"string"==typeof e.type&&"number"==typeof e.size&&/^(Blob|File)$/.test(e[Symbol.toStringTag]),s=e=>`--${e}--\r\n\r\n`,a=(e,t,n)=>{let r="";return r+=`--${e}\r\n`,r+=`Content-Disposition: form-data; name="${t}"`,o(n)&&(r+=`; filename="${n.name}"\r\n`,r+=`Content-Type: ${n.type||"application/octet-stream"}`),`${r}\r\n\r\n`};e.exports={isFormData:e=>null!=e&&"object"==typeof e&&0===["append","delete","get","getAll","has","set","keys","values","entries","constructor"].map((t=>typeof e[t])).filter((e=>"function"!==e)).length&&"FormData"===e[Symbol.toStringTag],FormDataSerializer:class{constructor(e){this.fd=e,this.boundary=r(8).toString("hex")}length(){return void 0===this._length&&(this._length=((e,t)=>{let n=0;for(const[r,i]of e)n+=Buffer.byteLength(a(t,r,i)),n+=o(i)?i.size:Buffer.byteLength(String(i)),n+=Buffer.byteLength("\r\n");return n+=Buffer.byteLength(s(t)),n})(this.fd,this.boundary)),this._length}contentType(){return`multipart/form-data; boundary=${this.boundary}`}stream(){return i.from(async function*(e,t){for(const[n,r]of e)yield a(t,n,r),o(r)?yield*r.stream():yield r,yield"\r\n";yield s(t)}(this.fd,this.boundary))}}}},45591:(e,t,n)=>{"use strict";const{constants:{MAX_LENGTH:r}}=n(14300),{pipeline:i,PassThrough:o}=n(12781),{promisify:s}=n(73837),{createGunzip:a,createInflate:c,createBrotliDecompress:l,constants:{Z_SYNC_FLUSH:u}}=n(59796),p=n(41241)("helix-fetch:utils"),d=s(i),h=(e,t)=>{if(Buffer.isBuffer(e))return e.length;switch(typeof e){case"string":return 2*e.length;case"boolean":return 4;case"number":return 8;case"symbol":return Symbol.keyFor(e)?2*Symbol.keyFor(e).length:2*(e.toString().length-8);case"object":return Array.isArray(e)?f(e,t):m(e,t);default:return 0}},f=(e,t)=>(t.add(e),e.map((e=>t.has(e)?0:h(e,t))).reduce(((e,t)=>e+t),0)),m=(e,t)=>{if(null==e)return 0;t.add(e);let n=0;const r=[];for(const t in e)r.push(t);return r.push(...Object.getOwnPropertySymbols(e)),r.forEach((r=>{if(n+=h(r,t),"object"==typeof e[r]&&null!==e[r]){if(t.has(e[r]))return;t.add(e[r])}n+=h(e[r],t)})),n};e.exports={decodeStream:(e,t,n,r)=>{if(!((e,t)=>204!==e&&304!==e&&0!=+t["content-length"]&&/^\s*(?:(x-)?deflate|(x-)?gzip|br)\s*$/.test(t["content-encoding"]))(e,t))return n;const o=e=>{e&&(p(`encountered error while decoding stream: ${e}`),r(e))};switch(t["content-encoding"].trim()){case"gzip":case"x-gzip":return i(n,a({flush:u,finishFlush:u}),o);case"deflate":case"x-deflate":return i(n,c(),o);case"br":return i(n,l(),o);default:return n}},isPlainObject:e=>{if(!e||"object"!=typeof e)return!1;if("[object Object]"!==Object.prototype.toString.call(e))return!1;if(null===Object.getPrototypeOf(e))return!0;let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t},sizeof:e=>h(e,new WeakSet),streamToBuffer:async e=>{const t=new o;let n=0;const i=[];return t.on("data",(e=>{if(n+e.length>r)throw new Error("Buffer.constants.MAX_SIZE exceeded");i.push(e),n+=e.length})),await d(e,t),Buffer.concat(i,n)}}},75899:e=>{"use strict";class t extends Error{get name(){return this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}}e.exports={RequestAbortedError:t}},84751:(e,t,n)=>{"use strict";const r=n(13685),i=n(95687),{Readable:o}=n(12781),s=n(41241)("helix-fetch:h1"),{RequestAbortedError:a}=n(75899),{decodeStream:c}=n(45591);e.exports={request:async(e,t,n)=>{const{request:l}="https:"===t.protocol?i:r,u=((e,t)=>{const{h1:n,options:{h1:o,rejectUnauthorized:s}}=e;return"https:"===t?n.httpsAgent?n.httpsAgent:o||"boolean"==typeof s?(n.httpsAgent=new i.Agent("boolean"==typeof s?{...o||{},rejectUnauthorized:s}:o),n.httpsAgent):void 0:n.httpAgent?n.httpAgent:o?(n.httpAgent=new r.Agent(o),n.httpAgent):void 0})(e,t.protocol),p={...n,agent:u},{socket:d,body:h}=p;return d&&(delete p.socket,d.assigned||(d.assigned=!0,u?p.agent=new Proxy(u,{get:(e,t)=>"createConnection"!==t||d.inUse?e[t]:(e,t)=>{s(`agent reusing socket #${d.id} (${d.servername})`),d.inUse=!0,t(null,d)}}):p.createConnection=(e,t)=>{s(`reusing socket #${d.id} (${d.servername})`),d.inUse=!0,t(null,d)})),new Promise(((e,n)=>{let r;s(`${p.method} ${t.href}`);const{signal:i}=p,u=()=>{i.removeEventListener("abort",u),d&&!d.inUse&&(s(`discarding redundant socket used for ALPN: #${d.id} ${d.servername}`),d.destroy()),n(new a),r&&r.abort()};if(i){if(i.aborted)return void n(new a);i.addEventListener("abort",u)}r=l(t,p),r.once("response",(t=>{i&&i.removeEventListener("abort",u),d&&!d.inUse&&(s(`discarding redundant socket used for ALPN: #${d.id} ${d.servername}`),d.destroy()),e(((e,t,n)=>{const{statusCode:r,statusMessage:i,httpVersion:o,httpVersionMajor:s,httpVersionMinor:a,headers:l}=e,u=t?c(r,l,e,n):e;return{statusCode:r,statusText:i,httpVersion:o,httpVersionMajor:s,httpVersionMinor:a,headers:l,readable:u,decoded:!(!t||u===e)}})(t,p.decode,n))})),r.once("error",(e=>{i&&i.removeEventListener("abort",u),d&&!d.inUse&&(s(`discarding redundant socket used for ALPN: #${d.id} ${d.servername}`),d.destroy()),r.aborted||(s(`${p.method} ${t.href} failed with: ${e.message}`),r.abort(),n(e))})),h instanceof o?h.pipe(r):(h&&r.write(h),r.end())}))},setupContext:e=>{e.h1={}},resetContext:async({h1:e})=>{e.httpAgent&&(s("resetContext: destroying httpAgent"),e.httpAgent.destroy(),delete e.httpAgent),e.httpsAgent&&(s("resetContext: destroying httpsAgent"),e.httpsAgent.destroy(),delete e.httpsAgent)}}},57652:(e,t,n)=>{"use strict";const{connect:r,constants:i}=n(85158),{Readable:o}=n(12781),s=n(41241)("helix-fetch:h2"),{RequestAbortedError:a}=n(75899),{decodeStream:c}=n(45591),{NGHTTP2_CANCEL:l}=i,u=3e5,p=5e3,d=(e,t,n,r=(()=>{}))=>{const i={...e},o=i[":status"];delete i[":status"];const s=n?c(o,e,t,r):t;return{statusCode:o,statusText:"",httpVersion:"2.0",httpVersionMajor:2,httpVersionMinor:0,headers:i,readable:s,decoded:!(!n||s===t)}};e.exports={request:async(e,t,n)=>{const{origin:i,pathname:c,search:h,hash:f}=t,m=`${c}${h}${f}`,{options:{h2:g={}},h2:{sessionCache:y}}=e,{idleSessionTimeout:_=u,pushPromiseHandler:v,pushHandler:b}=g,E={...n},{method:T,headers:w,socket:S,body:x,decode:C}=E;return S&&delete E.socket,w.host&&(w[":authority"]=w.host,delete w.host),new Promise(((n,c)=>{let u,h=y[i];if(!h||h.closed||h.destroyed){const t=!(!1===e.options.rejectUnauthorized||!1===g.rejectUnauthorized),n={...g,rejectUnauthorized:t};S&&!S.inUse&&(n.createConnection=()=>(s(`reusing socket #${S.id} (${S.servername})`),S.inUse=!0,S));const o=!(!v&&!b);h=r(i,{...n,settings:{enablePush:o}}),h.setMaxListeners(1e3),h.setTimeout(_,(()=>{s(`closing session ${i} after ${_} ms of inactivity`),h.close()})),h.once("connect",(()=>{s(`session ${i} established`),s(`caching session ${i}`),y[i]=h})),h.on("localSettings",(e=>{s(`session ${i} localSettings: ${JSON.stringify(e)}`)})),h.on("remoteSettings",(e=>{s(`session ${i} remoteSettings: ${JSON.stringify(e)}`)})),h.once("close",(()=>{s(`session ${i} closed`),y[i]===h&&(s(`discarding cached session ${i}`),delete y[i])})),h.once("error",(e=>{s(`session ${i} encountered error: ${e}`),y[i]===h&&(s(`discarding cached session ${i}`),delete y[i])})),h.on("frameError",((e,t,n)=>{s(`session ${i} encountered frameError: type: ${e}, code: ${t}, id: ${n}`)})),h.once("goaway",((e,t,n)=>{s(`session ${i} received GOAWAY frame: errorCode: ${e}, lastStreamID: ${t}, opaqueData: ${n?n.toString():void 0}`)})),h.on("stream",((t,n,r)=>{((e,t,n,r,i,o)=>{const{options:{h2:{pushPromiseHandler:a,pushHandler:c,pushedStreamIdleTimeout:u=p}}}=e,h=i[":path"],f=`${t}${h}`;s(`received PUSH_PROMISE: ${f}, stream #${r.id}, headers: ${JSON.stringify(i)}, flags: ${o}`),a&&a(f,i,(()=>{r.close(l)})),r.on("push",((e,o)=>{s(`received push headers for ${t}${h}, stream #${r.id}, headers: ${JSON.stringify(e)}, flags: ${o}`),r.setTimeout(u,(()=>{s(`closing pushed stream #${r.id} after ${u} ms of inactivity`),r.close(l)})),c&&c(f,i,d(e,r,n))})),r.on("aborted",(()=>{s(`pushed stream #${r.id} aborted`)})),r.on("error",(e=>{s(`pushed stream #${r.id} encountered error: ${e}`)})),r.on("frameError",((e,t,n)=>{s(`pushed stream #${r.id} encountered frameError: type: ${e}, code: ${t}, id: ${n}`)}))})(e,i,C,t,n,r)}))}else S&&S.id!==h.socket.id&&!S.inUse&&(s(`discarding redundant socket used for ALPN: #${S.id} ${S.servername}`),S.destroy());s(`${T} ${t.host}${m}`);const{signal:f}=E,I=()=>{f.removeEventListener("abort",I),c(new a),u&&u.close(l)};if(f){if(f.aborted)return void c(new a);f.addEventListener("abort",I)}const A=e=>{s(`session ${i} encountered error during ${E.method} ${t.href}: ${e}`),c(e)};h.once("error",A),u=h.request({":method":T,":path":m,...w}),u.once("response",(e=>{h.off("error",A),f&&f.removeEventListener("abort",I),n(d(e,u,E.decode,c))})),u.once("error",(e=>{h.off("error",A),f&&f.removeEventListener("abort",I),u.rstCode!==l&&(s(`${E.method} ${t.href} failed with: ${e.message}`),u.close(l),c(e))})),u.once("frameError",((e,n,r)=>{h.off("error",A),s(`encountered frameError during ${E.method} ${t.href}: type: ${e}, code: ${n}, id: ${r}`)})),u.on("push",((e,t)=>{s(`received 'push' event: headers: ${JSON.stringify(e)}, flags: ${t}`)})),x instanceof o?x.pipe(u):(x&&u.write(x),u.end())}))},setupContext:e=>{e.h2={sessionCache:{}}},resetContext:async({h2:e})=>Promise.all(Object.values(e.sessionCache).map((e=>new Promise((t=>{e.on("close",t),s(`resetContext: destroying session (socket #${e.socket&&e.socket.id}, ${e.socket&&e.socket.servername})`),e.destroy()})))))}},44673:(e,t,n)=>{"use strict";const r=n(41241)("helix-fetch:core"),{request:i,setupContext:o,resetContext:s,RequestAbortedError:a,ALPN_HTTP2:c,ALPN_HTTP2C:l,ALPN_HTTP1_1:u,ALPN_HTTP1_0:p}=n(56633);class d{constructor(e){this.options={...e||{}},o(this)}api(){return{request:async(e,t)=>this.request(e,t),context:(e={})=>new d(e).api(),setCA:e=>this.setCA(e),reset:async()=>this.reset(),RequestAbortedError:a,ALPN_HTTP2:c,ALPN_HTTP2C:l,ALPN_HTTP1_1:u,ALPN_HTTP1_0:p}}async request(e,t){return i(this,e,t)}setCA(e){this.options.ca=e}async reset(){return r("resetting context"),s(this)}}e.exports=(new d).api()},93430:(e,t,n)=>{"use strict";const{EventEmitter:r}=n(82361);e.exports=()=>{const e={},t=new r;return t.setMaxListeners(0),{acquire:n=>new Promise((r=>{if(!e[n])return e[n]=!0,void r();const i=o=>{e[n]||(e[n]=!0,t.removeListener(n,i),r(o))};t.on(n,i)})),release:(n,r)=>{Reflect.deleteProperty(e,n),setImmediate((()=>t.emit(n,r)))}}}},56633:(e,t,n)=>{"use strict";const{Readable:r}=n(12781),i=n(24404),{types:{isAnyArrayBuffer:o}}=n(73837),s=n(39941),a=n(41241)("helix-fetch:core"),{RequestAbortedError:c}=n(75899),l=n(84751),u=n(57652),p=n(93430),{isPlainObject:d}=n(45591),{isFormData:h,FormDataSerializer:f}=n(86029),{version:m}=n(93180),g="h2",y="h2c",_="http/1.0",v="http/1.1",b=100,E=36e5,T=[g,v,_],w=`helix-fetch/${m}`,S={method:"GET",compress:!0,decode:!0};let x=0;const C=p(),I=(e,t)=>new Promise(((n,r)=>{const{signal:o}=t;let s;const l=()=>{o.removeEventListener("abort",l);const e=new c;r(e),s&&s.destroy(e)};if(o){if(o.aborted)return void r(new c);o.addEventListener("abort",l)}const u=+e.port||443,p=t=>{o&&o.removeEventListener("abort",l),t instanceof c||(a(`connecting to ${e.hostname}:${u} failed with: ${t.message}`),r(t))};s=i.connect(u,e.hostname,t),s.once("secureConnect",(()=>{o&&o.removeEventListener("abort",l),s.off("error",p),x+=1,s.id=x,s.secureConnecting=!1,a(`established TLS connection: #${s.id} (${s.servername})`),n(s)})),s.once("error",p)}));e.exports={request:async(e,t,n)=>{const i=new URL(t),s={...S,...n||{}};let c;if("string"==typeof s.method&&(s.method=s.method.toUpperCase()),s.headers=(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.toLowerCase()]=e[n]})),t})(s.headers||{}),void 0===s.headers.host&&(s.headers.host=i.host),e.userAgent&&void 0===s.headers["user-agent"]&&(s.headers["user-agent"]=e.userAgent),s.body instanceof URLSearchParams)c="application/x-www-form-urlencoded; charset=utf-8",s.body=s.body.toString();else if(h(s.body)){const e=new f(s.body);c=e.contentType(),s.body=e.stream(),void 0===s.headers["transfer-encoding"]&&void 0===s.headers["content-length"]&&(s.headers["content-length"]=String(e.length()))}else"string"==typeof s.body||s.body instanceof String?c="text/plain; charset=utf-8":d(s.body)?(s.body=JSON.stringify(s.body),c="application/json"):o(s.body)&&(s.body=Buffer.from(s.body));void 0===s.headers["content-type"]&&void 0!==c&&(s.headers["content-type"]=c),null!=s.body&&(s.body instanceof r||("string"==typeof s.body||s.body instanceof String||Buffer.isBuffer(s.body)||(s.body=String(s.body)),void 0===s.headers["transfer-encoding"]&&void 0===s.headers["content-length"]&&(s.headers["content-length"]=String(Buffer.isBuffer(s.body)?s.body.length:Buffer.byteLength(s.body,"utf-8"))))),void 0===s.headers.accept&&(s.headers.accept="*/*"),null==s.body&&["POST","PUT"].includes(s.method)&&(s.headers["content-length"]="0"),s.compress&&void 0===s.headers["accept-encoding"]&&(s.headers["accept-encoding"]="gzip,deflate,br");const{signal:p}=s,{protocol:m,socket:b=null}=e.socketFactory?await(async(e,t,n,r)=>{const i="https:"===t.protocol;let o;o=t.port?t.port:i?443:80;const s={...n,host:t.host,port:o},a=await e(s);if(i){const e={...s,ALPNProtocols:r};e.socket=a;const n=await I(t,e);return{protocol:n.alpnProtocol||v,socket:n}}return{protocol:a.alpnProtocol||v,socket:a}})(e.socketFactory,i,s,e.alpnProtocols):await(async(e,t,n)=>{const r=`${t.protocol}//${t.host}`;let i=e.alpnCache.get(r);if(i)return{protocol:i};switch(t.protocol){case"http:":return i=v,e.alpnCache.set(r,i),{protocol:i};case"http2:":return i=y,e.alpnCache.set(r,i),{protocol:i};case"https:":break;default:throw new TypeError(`unsupported protocol: ${t.protocol}`)}const{options:{rejectUnauthorized:o,h1:s={},h2:a={}}}=e,c=!(!1===o||!1===s.rejectUnauthorized||!1===a.rejectUnauthorized),l={servername:t.hostname,ALPNProtocols:e.alpnProtocols,signal:n,rejectUnauthorized:c};e.options.ca&&(l.ca=e.options.ca);const u=await(async(e,t)=>{let n=await C.acquire(e.origin);try{return n||(n=await I(e,t)),n}finally{C.release(e.origin,n)}})(t,l);return i=u.alpnProtocol,i||(i=v),e.alpnCache.set(r,i),{protocol:i,socket:u}})(e,i,p);switch(a(`${i.host} -> ${m}`),m){case g:try{return await u.request(e,i,b?{...s,socket:b}:s)}catch(t){const{code:n,message:r}=t;throw"ERR_HTTP2_ERROR"===n&&"Protocol error"===r&&e.alpnCache.delete(`${i.protocol}//${i.host}`),t}case y:return u.request(e,new URL(`http://${i.host}${i.pathname}${i.hash}${i.search}`),b?{...s,socket:b}:s);case _:case v:return l.request(e,i,b?{...s,socket:b}:s);default:throw new TypeError(`unsupported protocol: ${m}`)}},setupContext:e=>{const{options:{alpnProtocols:t=T,alpnCacheTTL:n=E,alpnCacheSize:r=b,userAgent:i=w,socketFactory:o}}=e;e.alpnProtocols=t,e.alpnCache=new s({max:r,ttl:n}),e.userAgent=i,e.socketFactory=o,l.setupContext(e),u.setupContext(e)},resetContext:async e=>(e.alpnCache.clear(),Promise.all([l.resetContext(e),u.resetContext(e)])),RequestAbortedError:c,ALPN_HTTP2:g,ALPN_HTTP2C:y,ALPN_HTTP1_1:v,ALPN_HTTP1_0:_}},64346:(e,t,n)=>{"use strict";const{EventEmitter:r}=n(82361),i=Symbol("AbortSignal internals");class o{constructor(){this[i]={eventEmitter:new r,onabort:null,aborted:!1}}get aborted(){return this[i].aborted}get onabort(){return this[i].onabort}set onabort(e){this[i].onabort=e}get[Symbol.toStringTag](){return this.constructor.name}removeEventListener(e,t){this[i].eventEmitter.removeListener(e,t)}addEventListener(e,t){this[i].eventEmitter.on(e,t)}dispatchEvent(e){const t={type:e,target:this},n=`on${e}`;"function"==typeof this[i][n]&&this[n](t),this[i].eventEmitter.emit(e,t)}fire(){this[i].aborted=!0,this.dispatchEvent("abort")}}Object.defineProperties(o.prototype,{addEventListener:{enumerable:!0},removeEventListener:{enumerable:!0},dispatchEvent:{enumerable:!0},aborted:{enumerable:!0},onabort:{enumerable:!0}});class s extends o{constructor(e){if(!Number.isInteger(e))throw new TypeError("Expected an integer, got "+typeof e);super(),this[i].timerId=setTimeout((()=>{this.fire()}),e)}clear(){clearTimeout(this[i].timerId)}}Object.defineProperties(s.prototype,{clear:{enumerable:!0}});const a=Symbol("AbortController internals");class c{constructor(){this[a]={signal:new o}}get signal(){return this[a].signal}get[Symbol.toStringTag](){return this.constructor.name}abort(){this[a].signal.aborted||this[a].signal.fire()}}Object.defineProperties(c.prototype,{signal:{enumerable:!0},abort:{enumerable:!0}}),e.exports={AbortController:c,AbortSignal:o,TimeoutSignal:s}},54214:(e,t,n)=>{"use strict";const{PassThrough:r,Readable:i}=n(12781),{types:{isAnyArrayBuffer:o}}=n(73837),{FetchError:s,FetchBaseError:a}=n(2501),{streamToBuffer:c}=n(45591),l=Buffer.alloc(0),u=Symbol("Body internals"),p=async e=>{if(e[u].disturbed)throw new TypeError("Already read");if(e[u].error)throw new TypeError(`Stream had error: ${e[u].error.message}`);e[u].disturbed=!0;const{stream:t}=e[u];return null===t?l:c(t)};class d{constructor(e){let t;t=null==e?null:e instanceof URLSearchParams?i.from(e.toString()):e instanceof i?e:Buffer.isBuffer(e)?i.from(e):o(e)?i.from(Buffer.from(e)):"string"==typeof e||e instanceof String?i.from(e):i.from(String(e)),this[u]={stream:t,disturbed:!1,error:null},e instanceof i&&t.on("error",(e=>{const t=e instanceof a?e:new s(`Invalid response body while trying to fetch ${this.url}: ${e.message}`,"system",e);this[u].error=t}))}get body(){return this[u].stream}get bodyUsed(){return this[u].disturbed}async buffer(){return p(this)}async arrayBuffer(){return(e=await this.buffer()).buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);var e}async text(){return(await p(this)).toString()}async json(){return JSON.parse(await this.text())}}Object.defineProperties(d.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}}),e.exports={Body:d,cloneStream:e=>{if(e[u].disturbed)throw new TypeError("Cannot clone: already read");const{stream:t}=e[u];let n=t;if(t instanceof i){n=new r;const i=new r;t.pipe(n),t.pipe(i),e[u].stream=i}return n},guessContentType:e=>null===e?null:"string"==typeof e?"text/plain; charset=utf-8":e instanceof URLSearchParams?"application/x-www-form-urlencoded; charset=utf-8":Buffer.isBuffer(e)||o(e)||e instanceof i?null:"text/plain; charset=utf-8"}},98941:(e,t,n)=>{"use strict";const{Readable:r}=n(12781),{Headers:i}=n(48226),{Response:o}=n(28327),s=Symbol("CacheableResponse internals");class a extends o{constructor(e,t){super(e,t);const n=new i(t.headers);this[s]={headers:n,bufferedBody:e}}get headers(){return this[s].headers}set headers(e){if(!(e instanceof i))throw new TypeError("instance of Headers expected");this[s].headers=e}get body(){return r.from(this[s].bufferedBody)}get bodyUsed(){return!1}async buffer(){return this[s].bufferedBody}async arrayBuffer(){return(e=this[s].bufferedBody).buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);var e}async text(){return this[s].bufferedBody.toString()}async json(){return JSON.parse(await this.text())}clone(){const{url:e,status:t,statusText:n,headers:r,httpVersion:i,decoded:o,counter:c}=this;return new a(this[s].bufferedBody,{url:e,status:t,statusText:n,headers:r,httpVersion:i,decoded:o,counter:c})}get[Symbol.toStringTag](){return this.constructor.name}}e.exports={cacheableResponse:async e=>{const t=await e.buffer(),{url:n,status:r,statusText:i,headers:o,httpVersion:s,decoded:c,counter:l}=e;return new a(t,{url:n,status:r,statusText:i,headers:o,httpVersion:s,decoded:c,counter:l})}}},2501:e=>{"use strict";class t extends Error{constructor(e,t){super(e),this.type=t}get name(){return this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}}e.exports={FetchBaseError:t,FetchError:class extends t{constructor(e,t,n){super(e,t),n&&(this.code=this.errno=n.code,this.erroredSysCall=n.syscall)}},AbortError:class extends t{constructor(e,t="aborted"){super(e,t)}}}},48226:(e,t,n)=>{"use strict";const{validateHeaderName:r,validateHeaderValue:i}=n(13685),{isPlainObject:o}=n(45591),s=Symbol("Headers internals"),a=e=>{const t="string"!=typeof e?String(e):e;if("function"==typeof r)r(t);else if(!/^[\^`\-\w!#$%&'*+.|~]+$/.test(t)){const e=new TypeError(`Header name must be a valid HTTP token [${t}]`);throw Object.defineProperty(e,"code",{value:"ERR_INVALID_HTTP_TOKEN"}),e}return t.toLowerCase()},c=(e,t)=>{const n="string"!=typeof e?String(e):e;if("function"==typeof i)i(t,n);else if(/[^\t\u0020-\u007E\u0080-\u00FF]/.test(n)){const e=new TypeError(`Invalid character in header content ["${t}"]`);throw Object.defineProperty(e,"code",{value:"ERR_INVALID_CHAR"}),e}return n};class l{constructor(e={}){if(this[s]={map:new Map},e instanceof l)e.forEach(((e,t)=>{this.append(t,e)}));else if(Array.isArray(e))e.forEach((([e,t])=>{this.append(e,t)}));else if(o(e))for(const[t,n]of Object.entries(e))this.append(t,n)}set(e,t){this[s].map.set(a(e),c(t,e))}has(e){return this[s].map.has(a(e))}get(e){const t=this[s].map.get(a(e));return void 0===t?null:t}append(e,t){const n=a(e),r=c(t,e),i=this[s].map.get(n);this[s].map.set(n,i?`${i}, ${r}`:r)}delete(e){this[s].map.delete(a(e))}forEach(e,t){for(const n of this.keys())e.call(t,this.get(n),n)}keys(){return Array.from(this[s].map.keys()).sort()}*values(){for(const e of this.keys())yield this.get(e)}*entries(){for(const e of this.keys())yield[e,this.get(e)]}[Symbol.iterator](){return this.entries()}get[Symbol.toStringTag](){return this.constructor.name}plain(){return Object.fromEntries(this[s].map)}}Object.defineProperties(l.prototype,["append","delete","entries","forEach","get","has","keys","set","values"].reduce(((e,t)=>(e[t]={enumerable:!0},e)),{})),e.exports={Headers:l}},14735:(e,t,n)=>{"use strict";const{EventEmitter:r}=n(82361),{Readable:i}=n(12781),o=n(41241)("helix-fetch"),s=n(39941),{Body:a}=n(54214),{Headers:c}=n(48226),{Request:l}=n(93505),{Response:u}=n(28327),{FetchBaseError:p,FetchError:d,AbortError:h}=n(2501),{AbortController:f,AbortSignal:m,TimeoutSignal:g}=n(64346),y=n(7619),{cacheableResponse:_}=n(98941),{sizeof:v}=n(45591),{isFormData:b}=n(86029),{context:E,RequestAbortedError:T}=n(44673),w=["GET","HEAD"],S="push",x=async(e,t,n)=>{const{request:r}=e.context,o=t instanceof l&&void 0===n?t:new l(t,n),{method:s,body:a,signal:p,compress:f,decode:m,follow:g,redirect:y,init:{body:_}}=o;let v;if(p&&p.aborted){const e=new h("The operation was aborted.");throw o.init.body instanceof i&&o.init.body.destroy(e),e}try{v=await r(o.url,{...n,method:s,headers:o.headers.plain(),body:!_||_ instanceof i||b(_)?a:_,compress:f,decode:m,follow:g,redirect:y,signal:p})}catch(e){if(_ instanceof i&&_.destroy(e),e instanceof TypeError)throw e;if(e instanceof T)throw new h("The operation was aborted.");throw new d(e.message,"system",e)}const E=()=>{p.removeEventListener("abort",E);const e=new h("The operation was aborted.");o.init.body instanceof i&&o.init.body.destroy(e),v.readable.emit("error",e)};p&&p.addEventListener("abort",E);const{statusCode:w,statusText:S,httpVersion:C,headers:I,readable:A,decoded:k}=v;if([301,302,303,307,308].includes(w)){const{location:t}=I,n=null==t?null:new URL(t,o.url);switch(o.redirect){case"manual":break;case"error":throw p&&p.removeEventListener("abort",E),new d(`uri requested responds with a redirect, redirect mode is set to 'error': ${o.url}`,"no-redirect");case"follow":{if(null===n)break;if(o.counter>=o.follow)throw p&&p.removeEventListener("abort",E),new d(`maximum redirect reached at: ${o.url}`,"max-redirect");const t={headers:new c(o.headers),follow:o.follow,compress:o.compress,decode:o.decode,counter:o.counter+1,method:o.method,body:o.body,signal:o.signal};if(303!==w&&o.body&&o.init.body instanceof i)throw p&&p.removeEventListener("abort",E),new d("Cannot follow redirect with body being a readable stream","unsupported-redirect");return 303!==w&&(301!==w&&302!==w||"POST"!==o.method)||(t.method="GET",t.body=void 0,t.headers.delete("content-length")),p&&p.removeEventListener("abort",E),x(e,new l(n,t))}}}return p&&(A.once("end",(()=>{p.removeEventListener("abort",E)})),A.once("error",(()=>{p.removeEventListener("abort",E)}))),new u(A,{url:o.url,status:w,statusText:S,headers:I,httpVersion:C,decoded:k,counter:o.counter})},C=async(e,t,n)=>{if(0===e.options.maxCacheSize)return n;if(!w.includes(t.method))return n;const r=new y(t,n,{shared:!1});if(r.storable()){const i=await _(n);return e.cache.set(t.url,{policy:r,response:i},r.timeToLive()),i}return n},I=(e,t={})=>{const n=new URL(e);if("object"!=typeof t||Array.isArray(t))throw new TypeError("qs: object expected");return Object.entries(t).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>n.searchParams.append(e,t))):n.searchParams.append(e,t)})),n.href},A=e=>new g(e);class k{constructor(e){this.options={...e};const{maxCacheSize:t}=this.options;let n="number"==typeof t&&t>=0?t:104857600,i=500;0===n&&(n=1,i=1),this.cache=new s({max:i,maxSize:n,sizeCalculation:({response:e},t)=>v(e)}),this.eventEmitter=new r,this.options.h2=this.options.h2||{},void 0===this.options.h2.enablePush&&(this.options.h2.enablePush=!0);const{enablePush:o}=this.options.h2;o&&(this.options.h2.pushPromiseHandler=(e,t,n)=>{const r={...t};Object.keys(r).filter((e=>e.startsWith(":"))).forEach((e=>delete r[e])),this.pushPromiseHandler(e,r,n)},this.options.h2.pushHandler=(e,t,n)=>{const r={...t};Object.keys(r).filter((e=>e.startsWith(":"))).forEach((e=>delete r[e]));const{statusCode:i,statusText:o,httpVersion:s,headers:a,readable:c,decoded:l}=n;this.pushHandler(e,r,new u(c,{url:e,status:i,statusText:o,headers:a,httpVersion:s,decoded:l}))}),this.context=E(this.options)}api(){return{fetch:async(e,t)=>this.fetch(e,t),Body:a,Headers:c,Request:l,Response:u,AbortController:f,AbortSignal:m,FetchBaseError:p,FetchError:d,AbortError:h,context:(e={})=>new k(e).api(),setCA:e=>this.setCA(e),noCache:(e={})=>new k({...e,maxCacheSize:0}).api(),h1:(e={})=>new k({...e,alpnProtocols:[this.context.ALPN_HTTP1_1]}).api(),keepAlive:(e={})=>new k({...e,alpnProtocols:[this.context.ALPN_HTTP1_1],h1:{keepAlive:!0}}).api(),h1NoCache:(e={})=>new k({...e,maxCacheSize:0,alpnProtocols:[this.context.ALPN_HTTP1_1]}).api(),keepAliveNoCache:(e={})=>new k({...e,maxCacheSize:0,alpnProtocols:[this.context.ALPN_HTTP1_1],h1:{keepAlive:!0}}).api(),reset:async()=>this.context.reset(),onPush:e=>this.onPush(e),offPush:e=>this.offPush(e),createUrl:I,timeoutSignal:A,clearCache:()=>this.clearCache(),cacheStats:()=>this.cacheStats(),ALPN_HTTP2:this.context.ALPN_HTTP2,ALPN_HTTP2C:this.context.ALPN_HTTP2C,ALPN_HTTP1_1:this.context.ALPN_HTTP1_1,ALPN_HTTP1_0:this.context.ALPN_HTTP1_0}}async fetch(e,t){return(async(e,t,n)=>{const r=new l(t,n);if(0!==e.options.maxCacheSize&&w.includes(r.method)&&!["no-store","reload"].includes(r.cache)){const{policy:t,response:n}=e.cache.get(r.url)||{};if(t&&t.satisfiesWithoutRevalidation(r)){n.headers=new c(t.responseHeaders(n));const e=n.clone();return e.fromCache=!0,e}}const i=await x(e,r);return"no-store"!==r.cache?C(e,r,i):i})(this,e,t)}setCA(e){this.options.ca=e,this.context.setCA(e)}onPush(e){return this.eventEmitter.on(S,e)}offPush(e){return this.eventEmitter.off(S,e)}clearCache(){this.cache.clear()}cacheStats(){return{size:this.cache.calculatedSize,count:this.cache.size}}pushPromiseHandler(e,t,n){o(`received server push promise: ${e}, headers: ${JSON.stringify(t)}`);const r=new l(e,{headers:t}),{policy:i}=this.cache.get(e)||{};i&&i.satisfiesWithoutRevalidation(r)&&(o(`already cached, reject push promise: ${e}, headers: ${JSON.stringify(t)}`),n())}async pushHandler(e,t,n){o(`caching resource pushed by server: ${e}, reqHeaders: ${JSON.stringify(t)}, status: ${n.status}, respHeaders: ${JSON.stringify(n.headers)}`);const r=await C(this,new l(e,{headers:t}),n);this.eventEmitter.emit(S,e,r)}}e.exports=(new k).api()},7619:(e,t,n)=>{"use strict";const r=n(13573),{Headers:i}=n(48226),o=e=>({url:e.url,method:e.method,headers:e.headers.plain()}),s=e=>({status:e.status,headers:e.headers.plain()});e.exports=class{constructor(e,t,n){this.policy=new r(o(e),s(t),n)}storable(){return this.policy.storable()}satisfiesWithoutRevalidation(e){return this.policy.satisfiesWithoutRevalidation(o(e))}responseHeaders(e){return new i(this.policy.responseHeaders(s(e)))}timeToLive(){return this.policy.timeToLive()}}},93505:(e,t,n)=>{"use strict";const{AbortSignal:r}=n(64346),{Body:i,cloneStream:o,guessContentType:s}=n(54214),{Headers:a}=n(48226),{isPlainObject:c}=n(45591),{isFormData:l,FormDataSerializer:u}=n(86029),p=Symbol("Request internals");class d extends i{constructor(e,t={}){const n=e instanceof d?e:null,i=n?new URL(n.url):new URL(e);let h=t.method||n&&n.method||"GET";if(h=h.toUpperCase(),(null!=t.body||n&&null!==n.body)&&["GET","HEAD"].includes(h))throw new TypeError("Request with GET/HEAD method cannot have body");let f=t.body||(n&&n.body?o(n):null);const m=new a(t.headers||n&&n.headers||{});if(l(f)&&!m.has("content-type")){const e=new u(f);f=e.stream(),m.set("content-type",e.contentType()),m.has("transfer-encoding")||m.has("content-length")||m.set("content-length",e.length())}if(!m.has("content-type"))if(c(f))f=JSON.stringify(f),m.set("content-type","application/json");else{const e=s(f);e&&m.set("content-type",e)}super(f);let g=n?n.signal:null;if("signal"in t&&(g=t.signal),g&&!(g instanceof r))throw new TypeError("signal needs to be an instance of AbortSignal");const y=t.redirect||n&&n.redirect||"follow";if(!["follow","error","manual"].includes(y))throw new TypeError(`'${y}' is not a valid redirect option`);const _=t.cache||n&&n.cache||"default";if(!["default","no-store","reload","no-cache","force-cache","only-if-cached"].includes(_))throw new TypeError(`'${_}' is not a valid cache option`);this[p]={init:{...t},method:h,redirect:y,cache:_,headers:m,parsedURL:i,signal:g},void 0===t.follow?n&&void 0!==n.follow?this.follow=n.follow:this.follow=20:this.follow=t.follow,this.counter=t.counter||n&&n.counter||0,void 0===t.compress?n&&void 0!==n.compress?this.compress=n.compress:this.compress=!0:this.compress=t.compress,void 0===t.decode?n&&void 0!==n.decode?this.decode=n.decode:this.decode=!0:this.decode=t.decode}get method(){return this[p].method}get url(){return this[p].parsedURL.toString()}get headers(){return this[p].headers}get redirect(){return this[p].redirect}get cache(){return this[p].cache}get signal(){return this[p].signal}clone(){return new d(this)}get init(){return this[p].init}get[Symbol.toStringTag](){return this.constructor.name}}Object.defineProperties(d.prototype,{method:{enumerable:!0},url:{enumerable:!0},headers:{enumerable:!0},redirect:{enumerable:!0},cache:{enumerable:!0},clone:{enumerable:!0},signal:{enumerable:!0}}),e.exports={Request:d}},28327:(e,t,n)=>{"use strict";const{Body:r,cloneStream:i,guessContentType:o}=n(54214),{Headers:s}=n(48226),{isPlainObject:a}=n(45591),{isFormData:c,FormDataSerializer:l}=n(86029),u=Symbol("Response internals");class p extends r{constructor(e=null,t={}){const n=new s(t.headers);let r=e;if(c(r)&&!n.has("content-type")){const e=new l(r);r=e.stream(),n.set("content-type",e.contentType()),n.has("transfer-encoding")||n.has("content-length")||n.set("content-length",e.length())}if(null!==r&&!n.has("content-type"))if(a(r))r=JSON.stringify(r),n.set("content-type","application/json");else{const e=o(r);e&&n.set("content-type",e)}super(r),this[u]={url:t.url,status:t.status||200,statusText:t.statusText||"",headers:n,httpVersion:t.httpVersion,decoded:t.decoded,counter:t.counter}}get url(){return this[u].url||""}get status(){return this[u].status}get statusText(){return this[u].statusText}get ok(){return this[u].status>=200&&this[u].status<300}get redirected(){return this[u].counter>0}get headers(){return this[u].headers}get httpVersion(){return this[u].httpVersion}get decoded(){return this[u].decoded}static redirect(e,t=302){if(![301,302,303,307,308].includes(t))throw new RangeError("Invalid status code");return new p(null,{headers:{location:new URL(e).toString()},status:t})}clone(){if(this.bodyUsed)throw new TypeError("Cannot clone: already read");return new p(i(this),{...this[u]})}get[Symbol.toStringTag](){return this.constructor.name}}Object.defineProperties(p.prototype,{url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}}),e.exports={Response:p}},98606:(e,t,n)=>{"use strict";e.exports=n(14735)},15389:(e,t,n)=>{"use strict";n.r(t),n.d(t,{RestError:()=>$e,bearerTokenAuthenticationPolicy:()=>It,bearerTokenAuthenticationPolicyName:()=>xt,createDefaultHttpClient:()=>st,createEmptyPipeline:()=>o,createHttpHeaders:()=>Je,createPipelineFromOptions:()=>We,createPipelineRequest:()=>yt,decompressResponsePolicy:()=>Y,decompressResponsePolicyName:()=>X,defaultRetryPolicy:()=>de,exponentialRetryPolicy:()=>vt,exponentialRetryPolicyName:()=>_t,formDataPolicy:()=>ge,formDataPolicyName:()=>me,getDefaultProxySettings:()=>Ce,isRestError:()=>He,logPolicy:()=>j,logPolicyName:()=>B,ndJsonPolicy:()=>kt,ndJsonPolicyName:()=>At,proxyPolicy:()=>Ae,proxyPolicyName:()=>Ee,redirectPolicy:()=>$,redirectPolicyName:()=>U,retryPolicy:()=>pe,setClientRequestIdPolicy:()=>Re,setClientRequestIdPolicyName:()=>ke,systemErrorRetryPolicy:()=>Et,systemErrorRetryPolicyName:()=>bt,throttlingRetryPolicy:()=>wt,throttlingRetryPolicyName:()=>Tt,tlsPolicy:()=>Ne,tlsPolicyName:()=>Pe,tracingPolicy:()=>ze,tracingPolicyName:()=>Ve,userAgentPolicy:()=>G,userAgentPolicyName:()=>K});const r=new Set(["Deserialize","Serialize","Retry","Sign"]);class i{constructor(e){var t;this._policies=[],this._policies=null!==(t=null==e?void 0:e.slice(0))&&void 0!==t?t:[],this._orderedPolicies=void 0}addPolicy(e,t={}){if(t.phase&&t.afterPhase)throw new Error("Policies inside a phase cannot specify afterPhase.");if(t.phase&&!r.has(t.phase))throw new Error(`Invalid phase name: ${t.phase}`);if(t.afterPhase&&!r.has(t.afterPhase))throw new Error(`Invalid afterPhase name: ${t.afterPhase}`);this._policies.push({policy:e,options:t}),this._orderedPolicies=void 0}removePolicy(e){const t=[];return this._policies=this._policies.filter((n=>!(e.name&&n.policy.name===e.name||e.phase&&n.options.phase===e.phase)||(t.push(n.policy),!1))),this._orderedPolicies=void 0,t}sendRequest(e,t){return this.getOrderedPolicies().reduceRight(((e,t)=>n=>t.sendRequest(n,e)),(t=>e.sendRequest(t)))(t)}getOrderedPolicies(){return this._orderedPolicies||(this._orderedPolicies=this.orderPolicies()),this._orderedPolicies}clone(){return new i(this._policies)}static create(){return new i}orderPolicies(){const e=[],t=new Map;function n(e){return{name:e,policies:new Set,hasRun:!1,hasAfterPolicies:!1}}const r=n("Serialize"),i=n("None"),o=n("Deserialize"),s=n("Retry"),a=n("Sign"),c=[r,i,o,s,a];function l(e){return"Retry"===e?s:"Serialize"===e?r:"Deserialize"===e?o:"Sign"===e?a:i}for(const e of this._policies){const n=e.policy,r=e.options,i=n.name;if(t.has(i))throw new Error("Duplicate policy names not allowed in pipeline");const o={policy:n,dependsOn:new Set,dependants:new Set};r.afterPhase&&(o.afterPhase=l(r.afterPhase),o.afterPhase.hasAfterPolicies=!0),t.set(i,o),l(r.phase).policies.add(o)}for(const e of this._policies){const{policy:n,options:r}=e,i=n.name,o=t.get(i);if(!o)throw new Error(`Missing node for policy ${i}`);if(r.afterPolicies)for(const e of r.afterPolicies){const n=t.get(e);n&&(o.dependsOn.add(n),n.dependants.add(o))}if(r.beforePolicies)for(const e of r.beforePolicies){const n=t.get(e);n&&(n.dependsOn.add(o),o.dependants.add(n))}}function u(n){n.hasRun=!0;for(const r of n.policies)if((!r.afterPhase||r.afterPhase.hasRun&&!r.afterPhase.policies.size)&&0===r.dependsOn.size){e.push(r.policy);for(const e of r.dependants)e.dependsOn.delete(r);t.delete(r.policy.name),n.policies.delete(r)}}function p(){for(const e of c){if(u(e),e.policies.size>0&&e!==i)return void(i.hasRun||u(i));e.hasAfterPolicies&&u(i)}}let d=0;for(;t.size>0;){d++;const t=e.length;if(p(),e.length<=t&&d>1)throw new Error("Cannot satisfy policy dependencies due to requirements cycle.")}return e}}function o(){return i.create()}var s=n(73837),a=n.n(s),c=n(22037);const l="undefined"!=typeof process&&process.env&&process.env.DEBUG||void 0;let u,p=[],d=[];const h=[];l&&m(l);const f=Object.assign((e=>y(e)),{enable:m,enabled:g,disable:function(){const e=u||"";return m(""),e},log:function(e,...t){process.stderr.write(`${a().format(e,...t)}${c.EOL}`)}});function m(e){u=e,p=[],d=[];const t=/\*/g,n=e.split(",").map((e=>e.trim().replace(t,".*?")));for(const e of n)e.startsWith("-")?d.push(new RegExp(`^${e.substr(1)}$`)):p.push(new RegExp(`^${e}$`));for(const e of h)e.enabled=g(e.namespace)}function g(e){if(e.endsWith("*"))return!0;for(const t of d)if(t.test(e))return!1;for(const t of p)if(t.test(e))return!0;return!1}function y(e){const t=Object.assign((function(...n){t.enabled&&(n.length>0&&(n[0]=`${e} ${n[0]}`),t.log(...n))}),{enabled:g(e),destroy:_,log:f.log,namespace:e,extend:v});return h.push(t),t}function _(){const e=h.indexOf(this);return e>=0&&(h.splice(e,1),!0)}function v(e){const t=y(`${this.namespace}:${e}`);return t.log=this.log,t}const b=f,E=new Set,T="undefined"!=typeof process&&process.env&&process.env.AZURE_LOG_LEVEL||void 0;let w;const S=b("azure");S.log=(...e)=>{b.log(...e)};const x=["verbose","info","warning","error"];T&&(P(T)?function(e){if(e&&!P(e))throw new Error(`Unknown log level '${e}'. Acceptable values: ${x.join(",")}`);w=e;const t=[];for(const e of E)R(e)&&t.push(e.namespace);b.enable(t.join(","))}(T):console.error(`AZURE_LOG_LEVEL set to unknown log level '${T}'; logging is not enabled. Acceptable values: ${x.join(", ")}.`));const C={verbose:400,info:300,warning:200,error:100};function I(e){const t=S.extend(e);return A(S,t),{error:k(t,"error"),warning:k(t,"warning"),info:k(t,"info"),verbose:k(t,"verbose")}}function A(e,t){t.log=(...t)=>{e.log(...t)}}function k(e,t){const n=Object.assign(e.extend(t),{level:t});if(A(e,n),R(n)){const e=b.disable();b.enable(e+","+n.namespace)}return E.add(n),n}function R(e){return!!(w&&C[e.level]<=C[w])}function P(e){return x.includes(e)}const N=I("core-rest-pipeline");function O(e){return!("object"!=typeof e||null===e||Array.isArray(e)||e instanceof RegExp||e instanceof Date)}const M="REDACTED",D=["x-ms-client-request-id","x-ms-return-client-request-id","x-ms-useragent","x-ms-correlation-request-id","x-ms-request-id","client-request-id","ms-cv","return-client-request-id","traceparent","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Origin","Accept","Accept-Encoding","Cache-Control","Connection","Content-Length","Content-Type","Date","ETag","Expires","If-Match","If-Modified-Since","If-None-Match","If-Unmodified-Since","Last-Modified","Pragma","Request-Id","Retry-After","Server","Transfer-Encoding","User-Agent","WWW-Authenticate"],L=["api-version"];class F{constructor({additionalAllowedHeaderNames:e=[],additionalAllowedQueryParameters:t=[]}={}){e=D.concat(e),t=L.concat(t),this.allowedHeaderNames=new Set(e.map((e=>e.toLowerCase()))),this.allowedQueryParameters=new Set(t.map((e=>e.toLowerCase())))}sanitize(e){const t=new Set;return JSON.stringify(e,((e,n)=>{if(n instanceof Error)return Object.assign(Object.assign({},n),{name:n.name,message:n.message});if("headers"===e)return this.sanitizeHeaders(n);if("url"===e)return this.sanitizeUrl(n);if("query"===e)return this.sanitizeQuery(n);if("body"!==e&&"response"!==e&&"operationSpec"!==e){if(Array.isArray(n)||O(n)){if(t.has(n))return"[Circular]";t.add(n)}return n}}),2)}sanitizeHeaders(e){const t={};for(const n of Object.keys(e))this.allowedHeaderNames.has(n.toLowerCase())?t[n]=e[n]:t[n]=M;return t}sanitizeQuery(e){if("object"!=typeof e||null===e)return e;const t={};for(const n of Object.keys(e))this.allowedQueryParameters.has(n.toLowerCase())?t[n]=e[n]:t[n]=M;return t}sanitizeUrl(e){if("string"!=typeof e||null===e)return e;const t=new URL(e);if(!t.search)return e;for(const[e]of t.searchParams)this.allowedQueryParameters.has(e.toLowerCase())||t.searchParams.set(e,M);return t.toString()}}const B="logPolicy";function j(e={}){var t;const n=null!==(t=e.logger)&&void 0!==t?t:N.info,r=new F({additionalAllowedHeaderNames:e.additionalAllowedHeaderNames,additionalAllowedQueryParameters:e.additionalAllowedQueryParameters});return{name:B,async sendRequest(e,t){if(!n.enabled)return t(e);n(`Request: ${r.sanitize(e)}`);const i=await t(e);return n(`Response status code: ${i.status}`),n(`Headers: ${r.sanitize(i.headers)}`),i}}}const U="redirectPolicy",q=["GET","HEAD"];function $(e={}){const{maxRetries:t=20}=e;return{name:U,async sendRequest(e,n){const r=await n(e);return H(n,r,t)}}}async function H(e,t,n,r=0){const{request:i,status:o,headers:s}=t,a=s.get("location");if(a&&(300===o||301===o&&q.includes(i.method)||302===o&&q.includes(i.method)||303===o&&"POST"===i.method||307===o)&&r(e.headers.has(W)||e.headers.set(W,t),n(e))}}const X="decompressResponsePolicy";function Y(){return{name:X,sendRequest:async(e,t)=>("HEAD"!==e.method&&e.headers.set("Accept-Encoding","gzip,deflate"),t(e))}}const Z=new WeakMap,Q=new WeakMap;class J{constructor(){this.onabort=null,Z.set(this,[]),Q.set(this,!1)}get aborted(){if(!Q.has(this))throw new TypeError("Expected `this` to be an instance of AbortSignal.");return Q.get(this)}static get none(){return new J}addEventListener(e,t){if(!Z.has(this))throw new TypeError("Expected `this` to be an instance of AbortSignal.");Z.get(this).push(t)}removeEventListener(e,t){if(!Z.has(this))throw new TypeError("Expected `this` to be an instance of AbortSignal.");const n=Z.get(this),r=n.indexOf(t);r>-1&&n.splice(r,1)}dispatchEvent(e){throw new Error("This is a stub dispatchEvent implementation that should not be used. It only exists for type-checking purposes.")}}function ee(e){if(e.aborted)return;e.onabort&&e.onabort.call(e);const t=Z.get(e);t&&t.slice().forEach((t=>{t.call(e,{type:"abort"})})),Q.set(e,!0)}class te extends Error{constructor(e){super(e),this.name="AbortError"}}class ne{constructor(e){if(this._signal=new J,e){Array.isArray(e)||(e=arguments);for(const t of e)t.aborted?this.abort():t.addEventListener("abort",(()=>{this.abort()}))}}get signal(){return this._signal}abort(){ee(this._signal)}static timeout(e){const t=new J,n=setTimeout(ee,e,t);return"function"==typeof n.unref&&n.unref(),t}}function re(e,t,n){return new Promise(((r,i)=>{let o,s;const a=()=>i(new te((null==n?void 0:n.abortErrorMsg)?null==n?void 0:n.abortErrorMsg:"The operation was aborted.")),c=()=>{(null==n?void 0:n.abortSignal)&&s&&n.abortSignal.removeEventListener("abort",s)};if(s=()=>(o&&clearTimeout(o),c(),a()),(null==n?void 0:n.abortSignal)&&n.abortSignal.aborted)return a();o=setTimeout((()=>{c(),r(t)}),e),(null==n?void 0:n.abortSignal)&&n.abortSignal.addEventListener("abort",s)}))}function ie(e,t){const n=e.headers.get(t);if(!n)return;const r=Number(n);return Number.isNaN(r)?void 0:r}const oe="Retry-After",se=["retry-after-ms","x-ms-retry-after-ms",oe];function ae(e){if(e&&[429,503].includes(e.status))try{for(const t of se){const n=ie(e,t);if(0===n||n)return n*(t===oe?1e3:1)}const t=e.headers.get(oe);if(!t)return;const n=Date.parse(t)-Date.now();return Number.isFinite(n)?Math.max(0,n):void 0}catch(e){return}}function ce(){return{name:"throttlingRetryStrategy",retry({response:e}){const t=ae(e);return Number.isFinite(t)?{retryAfterInMs:t}:{skipStrategy:!0}}}}function le(e={}){var t,n;const r=null!==(t=e.retryDelayInMs)&&void 0!==t?t:1e3,i=null!==(n=e.maxRetryDelayInMs)&&void 0!==n?n:64e3;let o=r;return{name:"exponentialRetryStrategy",retry({retryCount:t,response:n,responseError:r}){const s=!!(p=r)&&("ETIMEDOUT"===p.code||"ESOCKETTIMEDOUT"===p.code||"ECONNREFUSED"===p.code||"ECONNRESET"===p.code||"ENOENT"===p.code),a=s&&e.ignoreSystemErrors,c=function(e){return Boolean(e&&void 0!==e.status&&(e.status>=500||408===e.status)&&501!==e.status&&505!==e.status)}(n),l=c&&e.ignoreHttpStatusCodes,u=n&&(function(e){return Number.isFinite(ae(e))}(n)||!c);var p;if(u||l||a)return{skipStrategy:!0};if(r&&!s&&!c)return{errorToThrow:r};const d=o*Math.pow(2,t),h=Math.min(i,d);var f,m;return o=h/2+(f=0,m=h/2,f=Math.ceil(f),m=Math.floor(m),Math.floor(Math.random()*(m-f+1))+f),{retryAfterInMs:o}}}}const ue=I("core-rest-pipeline retryPolicy");function pe(e,t={maxRetries:3}){const n=t.logger||ue;return{name:"retryPolicy",async sendRequest(r,i){var o,s;let a,c,l=-1;e:for(;;){l+=1,a=void 0,c=void 0;try{n.info(`Retry ${l}: Attempting to send request`,r.requestId),a=await i(r),n.info(`Retry ${l}: Received a response from request`,r.requestId)}catch(e){if(n.error(`Retry ${l}: Received an error from request`,r.requestId),c=e,!e||"RestError"!==c.name)throw e;a=c.response}if(null===(o=r.abortSignal)||void 0===o?void 0:o.aborted)throw n.error(`Retry ${l}: Request aborted.`),new te;if(l>=(null!==(s=t.maxRetries)&&void 0!==s?s:3)){if(n.info(`Retry ${l}: Maximum retries reached. Returning the last received response, or throwing the last received error.`),c)throw c;if(a)return a;throw new Error("Maximum retries reached with no response or error to throw")}n.info(`Retry ${l}: Processing ${e.length} retry strategies.`);t:for(const t of e){const e=t.logger||ue;e.info(`Retry ${l}: Processing retry strategy ${t.name}.`);const n=t.retry({retryCount:l,response:a,responseError:c});if(n.skipStrategy){e.info(`Retry ${l}: Skipped.`);continue t}const{errorToThrow:i,retryAfterInMs:o,redirectTo:s}=n;if(i)throw e.error(`Retry ${l}: Retry strategy ${t.name} throws error:`,i),i;if(o||0===o){e.info(`Retry ${l}: Retry strategy ${t.name} retries after ${o}`),await re(o,void 0,{abortSignal:r.abortSignal});continue e}if(s){e.info(`Retry ${l}: Retry strategy ${t.name} redirects to ${s}`),r.url=s;continue e}}if(c)throw n.info("None of the retry strategies could work with the received error. Throwing it."),c;if(a)return n.info("None of the retry strategies could work with the received response. Returning it."),a}}}}function de(e={}){var t;return{name:"defaultRetryPolicy",sendRequest:pe([ce(),le(e)],{maxRetries:null!==(t=e.maxRetries)&&void 0!==t?t:3}).sendRequest}}var he=n(54347),fe=n.n(he);const me="formDataPolicy";function ge(){return{name:me,async sendRequest(e,t){if(e.formData){const t=e.headers.get("Content-Type");t&&-1!==t.indexOf("application/x-www-form-urlencoded")?(e.body=function(e){const t=new URLSearchParams;for(const[n,r]of Object.entries(e))if(Array.isArray(r))for(const e of r)t.append(n,e.toString());else t.append(n,r.toString());return t.toString()}(e.formData),e.formData=void 0):await async function(e,t){const n=new(fe());for(const t of Object.keys(e)){const r=e[t];if(Array.isArray(r))for(const e of r)n.append(t,e);else n.append(t,r)}t.body=n,t.formData=void 0;const r=t.headers.get("Content-Type");r&&-1!==r.indexOf("multipart/form-data")&&t.headers.set("Content-Type",`multipart/form-data; boundary=${n.getBoundary()}`);try{const e=await new Promise(((e,t)=>{n.getLength(((n,r)=>{n?t(n):e(r)}))}));t.headers.set("Content-Length",e)}catch(e){}}(e.formData,e)}return t(e)}}}var ye;const _e="undefined"!=typeof process&&Boolean(process.version)&&Boolean(null===(ye=process.versions)||void 0===ye?void 0:ye.node);var ve=n(72331),be=n(65188);const Ee="proxyPolicy",Te=[];let we=!1;const Se=new Map;function xe(e){return process.env[e]?process.env[e]:process.env[e.toLowerCase()]?process.env[e.toLowerCase()]:void 0}function Ce(e){if(!e&&!(e=function(){if(!process)return;const e=xe("HTTPS_PROXY"),t=xe("ALL_PROXY"),n=xe("HTTP_PROXY");return e||t||n}()))return;const t=new URL(e);return{host:(t.protocol?t.protocol+"//":"")+t.hostname,port:Number.parseInt(t.port||"80"),username:t.username,password:t.password}}function Ie(e,{headers:t,tlsSettings:n}){let r;try{r=new URL(e.host)}catch(t){throw new Error(`Expecting a valid host string in proxy settings, but found "${e.host}".`)}n&&N.warning("TLS settings are not supported in combination with custom Proxy, certificates provided to the client will be ignored.");const i={hostname:r.hostname,port:e.port,protocol:r.protocol,headers:t.toJSON()};return e.username&&e.password?i.auth=`${e.username}:${e.password}`:e.username&&(i.auth=`${e.username}`),i}function Ae(e=Ce(),t){we||Te.push(...function(){const e=xe("NO_PROXY");return we=!0,e?e.split(",").map((e=>e.trim())).filter((e=>e.length)):[]}());const n={};return{name:Ee,async sendRequest(r,i){var o;return r.proxySettings||function(e,t,n){if(0===t.length)return!1;const r=new URL(e).hostname;if(null==n?void 0:n.has(r))return n.get(r);let i=!1;for(const e of t)"."===e[0]?(r.endsWith(e)||r.length===e.length-1&&r===e.slice(1))&&(i=!0):r===e&&(i=!0);return null==n||n.set(r,i),i}(r.url,null!==(o=null==t?void 0:t.customNoProxyList)&&void 0!==o?o:Te,(null==t?void 0:t.customNoProxyList)?void 0:Se)||(r.proxySettings=e),r.proxySettings&&function(e,t){if(e.agent)return;const n="https:"!==new URL(e.url).protocol,r=e.proxySettings;if(r)if(n){if(!t.httpProxyAgent){const n=Ie(r,e);t.httpProxyAgent=new be.HttpProxyAgent(n)}e.agent=t.httpProxyAgent}else{if(!t.httpsProxyAgent){const n=Ie(r,e);t.httpsProxyAgent=new ve.HttpsProxyAgent(n)}e.agent=t.httpsProxyAgent}}(r,n),i(r)}}}const ke="setClientRequestIdPolicy";function Re(e="x-ms-client-request-id"){return{name:ke,sendRequest:async(t,n)=>(t.headers.has(e)||t.headers.set(e,t.requestId),n(t))}}const Pe="tlsPolicy";function Ne(e){return{name:Pe,sendRequest:async(t,n)=>(t.tlsSettings||(t.tlsSettings=e),n(t))}}const Oe={span:Symbol.for("@azure/core-tracing span"),namespace:Symbol.for("@azure/core-tracing namespace")};function Me(e={}){let t=new De(e.parentContext);return e.span&&(t=t.setValue(Oe.span,e.span)),e.namespace&&(t=t.setValue(Oe.namespace,e.namespace)),t}class De{constructor(e){this._contextMap=e instanceof De?new Map(e._contextMap):new Map}setValue(e,t){const n=new De(this);return n._contextMap.set(e,t),n}getValue(e){return this._contextMap.get(e)}deleteValue(e){const t=new De(this);return t._contextMap.delete(e),t}}let Le;function Fe(){return Le||(Le={createRequestHeaders:()=>({}),parseTraceparentHeader:()=>{},startSpan:(e,t)=>({span:{end:()=>{},isRecording:()=>!1,recordException:()=>{},setAttribute:()=>{},setStatus:()=>{}},tracingContext:Me({parentContext:t.tracingContext})}),withContext:(e,t,...n)=>t(...n)}),Le}function Be(e){if(O(e)){const t="string"==typeof e.name,n="string"==typeof e.message;return t&&n}return!1}function je(e){if(Be(e))return e.message;{let t;try{t="object"==typeof e&&e?JSON.stringify(e):String(e)}catch(e){t="[unable to stringify input]"}return`Unknown error ${t}`}}const Ue=s.inspect.custom,qe=new F;class $e extends Error{constructor(e,t={}){super(e),this.name="RestError",this.code=t.code,this.statusCode=t.statusCode,this.request=t.request,this.response=t.response,Object.setPrototypeOf(this,$e.prototype)}[Ue](){return`RestError: ${this.message} \n ${qe.sanitize(this)}`}}function He(e){return e instanceof $e||Be(e)&&"RestError"===e.name}$e.REQUEST_SEND_ERROR="REQUEST_SEND_ERROR",$e.PARSE_ERROR="PARSE_ERROR";const Ve="tracingPolicy";function ze(e={}){const t=z(e.userAgentPrefix),n=function(){try{return function(e){const{namespace:t,packageName:n,packageVersion:r}=e;function i(e,i,o){var s;const a=Fe().startSpan(e,Object.assign(Object.assign({},o),{packageName:n,packageVersion:r,tracingContext:null===(s=null==i?void 0:i.tracingOptions)||void 0===s?void 0:s.tracingContext}));let c=a.tracingContext;const l=a.span;return c.getValue(Oe.namespace)||(c=c.setValue(Oe.namespace,t)),l.setAttribute("az.namespace",c.getValue(Oe.namespace)),{span:l,updatedOptions:Object.assign({},i,{tracingOptions:Object.assign(Object.assign({},null==i?void 0:i.tracingOptions),{tracingContext:c})})}}function o(e,t,...n){return Fe().withContext(e,t,...n)}return{startSpan:i,withSpan:async function(e,t,n,r){const{span:s,updatedOptions:a}=i(e,t,r);try{const e=await o(a.tracingOptions.tracingContext,(()=>Promise.resolve(n(a,s))));return s.setStatus({status:"success"}),e}catch(e){throw s.setStatus({status:"error",error:e}),e}finally{s.end()}},withContext:o,parseTraceparentHeader:function(e){return Fe().parseTraceparentHeader(e)},createRequestHeaders:function(e){return Fe().createRequestHeaders(e)}}}({namespace:"",packageName:"@azure/core-rest-pipeline",packageVersion:V})}catch(e){return void N.warning(`Error when creating the TracingClient: ${je(e)}`)}}();return{name:Ve,async sendRequest(e,r){var i,o;if(!n||!(null===(i=e.tracingOptions)||void 0===i?void 0:i.tracingContext))return r(e);const{span:s,tracingContext:a}=null!==(o=function(e,t,n){try{const{span:r,updatedOptions:i}=e.startSpan(`HTTP ${t.method}`,{tracingOptions:t.tracingOptions},{spanKind:"client",spanAttributes:{"http.method":t.method,"http.url":t.url,requestId:t.requestId}});if(!r.isRecording())return void r.end();n&&r.setAttribute("http.user_agent",n);const o=e.createRequestHeaders(i.tracingOptions.tracingContext);for(const[e,n]of Object.entries(o))t.headers.set(e,n);return{span:r,tracingContext:i.tracingOptions.tracingContext}}catch(e){return void N.warning(`Skipping creating a tracing span due to an error: ${je(e)}`)}}(n,e,t))&&void 0!==o?o:{};if(!s||!a)return r(e);try{const t=await n.withContext(a,r,e);return function(e,t){try{e.setAttribute("http.status_code",t.status);const n=t.headers.get("x-ms-request-id");n&&e.setAttribute("serviceRequestId",n),e.setStatus({status:"success"}),e.end()}catch(e){N.warning(`Skipping tracing span processing due to an error: ${je(e)}`)}}(s,t),t}catch(e){throw function(e,t){try{e.setStatus({status:"error",error:Be(t)?t:void 0}),He(t)&&t.statusCode&&e.setAttribute("http.status_code",t.statusCode),e.end()}catch(e){N.warning(`Skipping tracing span processing due to an error: ${je(e)}`)}}(s,e),e}}}}function We(e){const t=o();return _e&&(e.tlsOptions&&t.addPolicy(Ne(e.tlsOptions)),t.addPolicy(Ae(e.proxyOptions)),t.addPolicy(Y())),t.addPolicy(ge()),t.addPolicy(G(e.userAgentOptions)),t.addPolicy(Re()),t.addPolicy(de(e.retryOptions),{phase:"Retry"}),t.addPolicy(ze(e.userAgentOptions),{afterPhase:"Retry"}),_e&&t.addPolicy($(e.redirectOptions),{afterPhase:"Retry"}),t.addPolicy(j(e.loggingOptions),{afterPhase:"Sign"}),t}var Ke=n(13685),Ge=n(95687),Xe=n(59796),Ye=n(12781);function Ze(e){return e.toLowerCase()}class Qe{constructor(e){if(this._headersMap=new Map,e)for(const t of Object.keys(e))this.set(t,e[t])}set(e,t){this._headersMap.set(Ze(e),{name:e,value:String(t)})}get(e){var t;return null===(t=this._headersMap.get(Ze(e)))||void 0===t?void 0:t.value}has(e){return this._headersMap.has(Ze(e))}delete(e){this._headersMap.delete(Ze(e))}toJSON(e={}){const t={};if(e.preserveCase)for(const e of this._headersMap.values())t[e.name]=e.value;else for(const[e,n]of this._headersMap)t[e]=n.value;return t}toString(){return JSON.stringify(this.toJSON({preserveCase:!0}))}[Symbol.iterator](){return function*(e){for(const t of e.values())yield[t.name,t.value]}(this._headersMap)}}function Je(e){return new Qe(e)}const et={};function tt(e){return e&&"function"==typeof e.pipe}function nt(e){return new Promise((t=>{e.on("close",t),e.on("end",t),e.on("error",t)}))}function rt(e){return e&&"number"==typeof e.byteLength}class it extends Ye.Transform{constructor(e){super(),this.loadedBytes=0,this.progressCallback=e}_transform(e,t,n){this.push(e),this.loadedBytes+=e.length;try{this.progressCallback({loadedBytes:this.loadedBytes}),n()}catch(e){n(e)}}}class ot{constructor(){this.cachedHttpsAgents=new WeakMap}async sendRequest(e){var t,n,r;const i=new ne;let o;if(e.abortSignal){if(e.abortSignal.aborted)throw new te("The operation was aborted.");o=e=>{"abort"===e.type&&i.abort()},e.abortSignal.addEventListener("abort",o)}e.timeout>0&&setTimeout((()=>{i.abort()}),e.timeout);const s=e.headers.get("Accept-Encoding"),a=(null==s?void 0:s.includes("gzip"))||(null==s?void 0:s.includes("deflate"));let c,l="function"==typeof e.body?e.body():e.body;if(l&&!e.headers.has("Content-Length")){const t=function(e){return e?Buffer.isBuffer(e)?e.length:tt(e)?null:rt(e)?e.byteLength:"string"==typeof e?Buffer.from(e).length:null:0}(l);null!==t&&e.headers.set("Content-Length",t)}try{if(l&&e.onUploadProgress){const t=e.onUploadProgress,n=new it(t);n.on("error",(e=>{N.error("Error in upload progress",e)})),tt(l)?l.pipe(n):n.end(l),l=n}const s=await this.makeRequest(e,i,l),p=function(e){const t=Je();for(const n of Object.keys(e.headers)){const r=e.headers[n];Array.isArray(r)?r.length>0&&t.set(n,r[0]):r&&t.set(n,r)}return t}(s),d={status:null!==(t=s.statusCode)&&void 0!==t?t:0,headers:p,request:e};if("HEAD"===e.method)return s.resume(),d;c=a?function(e,t){const n=t.get("Content-Encoding");if("gzip"===n){const t=Xe.createGunzip();return e.pipe(t),t}if("deflate"===n){const t=Xe.createInflate();return e.pipe(t),t}return e}(s,p):s;const h=e.onDownloadProgress;if(h){const e=new it(h);e.on("error",(e=>{N.error("Error in download progress",e)})),c.pipe(e),c=e}return(null===(n=e.streamResponseStatusCodes)||void 0===n?void 0:n.has(Number.POSITIVE_INFINITY))||(null===(r=e.streamResponseStatusCodes)||void 0===r?void 0:r.has(d.status))?d.readableStreamBody=c:d.bodyAsText=await(u=c,new Promise(((e,t)=>{const n=[];u.on("data",(e=>{Buffer.isBuffer(e)?n.push(e):n.push(Buffer.from(e))})),u.on("end",(()=>{e(Buffer.concat(n).toString("utf8"))})),u.on("error",(e=>{e&&"AbortError"===(null==e?void 0:e.name)?t(e):t(new $e(`Error reading response as text: ${e.message}`,{code:$e.PARSE_ERROR}))}))}))),d}finally{if(e.abortSignal&&o){let t=Promise.resolve();tt(l)&&(t=nt(l));let n=Promise.resolve();tt(c)&&(n=nt(c)),Promise.all([t,n]).then((()=>{var t;o&&(null===(t=e.abortSignal)||void 0===t||t.removeEventListener("abort",o))})).catch((e=>{N.warning("Error when cleaning up abortListener on httpRequest",e)}))}}var u}makeRequest(e,t,n){var r;const i=new URL(e.url),o="https:"!==i.protocol;if(o&&!e.allowInsecureConnection)throw new Error(`Cannot connect to ${e.url} while allowInsecureConnection is false.`);const s={agent:null!==(r=e.agent)&&void 0!==r?r:this.getOrCreateAgent(e,o),hostname:i.hostname,path:`${i.pathname}${i.search}`,port:i.port,method:e.method,headers:e.headers.toJSON({preserveCase:!0})};return new Promise(((r,i)=>{const a=o?Ke.request(s,r):Ge.request(s,r);a.once("error",(t=>{var n;i(new $e(t.message,{code:null!==(n=t.code)&&void 0!==n?n:$e.REQUEST_SEND_ERROR,request:e}))})),t.signal.addEventListener("abort",(()=>{const e=new te("The operation was aborted.");a.destroy(e),i(e)})),n&&tt(n)?n.pipe(a):n?"string"==typeof n||Buffer.isBuffer(n)?a.end(n):rt(n)?a.end(ArrayBuffer.isView(n)?Buffer.from(n.buffer):Buffer.from(n)):(N.error("Unrecognized body type",n),i(new $e("Unrecognized body type"))):a.end()}))}getOrCreateAgent(e,t){var n;const r=e.disableKeepAlive;if(t)return r?Ke.globalAgent:(this.cachedHttpAgent||(this.cachedHttpAgent=new Ke.Agent({keepAlive:!0})),this.cachedHttpAgent);{if(r&&!e.tlsSettings)return Ge.globalAgent;const t=null!==(n=e.tlsSettings)&&void 0!==n?n:et;let i=this.cachedHttpsAgents.get(t);return i&&i.options.keepAlive===!r||(N.info("No cached TLS Agent exist, creating a new Agent"),i=new Ge.Agent(Object.assign({keepAlive:!r},t)),this.cachedHttpsAgents.set(t,i)),i}}}function st(){return new ot}var at=n(6113),ct=n.n(at);const lt=new Uint8Array(256);let ut=lt.length;function pt(){return ut>lt.length-16&&(ct().randomFillSync(lt),ut=0),lt.slice(ut,ut+=16)}const dt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i,ht=[];for(let e=0;e<256;++e)ht.push((e+256).toString(16).substr(1));const ft=function(e,t=0){const n=(ht[e[t+0]]+ht[e[t+1]]+ht[e[t+2]]+ht[e[t+3]]+"-"+ht[e[t+4]]+ht[e[t+5]]+"-"+ht[e[t+6]]+ht[e[t+7]]+"-"+ht[e[t+8]]+ht[e[t+9]]+"-"+ht[e[t+10]]+ht[e[t+11]]+ht[e[t+12]]+ht[e[t+13]]+ht[e[t+14]]+ht[e[t+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&dt.test(e)}(n))throw TypeError("Stringified UUID is invalid");return n},mt=function(e,t,n){const r=(e=e||{}).random||(e.rng||pt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=r[e];return t}return ft(r)};class gt{constructor(e){var t,n,r,i,o,s,a;this.url=e.url,this.body=e.body,this.headers=null!==(t=e.headers)&&void 0!==t?t:Je(),this.method=null!==(n=e.method)&&void 0!==n?n:"GET",this.timeout=null!==(r=e.timeout)&&void 0!==r?r:0,this.formData=e.formData,this.disableKeepAlive=null!==(i=e.disableKeepAlive)&&void 0!==i&&i,this.proxySettings=e.proxySettings,this.streamResponseStatusCodes=e.streamResponseStatusCodes,this.withCredentials=null!==(o=e.withCredentials)&&void 0!==o&&o,this.abortSignal=e.abortSignal,this.tracingOptions=e.tracingOptions,this.onUploadProgress=e.onUploadProgress,this.onDownloadProgress=e.onDownloadProgress,this.requestId=e.requestId||mt(),this.allowInsecureConnection=null!==(s=e.allowInsecureConnection)&&void 0!==s&&s,this.enableBrowserStreams=null!==(a=e.enableBrowserStreams)&&void 0!==a&&a}}function yt(e){return new gt(e)}const _t="exponentialRetryPolicy";function vt(e={}){var t;return pe([le(Object.assign(Object.assign({},e),{ignoreSystemErrors:!0}))],{maxRetries:null!==(t=e.maxRetries)&&void 0!==t?t:3})}const bt="systemErrorRetryPolicy";function Et(e={}){var t;return{name:bt,sendRequest:pe([le(Object.assign(Object.assign({},e),{ignoreHttpStatusCodes:!0}))],{maxRetries:null!==(t=e.maxRetries)&&void 0!==t?t:3}).sendRequest}}const Tt="throttlingRetryPolicy";function wt(e={}){var t;return{name:Tt,sendRequest:pe([ce()],{maxRetries:null!==(t=e.maxRetries)&&void 0!==t?t:3}).sendRequest}}const St={forcedRefreshWindowInMs:1e3,retryIntervalInMs:3e3,refreshWindowInMs:12e4};const xt="bearerTokenAuthenticationPolicy";async function Ct(e){const{scopes:t,getAccessToken:n,request:r}=e,i={abortSignal:r.abortSignal,tracingOptions:r.tracingOptions},o=await n(t,i);o&&e.request.headers.set("Authorization",`Bearer ${o.token}`)}function It(e){var t;const{credential:n,scopes:r,challengeCallbacks:i}=e,o=e.logger||N,s=Object.assign({authorizeRequest:null!==(t=null==i?void 0:i.authorizeRequest)&&void 0!==t?t:Ct,authorizeRequestOnChallenge:null==i?void 0:i.authorizeRequestOnChallenge},i),a=n?function(e,t){let n,r=null,i=null;const o=Object.assign(Object.assign({},St),t),s={get isRefreshing(){return null!==r},get shouldRefresh(){var e;return!s.isRefreshing&&(null!==(e=null==i?void 0:i.expiresOnTimestamp)&&void 0!==e?e:0)-o.refreshWindowInMse.getToken(t,a)),o.retryIntervalInMs,null!==(c=null==i?void 0:i.expiresOnTimestamp)&&void 0!==c?c:Date.now()).then((e=>(r=null,i=e,n=a.tenantId,i))).catch((e=>{throw r=null,i=null,n=void 0,e}))),r}return async(e,t)=>n!==t.tenantId||Boolean(t.claims)||s.mustRefresh?a(e,t):(s.shouldRefresh&&a(e,t),i)}(n):()=>Promise.resolve(null);return{name:xt,async sendRequest(e,t){if(!e.url.toLowerCase().startsWith("https://"))throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");let n,i;await s.authorizeRequest({scopes:Array.isArray(r)?r:[r],request:e,getAccessToken:a,logger:o});try{n=await t(e)}catch(e){i=e,n=e.response}if(s.authorizeRequestOnChallenge&&401===(null==n?void 0:n.status)&&function(e){const t=e.headers.get("WWW-Authenticate");if(401===e.status&&t)return t}(n)&&await s.authorizeRequestOnChallenge({scopes:Array.isArray(r)?r:[r],request:e,response:n,getAccessToken:a,logger:o}))return t(e);if(i)throw i;return n}}}const At="ndJsonPolicy";function kt(){return{name:At,async sendRequest(e,t){if("string"==typeof e.body&&e.body.startsWith("[")){const t=JSON.parse(e.body);Array.isArray(t)&&(e.body=t.map((e=>JSON.stringify(e)+"\n")).join(""))}return t(e)}}}},42348:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,{signal:n}={}){return new Promise(((r,i)=>{function o(){null==n||n.removeEventListener("abort",o),e.removeListener(t,s),e.removeListener("error",a)}function s(...e){o(),r(e)}function a(e){o(),i(e)}null==n||n.addEventListener("abort",o),e.on(t,s),e.on("error",a)}))}},62484:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=i(n(41808)),s=i(n(24404)),a=i(n(57310)),c=i(n(41241)),l=i(n(42348)),u=n(47475),p=(0,c.default)("http-proxy-agent");class d extends u.Agent{constructor(e){let t;if(t="string"==typeof e?a.default.parse(e):e,!t)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");p("Creating new HttpProxyAgent instance: %o",t),super(t);const n=Object.assign({},t);var r;this.secureProxy=t.secureProxy||"string"==typeof(r=n.protocol)&&/^https:?$/i.test(r),n.host=n.hostname||n.host,"string"==typeof n.port&&(n.port=parseInt(n.port,10)),!n.port&&n.host&&(n.port=this.secureProxy?443:80),n.host&&n.path&&(delete n.path,delete n.pathname),this.proxy=n}callback(e,t){return r(this,void 0,void 0,(function*(){const{proxy:n,secureProxy:r}=this,i=a.default.parse(e.path);let c;if(i.protocol||(i.protocol="http:"),i.hostname||(i.hostname=t.hostname||t.host||null),null==i.port&&(t.port,1)&&(i.port=String(t.port)),"80"===i.port&&(i.port=""),e.path=a.default.format(i),n.auth&&e.setHeader("Proxy-Authorization",`Basic ${Buffer.from(n.auth).toString("base64")}`),r?(p("Creating `tls.Socket`: %o",n),c=s.default.connect(n)):(p("Creating `net.Socket`: %o",n),c=o.default.connect(n)),e._header){let t,n;p("Regenerating stored HTTP header string for request"),e._header=null,e._implicitHeader(),e.output&&e.output.length>0?(p("Patching connection write() output buffer with updated header"),t=e.output[0],n=t.indexOf("\r\n\r\n")+4,e.output[0]=e._header+t.substring(n),p("Output buffer: %o",e.output)):e.outputData&&e.outputData.length>0&&(p("Patching connection write() output buffer with updated header"),t=e.outputData[0].data,n=t.indexOf("\r\n\r\n")+4,e.outputData[0].data=e._header+t.substring(n),p("Output buffer: %o",e.outputData[0].data))}return yield(0,l.default)(c,"connect"),c}))}}t.default=d},65188:function(e,t,n){"use strict";const r=(this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})(n(62484));function i(e){return new r.default(e)}!function(e){e.HttpProxyAgent=r.default,e.prototype=r.default.prototype}(i||(i={})),e.exports=i},23716:(e,t,n)=>{"use strict";n.r(t),n.d(t,{webSnippet:()=>r});var r='!function(T,l,y){var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d){var g=!1,f=!1,m={initialize:!0,queue:[],sv:"5",version:2,config:d};function v(e,t){var n={},a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),{time:function(){var e=new Date;function t(e){var t=""+e;return 1===t.length&&(t="0"+t),t}return e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"}(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}}}}var h=d.url||y.src;if(h){function a(e){var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function(){var e={},t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a{"use strict";n.d(t,{c:()=>h});var r=n(67037),i=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s},o=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s},u=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i{"use strict";n.d(t,{G:()=>l});var r=n(77511),i=function(){function e(e){this._namespace=e.namespace||"DiagComponentLogger"}return e.prototype.debug=function(){for(var e=[],t=0;t0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}(n),!1))}var s=n(70339),a=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s},c=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i=r?i.bind(t):function(){}}return es.n.ALL&&(e=s.n.ALL),t=t||{},{error:n("error",s.n.ERROR),warn:n("warn",s.n.WARN),info:n("info",s.n.INFO),debug:n("debug",s.n.DEBUG),verbose:n("verbose",s.n.VERBOSE)}}(null!==(o=n.logLevel)&&void 0!==o?o:s.n.INFO,e);if(l&&!n.suppressOverrideMessage){var p=null!==(a=(new Error).stack)&&void 0!==a?a:"";l.warn("Current logger will be overwritten from "+p),u.warn("Current logger will overwrite one already registered from "+p)}return(0,r.TG)("diag",u,t,!0)},t.disable=function(){(0,r.J_)("diag",t)},t.createComponentLogger=function(e){return new i(e)},t.verbose=e("verbose"),t.debug=e("debug"),t.info=e("info"),t.warn=e("warn"),t.error=e("error")}return e.instance=function(){return this._instance||(this._instance=new e),this._instance},e}()},2554:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,H:()=>c});var r=n(51724),i=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=function(){function e(e){this._entries=e?new Map(e):new Map}return e.prototype.getEntry=function(e){var t=this._entries.get(e);if(t)return Object.assign({},t)},e.prototype.getAllEntries=function(){return Array.from(this._entries.entries()).map((function(e){var t=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}(e,2);return[t[0],t[1]]}))},e.prototype.setEntry=function(t,n){var r=new e(this._entries);return r._entries.set(t,n),r},e.prototype.removeEntry=function(t){var n=new e(this._entries);return n._entries.delete(t),n},e.prototype.removeEntries=function(){for(var t,n,r=[],o=0;o{"use strict";n.d(t,{D:()=>r});var r=n(6318).c.getInstance()},67037:(e,t,n)=>{"use strict";function r(e){return Symbol.for(e)}n.d(t,{I:()=>i,Y:()=>r});var i=new function e(t){var n=this;n._currentContext=t?new Map(t):new Map,n.getValue=function(e){return n._currentContext.get(e)},n.setValue=function(t,r){var i=new e(n._currentContext);return i._currentContext.set(t,r),i},n.deleteValue=function(t){var r=new e(n._currentContext);return r._currentContext.delete(t),r}}},70667:(e,t,n)=>{"use strict";n.d(t,{K:()=>r});var r=n(51724).G.instance()},70339:(e,t,n)=>{"use strict";var r;n.d(t,{n:()=>r}),function(e){e[e.NONE=0]="NONE",e[e.ERROR=30]="ERROR",e[e.WARN=50]="WARN",e[e.INFO=60]="INFO",e[e.DEBUG=70]="DEBUG",e[e.VERBOSE=80]="VERBOSE",e[e.ALL=9999]="ALL"}(r||(r={}))},60311:(e,t,n)=>{"use strict";n.r(t),n.d(t,{DiagConsoleLogger:()=>c,DiagLogLevel:()=>l.n,INVALID_SPANID:()=>$.fQ,INVALID_SPAN_CONTEXT:()=>$.Rr,INVALID_TRACEID:()=>$.AE,ProxyTracer:()=>k.T,ProxyTracerProvider:()=>R.K,ROOT_CONTEXT:()=>s.I,SamplingDecision:()=>P.U,SpanKind:()=>N.M,SpanStatusCode:()=>O.Q,TraceFlags:()=>M.r,ValueType:()=>i,baggageEntryMetadataFromString:()=>o.u,context:()=>H.D,createContextKey:()=>s.Y,createNoopMeter:()=>I,createTraceState:()=>U,default:()=>Q,defaultTextMapGetter:()=>A.r,defaultTextMapSetter:()=>A.M,diag:()=>V.K,isSpanContextValid:()=>q.BM,isValidSpanId:()=>q.Lc,isValidTraceId:()=>q.jN,metrics:()=>X,propagation:()=>Y.u,trace:()=>Z.g});var r,i,o=n(2554),s=n(67037),a=[{n:"error",c:"error"},{n:"warn",c:"warn"},{n:"info",c:"info"},{n:"debug",c:"debug"},{n:"verbose",c:"trace"}],c=function(){function e(e){return function(){for(var t=[],n=0;n512||(this._internalState=e.split(",").reverse().reduce((function(e,t){var n=t.trim(),r=n.indexOf("=");if(-1!==r){var i=n.slice(0,r),o=n.slice(r+1,t.length);(function(e){return L.test(e)})(i)&&function(e){return F.test(e)&&!B.test(e)}(o)&&e.set(i,o)}return e}),new Map),this._internalState.size>32&&(this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,32))))},e.prototype._keys=function(){return Array.from(this._internalState.keys()).reverse()},e.prototype._clone=function(){var t=new e;return t._internalState=new Map(this._internalState),t},e}();function U(e){return new j(e)}var q=n(43267),$=n(5529),H=n(43419),V=n(70667),z=new(function(){function e(){}return e.prototype.getMeter=function(e,t,n){return b},e}()),W=n(77511),K=n(51724),G="metrics",X=function(){function e(){}return e.getInstance=function(){return this._instance||(this._instance=new e),this._instance},e.prototype.setGlobalMeterProvider=function(e){return(0,W.TG)(G,e,K.G.instance())},e.prototype.getMeterProvider=function(){return(0,W.Rd)(G)||z},e.prototype.getMeter=function(e,t,n){return this.getMeterProvider().getMeter(e,t,n)},e.prototype.disable=function(){(0,W.J_)(G,K.G.instance())},e}().getInstance(),Y=n(41384),Z=n(68235);const Q={context:H.D,diag:V.K,metrics:X,propagation:Y.u,trace:Z.g}},77511:(e,t,n)=>{"use strict";n.d(t,{Rd:()=>p,TG:()=>u,J_:()=>d});var r="object"==typeof globalThis?globalThis:global,i="1.4.1",o=/^(\d+)\.(\d+)\.(\d+)(-(.+))?$/,s=function(e){var t=new Set([e]),n=new Set,r=e.match(o);if(!r)return function(){return!1};var i=+r[1],s=+r[2],a=+r[3];if(null!=r[4])return function(t){return t===e};function c(e){return n.add(e),!1}function l(e){return t.add(e),!0}return function(e){if(t.has(e))return!0;if(n.has(e))return!1;var r=e.match(o);if(!r)return c(e);var u=+r[1],p=+r[2],d=+r[3];return null!=r[4]||i!==u?c(e):0===i?s===p&&a<=d?l(e):c(e):s<=p?l(e):c(e)}}(i),a=i.split(".")[0],c=Symbol.for("opentelemetry.js.api."+a),l=r;function u(e,t,n,r){var o;void 0===r&&(r=!1);var s=l[c]=null!==(o=l[c])&&void 0!==o?o:{version:i};if(!r&&s[e]){var a=new Error("@opentelemetry/api: Attempted duplicate registration of API: "+e);return n.error(a.stack||a.message),!1}return s.version!==i?(a=new Error("@opentelemetry/api: Registration of version v"+s.version+" for "+e+" does not match previously registered API v"+i),n.error(a.stack||a.message),!1):(s[e]=t,n.debug("@opentelemetry/api: Registered a global for "+e+" v"+i+"."),!0)}function p(e){var t,n,r=null===(t=l[c])||void 0===t?void 0:t.version;if(r&&s(r))return null===(n=l[c])||void 0===n?void 0:n[e]}function d(e,t){t.debug("@opentelemetry/api: Unregistering a global for "+e+" v"+i+".");var n=l[c];n&&delete n[e]}},41384:(e,t,n)=>{"use strict";n.d(t,{u:()=>y});var r=n(77511),i=function(){function e(){}return e.prototype.inject=function(e,t){},e.prototype.extract=function(e,t){return e},e.prototype.fields=function(){return[]},e}(),o=n(1521),s=n(6318),a=(0,n(67037).Y)("OpenTelemetry Baggage Key");function c(e){return e.getValue(a)||void 0}function l(){return c(s.c.getInstance().active())}function u(e,t){return e.setValue(a,t)}function p(e){return e.deleteValue(a)}var d=n(2554),h=n(51724),f="propagation",m=new i,g=function(){function e(){this.createBaggage=d.H,this.getBaggage=c,this.getActiveBaggage=l,this.setBaggage=u,this.deleteBaggage=p}return e.getInstance=function(){return this._instance||(this._instance=new e),this._instance},e.prototype.setGlobalPropagator=function(e){return(0,r.TG)(f,e,h.G.instance())},e.prototype.inject=function(e,t,n){return void 0===n&&(n=o.M),this._getGlobalPropagator().inject(e,t,n)},e.prototype.extract=function(e,t,n){return void 0===n&&(n=o.r),this._getGlobalPropagator().extract(e,t,n)},e.prototype.fields=function(){return this._getGlobalPropagator().fields()},e.prototype.disable=function(){(0,r.J_)(f,h.G.instance())},e.prototype._getGlobalPropagator=function(){return(0,r.Rd)(f)||m},e}(),y=g.getInstance()},1521:(e,t,n)=>{"use strict";n.d(t,{M:()=>i,r:()=>r});var r={get:function(e,t){if(null!=e)return e[t]},keys:function(e){return null==e?[]:Object.keys(e)}},i={set:function(e,t,n){null!=e&&(e[t]=n)}}},68235:(e,t,n)=>{"use strict";n.d(t,{g:()=>l});var r=n(77511),i=n(6541),o=n(43267),s=n(20748),a=n(51724),c="trace",l=function(){function e(){this._proxyTracerProvider=new i.K,this.wrapSpanContext=o.kw,this.isSpanContextValid=o.BM,this.deleteSpan=s.TW,this.getSpan=s.Br,this.getActiveSpan=s.HN,this.getSpanContext=s.A3,this.setSpan=s.WZ,this.setSpanContext=s.G3}return e.getInstance=function(){return this._instance||(this._instance=new e),this._instance},e.prototype.setGlobalTracerProvider=function(e){var t=(0,r.TG)(c,this._proxyTracerProvider,a.G.instance());return t&&this._proxyTracerProvider.setDelegate(e),t},e.prototype.getTracerProvider=function(){return(0,r.Rd)(c)||this._proxyTracerProvider},e.prototype.getTracer=function(e,t){return this.getTracerProvider().getTracer(e,t)},e.prototype.disable=function(){(0,r.J_)(c,a.G.instance()),this._proxyTracerProvider=new i.K},e}().getInstance()},55575:(e,t,n)=>{"use strict";n.d(t,{s:()=>i});var r=n(5529),i=function(){function e(e){void 0===e&&(e=r.Rr),this._spanContext=e}return e.prototype.spanContext=function(){return this._spanContext},e.prototype.setAttribute=function(e,t){return this},e.prototype.setAttributes=function(e){return this},e.prototype.addEvent=function(e,t){return this},e.prototype.setStatus=function(e){return this},e.prototype.updateName=function(e){return this},e.prototype.end=function(e){},e.prototype.isRecording=function(){return!1},e.prototype.recordException=function(e,t){},e}()},98730:(e,t,n)=>{"use strict";n.d(t,{E:()=>c});var r=n(6318),i=n(20748),o=n(55575),s=n(43267),a=r.c.getInstance(),c=function(){function e(){}return e.prototype.startSpan=function(e,t,n){if(void 0===n&&(n=a.active()),Boolean(null==t?void 0:t.root))return new o.s;var r,c=n&&(0,i.A3)(n);return"object"==typeof(r=c)&&"string"==typeof r.spanId&&"string"==typeof r.traceId&&"number"==typeof r.traceFlags&&(0,s.BM)(c)?new o.s(c):new o.s},e.prototype.startActiveSpan=function(e,t,n,r){var o,s,c;if(!(arguments.length<2)){2===arguments.length?c=t:3===arguments.length?(o=t,c=n):(o=t,s=n,c=r);var l=null!=s?s:a.active(),u=this.startSpan(e,o,l),p=(0,i.WZ)(l,u);return a.with(p,c,void 0,u)}},e}()},75403:(e,t,n)=>{"use strict";n.d(t,{T:()=>i});var r=new(n(98730).E),i=function(){function e(e,t,n,r){this._provider=e,this.name=t,this.version=n,this.options=r}return e.prototype.startSpan=function(e,t,n){return this._getTracer().startSpan(e,t,n)},e.prototype.startActiveSpan=function(e,t,n,r){var i=this._getTracer();return Reflect.apply(i.startActiveSpan,i,arguments)},e.prototype._getTracer=function(){if(this._delegate)return this._delegate;var e=this._provider.getDelegateTracer(this.name,this.version,this.options);return e?(this._delegate=e,this._delegate):r},e}()},6541:(e,t,n)=>{"use strict";n.d(t,{K:()=>s});var r=n(75403),i=n(98730),o=new(function(){function e(){}return e.prototype.getTracer=function(e,t,n){return new i.E},e}()),s=function(){function e(){}return e.prototype.getTracer=function(e,t,n){var i;return null!==(i=this.getDelegateTracer(e,t,n))&&void 0!==i?i:new r.T(this,e,t,n)},e.prototype.getDelegate=function(){var e;return null!==(e=this._delegate)&&void 0!==e?e:o},e.prototype.setDelegate=function(e){this._delegate=e},e.prototype.getDelegateTracer=function(e,t,n){var r;return null===(r=this._delegate)||void 0===r?void 0:r.getTracer(e,t,n)},e}()},87504:(e,t,n)=>{"use strict";var r;n.d(t,{U:()=>r}),function(e){e[e.NOT_RECORD=0]="NOT_RECORD",e[e.RECORD=1]="RECORD",e[e.RECORD_AND_SAMPLED=2]="RECORD_AND_SAMPLED"}(r||(r={}))},20748:(e,t,n)=>{"use strict";n.d(t,{A3:()=>d,Br:()=>a,G3:()=>p,HN:()=>c,TW:()=>u,WZ:()=>l});var r=n(67037),i=n(55575),o=n(6318),s=(0,r.Y)("OpenTelemetry Context Key SPAN");function a(e){return e.getValue(s)||void 0}function c(){return a(o.c.getInstance().active())}function l(e,t){return e.setValue(s,t)}function u(e){return e.deleteValue(s)}function p(e,t){return l(e,new i.s(t))}function d(e){var t;return null===(t=a(e))||void 0===t?void 0:t.spanContext()}},5529:(e,t,n)=>{"use strict";n.d(t,{AE:()=>o,Rr:()=>s,fQ:()=>i});var r=n(81680),i="0000000000000000",o="00000000000000000000000000000000",s={traceId:o,spanId:i,traceFlags:r.r.NONE}},53454:(e,t,n)=>{"use strict";var r;n.d(t,{M:()=>r}),function(e){e[e.INTERNAL=0]="INTERNAL",e[e.SERVER=1]="SERVER",e[e.CLIENT=2]="CLIENT",e[e.PRODUCER=3]="PRODUCER",e[e.CONSUMER=4]="CONSUMER"}(r||(r={}))},43267:(e,t,n)=>{"use strict";n.d(t,{BM:()=>l,Lc:()=>c,jN:()=>a,kw:()=>u});var r=n(5529),i=n(55575),o=/^([0-9a-f]{32})$/i,s=/^[0-9a-f]{16}$/i;function a(e){return o.test(e)&&e!==r.AE}function c(e){return s.test(e)&&e!==r.fQ}function l(e){return a(e.traceId)&&c(e.spanId)}function u(e){return new i.s(e)}},62527:(e,t,n)=>{"use strict";var r;n.d(t,{Q:()=>r}),function(e){e[e.UNSET=0]="UNSET",e[e.OK=1]="OK",e[e.ERROR=2]="ERROR"}(r||(r={}))},81680:(e,t,n)=>{"use strict";var r;n.d(t,{r:()=>r}),function(e){e[e.NONE=0]="NONE",e[e.SAMPLED=1]="SAMPLED"}(r||(r={}))},21180:(e,t,n)=>{"use strict";var r;n.d(t,{I:()=>r}),function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED"}(r||(r={}))},73618:(e,t,n)=>{"use strict";n.d(t,{Cx:()=>a,H3:()=>l,Vo:()=>r,WM:()=>s,bO:()=>i,bU:()=>o,ef:()=>c});var r="=",i=";",o=",",s="baggage",a=180,c=4096,l=8192},71016:(e,t,n)=>{"use strict";n.d(t,{a:()=>a});var r=n(41384),i=n(64235),o=n(73618),s=n(49002),a=function(){function e(){}return e.prototype.inject=function(e,t,n){var a=r.u.getBaggage(e);if(a&&!(0,i.Ll)(e)){var c=(0,s.getKeyPairs)(a).filter((function(e){return e.length<=o.ef})).slice(0,o.Cx),l=(0,s.serializeKeyPairs)(c);l.length>0&&n.set(t,o.WM,l)}},e.prototype.extract=function(e,t,n){var i=n.get(t,o.WM),a=Array.isArray(i)?i.join(o.bU):i;if(!a)return e;var c={};return 0===a.length?e:(a.split(o.bU).forEach((function(e){var t=(0,s.parsePairKeyValue)(e);if(t){var n={value:t.value};t.metadata&&(n.metadata=t.metadata),c[t.key]=n}})),0===Object.entries(c).length?e:r.u.setBaggage(e,r.u.createBaggage(c)))},e.prototype.fields=function(){return[o.WM]},e}()},49002:(e,t,n)=>{"use strict";n.r(t),n.d(t,{getKeyPairs:()=>s,parseKeyPairsIntoRecord:()=>c,parsePairKeyValue:()=>a,serializeKeyPairs:()=>o});var r=n(2554),i=n(73618);function o(e){return e.reduce((function(e,t){var n=""+e+(""!==e?i.bU:"")+t;return n.length>i.H3?e:n}),"")}function s(e){return e.getAllEntries().map((function(e){var t=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}(e,2),n=t[0],r=t[1],o=encodeURIComponent(n)+"="+encodeURIComponent(r.value);return void 0!==r.metadata&&(o+=i.bO+r.metadata.toString()),o}))}function a(e){var t=e.split(i.bO);if(!(t.length<=0)){var n=t.shift();if(n){var o=n.split(i.Vo);if(2===o.length){var s,a=decodeURIComponent(o[0].trim()),c=decodeURIComponent(o[1].trim());return t.length>0&&(s=(0,r.u)(t.join(i.bO))),{key:a,value:c,metadata:s}}}}}function c(e){return"string"!=typeof e||0===e.length?{}:e.split(i.bU).map((function(e){return a(e)})).filter((function(e){return void 0!==e&&e.value.length>0})).reduce((function(e,t){return e[t.key]=t.value,e}),{})}},96541:(e,t,n)=>{"use strict";n.d(t,{Do:()=>c,FT:()=>s,sy:()=>a});var r=n(70667),i=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},o=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s};function s(e){var t,n,s={};if("object"!=typeof e||null==e)return s;try{for(var l=i(Object.entries(e)),u=l.next();!u.done;u=l.next()){var p=o(u.value,2),d=p[0],h=p[1];a(d)?c(h)?Array.isArray(h)?s[d]=h.slice():s[d]=h:r.K.warn("Invalid attribute value set for key: "+d):r.K.warn("Invalid attribute key: "+d)}}catch(e){t={error:e}}finally{try{u&&!u.done&&(n=l.return)&&n.call(l)}finally{if(t)throw t.error}}return s}function a(e){return"string"==typeof e&&e.length>0}function c(e){return null==e||(Array.isArray(e)?function(e){var t,n,r;try{for(var o=i(e),s=o.next();!s.done;s=o.next()){var a=s.value;if(null!=a){if(!r){if(l(a)){r=typeof a;continue}return!1}if(typeof a!==r)return!1}}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return!0}(e):l(e))}function l(e){switch(typeof e){case"number":case"boolean":case"string":return!0}return!1}},47491:(e,t,n)=>{"use strict";n.d(t,{L:()=>o,c:()=>i});var r=(0,n(3942).x)();function i(e){r=e}function o(e){try{r(e)}catch(e){}}},3942:(e,t,n)=>{"use strict";n.d(t,{x:()=>i});var r=n(70667);function i(){return function(e){r.K.error(function(e){return"string"==typeof e?e:JSON.stringify(function(e){for(var t={},n=e;null!==n;)Object.getOwnPropertyNames(n).forEach((function(e){if(!t[e]){var r=n[e];r&&(t[e]=String(r))}})),n=Object.getPrototypeOf(n);return t}(e))}(e))}}},91357:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>m,J3:()=>u,Jt:()=>c,KO:()=>h,PW:()=>d,U:()=>a,Us:()=>p,X_:()=>g,aE:()=>l,i5:()=>s,ji:()=>f,vF:()=>y});var r=n(80456),i=Math.pow(10,6),o=Math.pow(10,9);function s(e){var t=e/1e3;return[Math.trunc(t),Math.round(e%1e3*i)]}function a(){var e=r.t.timeOrigin;if("number"!=typeof e){var t=r.t;e=t.timing&&t.timing.fetchStart}return e}function c(e){return y(s(a()),s("number"==typeof e?e:r.t.now()))}function l(e){if(m(e))return e;if("number"==typeof e)return e=o&&(n[1]-=o,n[0]+=1),n}},47497:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AlwaysOffSampler:()=>O,AlwaysOnSampler:()=>M,AnchoredClock:()=>i,BindOnceFuture:()=>Z.q,CompositePropagator:()=>x.Y,DEFAULT_ATTRIBUTE_COUNT_LIMIT:()=>$.qG,DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT:()=>$.KR,DEFAULT_ENVIRONMENT:()=>$.J9,DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:()=>$.Ys,DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:()=>$.VH,ExportResultCode:()=>l.I,ParentBasedSampler:()=>B,RPCType:()=>E,RandomIdGenerator:()=>_,SDK_INFO:()=>w.m,TRACE_PARENT_HEADER:()=>C.FX,TRACE_STATE_HEADER:()=>C.C3,TimeoutError:()=>W,TraceIdRatioBasedSampler:()=>j,TraceState:()=>q.n,TracesSamplerValues:()=>V.J,VERSION:()=>u.q,W3CBaggagePropagator:()=>r.a,W3CTraceContextPropagator:()=>C.jf,_globalThis:()=>h,addHrTimes:()=>c.vF,baggageUtils:()=>p,callWithTimeout:()=>K,deleteRPCMetadata:()=>k,getEnv:()=>d.d,getEnvWithoutDefaults:()=>$.vU,getRPCMetadata:()=>R,getTimeOrigin:()=>c.U,globalErrorHandler:()=>s.L,hexToBase64:()=>y,hrTime:()=>c.Jt,hrTimeDuration:()=>c.J3,hrTimeToMicroseconds:()=>c.ji,hrTimeToMilliseconds:()=>c.KO,hrTimeToNanoseconds:()=>c.PW,hrTimeToTimeStamp:()=>c.Us,internal:()=>J,isAttributeKey:()=>o.sy,isAttributeValue:()=>o.Do,isTimeInput:()=>c.X_,isTimeInputHrTime:()=>c.Dt,isTracingSuppressed:()=>U.Ll,isUrlIgnored:()=>X,isWrapped:()=>Y,loggingErrorHandler:()=>a.x,merge:()=>H.T,millisToHrTime:()=>c.i5,otperformance:()=>T.t,parseEnvironment:()=>$.Ds,parseTraceParent:()=>C.j_,sanitizeAttributes:()=>o.FT,setGlobalErrorHandler:()=>s.c,setRPCMetadata:()=>A,suppressTracing:()=>U.hE,timeInputToHrTime:()=>c.aE,unrefTimer:()=>S.g,unsuppressTracing:()=>U.yy,urlMatches:()=>G});var r=n(71016),i=function(){function e(e,t){this._monotonicClock=t,this._epochMillis=e.now(),this._performanceMillis=t.now()}return e.prototype.now=function(){var e=this._monotonicClock.now()-this._performanceMillis;return this._epochMillis+e},e}(),o=n(96541),s=n(47491),a=n(3942),c=n(91357),l=n(21180),u=n(18111),p=n(49002),d=n(41006),h="object"==typeof globalThis?globalThis:global;function f(e){return e>=48&&e<=57?e-48:e>=97&&e<=102?e-87:e-55}var m=Buffer.alloc(8),g=Buffer.alloc(16);function y(e){var t;t=16===e.length?m:32===e.length?g:Buffer.alloc(e.length/2);for(var n=0,r=0;r>>0,4*t);for(t=0;t0);t++)t===e-1&&(v[e-1]=1);return v.toString("hex",0,e)}}var E,T=n(80456),w=n(14398),S=n(88243),x=n(68380),C=n(13096),I=(0,n(67037).Y)("OpenTelemetry SDK Context Key RPC_METADATA");function A(e,t){return e.setValue(I,t)}function k(e){return e.deleteValue(I)}function R(e){return e.getValue(I)}!function(e){e.HTTP="http"}(E||(E={}));var P,N=n(87504),O=function(){function e(){}return e.prototype.shouldSample=function(){return{decision:N.U.NOT_RECORD}},e.prototype.toString=function(){return"AlwaysOffSampler"},e}(),M=function(){function e(){}return e.prototype.shouldSample=function(){return{decision:N.U.RECORD_AND_SAMPLED}},e.prototype.toString=function(){return"AlwaysOnSampler"},e}(),D=n(68235),L=n(43267),F=n(81680),B=function(){function e(e){var t,n,r,i;this._root=e.root,this._root||((0,s.L)(new Error("ParentBasedSampler must have a root sampler configured")),this._root=new M),this._remoteParentSampled=null!==(t=e.remoteParentSampled)&&void 0!==t?t:new M,this._remoteParentNotSampled=null!==(n=e.remoteParentNotSampled)&&void 0!==n?n:new O,this._localParentSampled=null!==(r=e.localParentSampled)&&void 0!==r?r:new M,this._localParentNotSampled=null!==(i=e.localParentNotSampled)&&void 0!==i?i:new O}return e.prototype.shouldSample=function(e,t,n,r,i,o){var s=D.g.getSpanContext(e);return s&&(0,L.BM)(s)?s.isRemote?s.traceFlags&F.r.SAMPLED?this._remoteParentSampled.shouldSample(e,t,n,r,i,o):this._remoteParentNotSampled.shouldSample(e,t,n,r,i,o):s.traceFlags&F.r.SAMPLED?this._localParentSampled.shouldSample(e,t,n,r,i,o):this._localParentNotSampled.shouldSample(e,t,n,r,i,o):this._root.shouldSample(e,t,n,r,i,o)},e.prototype.toString=function(){return"ParentBased{root="+this._root.toString()+", remoteParentSampled="+this._remoteParentSampled.toString()+", remoteParentNotSampled="+this._remoteParentNotSampled.toString()+", localParentSampled="+this._localParentSampled.toString()+", localParentNotSampled="+this._localParentNotSampled.toString()+"}"},e}(),j=function(){function e(e){void 0===e&&(e=0),this._ratio=e,this._ratio=this._normalize(e),this._upperBound=Math.floor(4294967295*this._ratio)}return e.prototype.shouldSample=function(e,t){return{decision:(0,L.jN)(t)&&this._accumulate(t)=1?1:e<=0?0:e},e.prototype._accumulate=function(e){for(var t=0,n=0;n>>0}return t},e}(),U=n(64235),q=n(60658),$=n(22026),H=n(81929),V=n(88483),z=(P=function(e,t){return P=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},P(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}P(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),W=function(e){function t(n){var r=e.call(this,n)||this;return Object.setPrototypeOf(r,t.prototype),r}return z(t,e),t}(Error);function K(e,t){var n,r=new Promise((function(e,r){n=setTimeout((function(){r(new W("Operation timed out."))}),t)}));return Promise.race([e,r]).then((function(e){return clearTimeout(n),e}),(function(e){throw clearTimeout(n),e}))}function G(e,t){return"string"==typeof t?e===t:!!e.match(t)}function X(e,t){var n,r;if(!t)return!1;try{for(var i=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(t),o=i.next();!o.done;o=i.next())if(G(e,o.value))return!0}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return!1}function Y(e){return"function"==typeof e&&"function"==typeof e.__original&&"function"==typeof e.__unwrap&&!0===e.__wrapped}var Z=n(62663),Q=n(43419),J={_export:function(e,t){return new Promise((function(n){Q.D.with((0,U.hE)(Q.D.active()),(function(){e.export(t,(function(e){n(e)}))}))}))}}},41006:(e,t,n)=>{"use strict";n.d(t,{d:()=>o});var r=n(22037),i=n(22026);function o(){var e=(0,i.Ds)(process.env);return Object.assign({HOSTNAME:r.hostname()},i.J9,e)}},80456:(e,t,n)=>{"use strict";n.d(t,{t:()=>r});var r=require("perf_hooks").performance},14398:(e,t,n)=>{"use strict";n.d(t,{m:()=>s});var r,i=n(18111),o=n(65844),s=((r={})[o.R9.TELEMETRY_SDK_NAME]="opentelemetry",r[o.R9.PROCESS_RUNTIME_NAME]="node",r[o.R9.TELEMETRY_SDK_LANGUAGE]=o.Te.NODEJS,r[o.R9.TELEMETRY_SDK_VERSION]=i.q,r)},88243:(e,t,n)=>{"use strict";function r(e){e.unref()}n.d(t,{g:()=>r})},68380:(e,t,n)=>{"use strict";n.d(t,{Y:()=>i});var r=n(70667),i=function(){function e(e){var t;void 0===e&&(e={}),this._propagators=null!==(t=e.propagators)&&void 0!==t?t:[],this._fields=Array.from(new Set(this._propagators.map((function(e){return"function"==typeof e.fields?e.fields():[]})).reduce((function(e,t){return e.concat(t)}),[])))}return e.prototype.inject=function(e,t,n){var i,o;try{for(var s=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(this._propagators),a=s.next();!a.done;a=s.next()){var c=a.value;try{c.inject(e,t,n)}catch(e){r.K.warn("Failed to inject with "+c.constructor.name+". Err: "+e.message)}}}catch(e){i={error:e}}finally{try{a&&!a.done&&(o=s.return)&&o.call(s)}finally{if(i)throw i.error}}},e.prototype.extract=function(e,t,n){return this._propagators.reduce((function(e,i){try{return i.extract(e,t,n)}catch(e){r.K.warn("Failed to inject with "+i.constructor.name+". Err: "+e.message)}return e}),e)},e.prototype.fields=function(){return this._fields.slice()},e}()},60658:(e,t,n)=>{"use strict";n.d(t,{n:()=>a});var r="[_0-9a-z-*/]",i=new RegExp("^(?:[a-z]"+r+"{0,255}|[a-z0-9]"+r+"{0,240}@[a-z]"+r+"{0,13})$"),o=/^[ -~]{0,255}[!-~]$/,s=/,|=/,a=function(){function e(e){this._internalState=new Map,e&&this._parse(e)}return e.prototype.set=function(e,t){var n=this._clone();return n._internalState.has(e)&&n._internalState.delete(e),n._internalState.set(e,t),n},e.prototype.unset=function(e){var t=this._clone();return t._internalState.delete(e),t},e.prototype.get=function(e){return this._internalState.get(e)},e.prototype.serialize=function(){var e=this;return this._keys().reduce((function(t,n){return t.push(n+"="+e.get(n)),t}),[]).join(",")},e.prototype._parse=function(e){e.length>512||(this._internalState=e.split(",").reverse().reduce((function(e,t){var n=t.trim(),r=n.indexOf("=");if(-1!==r){var a=n.slice(0,r),c=n.slice(r+1,t.length);(function(e){return i.test(e)})(a)&&function(e){return o.test(e)&&!s.test(e)}(c)&&e.set(a,c)}return e}),new Map),this._internalState.size>32&&(this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,32))))},e.prototype._keys=function(){return Array.from(this._internalState.keys()).reverse()},e.prototype._clone=function(){var t=new e;return t._internalState=new Map(this._internalState),t},e}()},13096:(e,t,n)=>{"use strict";n.d(t,{C3:()=>l,FX:()=>c,j_:()=>p,jf:()=>d});var r=n(68235),i=n(43267),o=n(81680),s=n(64235),a=n(60658),c="traceparent",l="tracestate",u=new RegExp("^\\s?((?!ff)[\\da-f]{2})-((?![0]{32})[\\da-f]{32})-((?![0]{16})[\\da-f]{16})-([\\da-f]{2})(-.*)?\\s?$");function p(e){var t=u.exec(e);return t?"00"===t[1]&&t[5]?null:{traceId:t[2],spanId:t[3],traceFlags:parseInt(t[4],16)}:null}var d=function(){function e(){}return e.prototype.inject=function(e,t,n){var a=r.g.getSpanContext(e);if(a&&!(0,s.Ll)(e)&&(0,i.BM)(a)){var u="00-"+a.traceId+"-"+a.spanId+"-0"+Number(a.traceFlags||o.r.NONE).toString(16);n.set(t,c,u),a.traceState&&n.set(t,l,a.traceState.serialize())}},e.prototype.extract=function(e,t,n){var i=n.get(t,c);if(!i)return e;var o=Array.isArray(i)?i[0]:i;if("string"!=typeof o)return e;var s=p(o);if(!s)return e;s.isRemote=!0;var u=n.get(t,l);if(u){var d=Array.isArray(u)?u.join(","):u;s.traceState=new a.n("string"==typeof d?d:void 0)}return r.g.setSpanContext(e,s)},e.prototype.fields=function(){return[c,l]},e}()},64235:(e,t,n)=>{"use strict";n.d(t,{Ll:()=>s,hE:()=>i,yy:()=>o});var r=(0,n(67037).Y)("OpenTelemetry SDK Context Key SUPPRESS_TRACING");function i(e){return e.setValue(r,!0)}function o(e){return e.deleteValue(r)}function s(e){return!0===e.getValue(r)}},62663:(e,t,n)=>{"use strict";n.d(t,{q:()=>s});var r=function(){function e(){var e=this;this._promise=new Promise((function(t,n){e._resolve=t,e._reject=n}))}return Object.defineProperty(e.prototype,"promise",{get:function(){return this._promise},enumerable:!1,configurable:!0}),e.prototype.resolve=function(e){this._resolve(e)},e.prototype.reject=function(e){this._reject(e)},e}(),i=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s},o=function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i{"use strict";n.d(t,{qG:()=>h,KR:()=>d,J9:()=>g,Ys:()=>f,VH:()=>m,vU:()=>w,Ds:()=>T});var r=n(70339),i=n(88483),o="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},s=["OTEL_SDK_DISABLED"];function a(e){return s.indexOf(e)>-1}var c=["OTEL_BSP_EXPORT_TIMEOUT","OTEL_BSP_MAX_EXPORT_BATCH_SIZE","OTEL_BSP_MAX_QUEUE_SIZE","OTEL_BSP_SCHEDULE_DELAY","OTEL_BLRP_EXPORT_TIMEOUT","OTEL_BLRP_MAX_EXPORT_BATCH_SIZE","OTEL_BLRP_MAX_QUEUE_SIZE","OTEL_BLRP_SCHEDULE_DELAY","OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_EVENT_COUNT_LIMIT","OTEL_SPAN_LINK_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT","OTEL_EXPORTER_OTLP_TIMEOUT","OTEL_EXPORTER_OTLP_TRACES_TIMEOUT","OTEL_EXPORTER_OTLP_METRICS_TIMEOUT","OTEL_EXPORTER_JAEGER_AGENT_PORT"];function l(e){return c.indexOf(e)>-1}var u=["OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS"];function p(e){return u.indexOf(e)>-1}var d=1/0,h=128,f=128,m=128,g={OTEL_SDK_DISABLED:!1,CONTAINER_NAME:"",ECS_CONTAINER_METADATA_URI_V4:"",ECS_CONTAINER_METADATA_URI:"",HOSTNAME:"",KUBERNETES_SERVICE_HOST:"",NAMESPACE:"",OTEL_BSP_EXPORT_TIMEOUT:3e4,OTEL_BSP_MAX_EXPORT_BATCH_SIZE:512,OTEL_BSP_MAX_QUEUE_SIZE:2048,OTEL_BSP_SCHEDULE_DELAY:5e3,OTEL_BLRP_EXPORT_TIMEOUT:3e4,OTEL_BLRP_MAX_EXPORT_BATCH_SIZE:512,OTEL_BLRP_MAX_QUEUE_SIZE:2048,OTEL_BLRP_SCHEDULE_DELAY:5e3,OTEL_EXPORTER_JAEGER_AGENT_HOST:"",OTEL_EXPORTER_JAEGER_AGENT_PORT:6832,OTEL_EXPORTER_JAEGER_ENDPOINT:"",OTEL_EXPORTER_JAEGER_PASSWORD:"",OTEL_EXPORTER_JAEGER_USER:"",OTEL_EXPORTER_OTLP_ENDPOINT:"",OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:"",OTEL_EXPORTER_OTLP_METRICS_ENDPOINT:"",OTEL_EXPORTER_OTLP_HEADERS:"",OTEL_EXPORTER_OTLP_TRACES_HEADERS:"",OTEL_EXPORTER_OTLP_METRICS_HEADERS:"",OTEL_EXPORTER_OTLP_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_TRACES_TIMEOUT:1e4,OTEL_EXPORTER_OTLP_METRICS_TIMEOUT:1e4,OTEL_EXPORTER_ZIPKIN_ENDPOINT:"http://localhost:9411/api/v2/spans",OTEL_LOG_LEVEL:r.n.INFO,OTEL_NO_PATCH_MODULES:[],OTEL_PROPAGATORS:["tracecontext","baggage"],OTEL_RESOURCE_ATTRIBUTES:"",OTEL_SERVICE_NAME:"",OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT:d,OTEL_ATTRIBUTE_COUNT_LIMIT:h,OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT:d,OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT:h,OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT:d,OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT:h,OTEL_SPAN_EVENT_COUNT_LIMIT:128,OTEL_SPAN_LINK_COUNT_LIMIT:128,OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT:f,OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT:m,OTEL_TRACES_EXPORTER:"",OTEL_TRACES_SAMPLER:i.J.ParentBasedAlwaysOn,OTEL_TRACES_SAMPLER_ARG:"",OTEL_LOGS_EXPORTER:"",OTEL_EXPORTER_OTLP_INSECURE:"",OTEL_EXPORTER_OTLP_TRACES_INSECURE:"",OTEL_EXPORTER_OTLP_METRICS_INSECURE:"",OTEL_EXPORTER_OTLP_CERTIFICATE:"",OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE:"",OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE:"",OTEL_EXPORTER_OTLP_COMPRESSION:"",OTEL_EXPORTER_OTLP_TRACES_COMPRESSION:"",OTEL_EXPORTER_OTLP_METRICS_COMPRESSION:"",OTEL_EXPORTER_OTLP_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY:"",OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE:"",OTEL_EXPORTER_OTLP_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_TRACES_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_METRICS_PROTOCOL:"http/protobuf",OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:"cumulative"};function y(e,t,n){if(void 0!==n[e]){var r=String(n[e]);t[e]="true"===r.toLowerCase()}}function _(e,t,n,r,i){if(void 0===r&&(r=-1/0),void 0===i&&(i=1/0),void 0!==n[e]){var o=Number(n[e]);isNaN(o)||(t[e]=oi?i:o)}}function v(e,t,n,r){void 0===r&&(r=",");var i=n[e];"string"==typeof i&&(t[e]=i.split(r).map((function(e){return e.trim()})))}var b={ALL:r.n.ALL,VERBOSE:r.n.VERBOSE,DEBUG:r.n.DEBUG,INFO:r.n.INFO,WARN:r.n.WARN,ERROR:r.n.ERROR,NONE:r.n.NONE};function E(e,t,n){var r=n[e];if("string"==typeof r){var i=b[r.toUpperCase()];null!=i&&(t[e]=i)}}function T(e){var t={};for(var n in g){var r=n;if("OTEL_LOG_LEVEL"===r)E(r,t,e);else if(a(r))y(r,t,e);else if(l(r))_(r,t,e);else if(p(r))v(r,t,e);else{var i=e[r];null!=i&&(t[r]=String(i))}}return t}function w(){return"undefined"!=typeof process&&process&&process.env?T(process.env):T(o)}},81929:(e,t,n)=>{"use strict";n.d(t,{T:()=>h});var r,i,o=Function.prototype.toString,s=o.call(Object),a=(r=Object.getPrototypeOf,i=Object,function(e){return r(i(e))}),c=Object.prototype,l=c.hasOwnProperty,u=Symbol?Symbol.toStringTag:void 0,p=c.toString;function d(e){if(!function(e){return null!=e&&"object"==typeof e}(e)||"[object Object]"!==function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":u&&u in Object(e)?function(e){var t=l.call(e,u),n=e[u],r=!1;try{e[u]=void 0,r=!0}catch(e){}var i=p.call(e);return r&&(t?e[u]=n:delete e[u]),i}(e):function(e){return p.call(e)}(e)}(e))return!1;var t=a(e);if(null===t)return!0;var n=l.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&o.call(n)===s}function h(){for(var e=[],t=0;t0;)n=m(n,e.shift(),0,r);return n}function f(e){return y(e)?e.slice():e}function m(e,t,n,r){var i;if(void 0===n&&(n=0),!(n>20)){if(n++,b(e)||b(t)||_(t))i=f(t);else if(y(e)){if(i=e.slice(),y(t))for(var o=0,s=t.length;o{"use strict";var r;n.d(t,{J:()=>r}),function(e){e.AlwaysOff="always_off",e.AlwaysOn="always_on",e.ParentBasedAlwaysOff="parentbased_always_off",e.ParentBasedAlwaysOn="parentbased_always_on",e.ParentBasedTraceIdRatio="parentbased_traceidratio",e.TraceIdRatio="traceidratio"}(r||(r={}))},18111:(e,t,n)=>{"use strict";n.d(t,{q:()=>r});var r="1.12.0"},29555:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AlwaysOffSampler:()=>E,AlwaysOnSampler:()=>T,BasicTracerProvider:()=>re,BatchSpanProcessor:()=>ne,ConsoleSpanExporter:()=>ie,ForceFlushState:()=>F,InMemorySpanExporter:()=>oe,NoopSpanProcessor:()=>Y,ParentBasedSampler:()=>x,RandomIdGenerator:()=>O,SamplingDecision:()=>r,SimpleSpanProcessor:()=>ae,Span:()=>_,TraceIdRatioBasedSampler:()=>C,Tracer:()=>B});var r,i=n(43419),o=n(68235),s=n(70667),a=n(5529),c=n(53454),l=n(87504),u=n(81680),p=n(64235),d=n(96541),h=n(62527),f=n(80456),m=n(91357),g=n(38543),y=function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s},_=function(){function e(e,t,n,r,i,o,s,a,c){void 0===s&&(s=[]),this.attributes={},this.links=[],this.events=[],this._droppedAttributesCount=0,this._droppedEventsCount=0,this._droppedLinksCount=0,this.status={code:h.Q.UNSET},this.endTime=[0,0],this._ended=!1,this._duration=[-1,-1],this.name=n,this._spanContext=r,this.parentSpanId=o,this.kind=i,this.links=s;var l=Date.now();this._performanceStartTime=f.t.now(),this._performanceOffset=l-(this._performanceStartTime+(0,m.U)()),this._startTimeProvided=null!=a,this.startTime=this._getTime(null!=a?a:l),this.resource=e.resource,this.instrumentationLibrary=e.instrumentationLibrary,this._spanLimits=e.getSpanLimits(),this._spanProcessor=e.getActiveSpanProcessor(),this._spanProcessor.onStart(this,t),this._attributeValueLengthLimit=this._spanLimits.attributeValueLengthLimit||0}return e.prototype.spanContext=function(){return this._spanContext},e.prototype.setAttribute=function(e,t){return null==t||this._isSpanEnded()?this:0===e.length?(s.K.warn("Invalid attribute key: "+e),this):(0,d.Do)(t)?Object.keys(this.attributes).length>=this._spanLimits.attributeCountLimit&&!Object.prototype.hasOwnProperty.call(this.attributes,e)?(this._droppedAttributesCount++,this):(this.attributes[e]=this._truncateToSize(t),this):(s.K.warn("Invalid attribute value set for key: "+e),this)},e.prototype.setAttributes=function(e){var t,n;try{for(var r=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(Object.entries(e)),i=r.next();!i.done;i=r.next()){var o=y(i.value,2),s=o[0],a=o[1];this.setAttribute(s,a)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}return this},e.prototype.addEvent=function(e,t,n){if(this._isSpanEnded())return this;if(0===this._spanLimits.eventCountLimit)return s.K.warn("No events allowed."),this._droppedEventsCount++,this;this.events.length>=this._spanLimits.eventCountLimit&&(s.K.warn("Dropping extra events."),this.events.shift(),this._droppedEventsCount++),(0,m.X_)(t)&&((0,m.X_)(n)||(n=t),t=void 0);var r=(0,d.FT)(t);return this.events.push({name:e,attributes:r,time:this._getTime(n),droppedAttributesCount:0}),this},e.prototype.setStatus=function(e){return this._isSpanEnded()||(this.status=e),this},e.prototype.updateName=function(e){return this._isSpanEnded()||(this.name=e),this},e.prototype.end=function(e){this._isSpanEnded()?s.K.error(this.name+" "+this._spanContext.traceId+"-"+this._spanContext.spanId+" - You can only call end() on a span once."):(this._ended=!0,this.endTime=this._getTime(e),this._duration=(0,m.J3)(this.startTime,this.endTime),this._duration[0]<0&&(s.K.warn("Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.",this.startTime,this.endTime),this.endTime=this.startTime.slice(),this._duration=[0,0]),this._spanProcessor.onEnd(this))},e.prototype._getTime=function(e){if("number"==typeof e&&e=1?1:e<=0?0:e},e.prototype._accumulate=function(e){for(var t=0,n=0;n>>0}return t},e}(),I=(0,v.d)(),A=b.J.AlwaysOn;function k(){return{sampler:R(I),forceFlushTimeoutMillis:3e4,generalLimits:{attributeValueLengthLimit:(0,v.d)().OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,attributeCountLimit:(0,v.d)().OTEL_ATTRIBUTE_COUNT_LIMIT},spanLimits:{attributeValueLengthLimit:(0,v.d)().OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,attributeCountLimit:(0,v.d)().OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,linkCountLimit:(0,v.d)().OTEL_SPAN_LINK_COUNT_LIMIT,eventCountLimit:(0,v.d)().OTEL_SPAN_EVENT_COUNT_LIMIT,attributePerEventCountLimit:(0,v.d)().OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,attributePerLinkCountLimit:(0,v.d)().OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT}}}function R(e){switch(void 0===e&&(e=(0,v.d)()),e.OTEL_TRACES_SAMPLER){case b.J.AlwaysOn:return new T;case b.J.AlwaysOff:return new E;case b.J.ParentBasedAlwaysOn:return new x({root:new T});case b.J.ParentBasedAlwaysOff:return new x({root:new E});case b.J.TraceIdRatio:return new C(P(e));case b.J.ParentBasedTraceIdRatio:return new x({root:new C(P(e))});default:return s.K.error('OTEL_TRACES_SAMPLER value "'+e.OTEL_TRACES_SAMPLER+" invalid, defaulting to "+A+'".'),new T}}function P(e){if(void 0===e.OTEL_TRACES_SAMPLER_ARG||""===e.OTEL_TRACES_SAMPLER_ARG)return s.K.error("OTEL_TRACES_SAMPLER_ARG is blank, defaulting to 1."),1;var t=Number(e.OTEL_TRACES_SAMPLER_ARG);return isNaN(t)?(s.K.error("OTEL_TRACES_SAMPLER_ARG="+e.OTEL_TRACES_SAMPLER_ARG+" was given, but it is invalid, defaulting to 1."),1):t<0||t>1?(s.K.error("OTEL_TRACES_SAMPLER_ARG="+e.OTEL_TRACES_SAMPLER_ARG+" was given, but it is out of range ([0..1]), defaulting to 1."),1):t}var N=n(22026),O=function(){this.generateTraceId=D(16),this.generateSpanId=D(8)},M=Buffer.allocUnsafe(16);function D(e){return function(){for(var t=0;t>>0,4*t);for(t=0;t0);t++)t===e-1&&(M[e-1]=1);return M.toString("hex",0,e)}}var L,F,B=function(){function e(e,t,n){this._tracerProvider=n;var r,i,o,s,a=(r=t,i={sampler:R()},o=k(),(s=Object.assign({},o,i,r)).generalLimits=Object.assign({},o.generalLimits,r.generalLimits||{}),s.spanLimits=Object.assign({},o.spanLimits,r.spanLimits||{}),s);this._sampler=a.sampler,this._generalLimits=a.generalLimits,this._spanLimits=a.spanLimits,this._idGenerator=t.idGenerator||new O,this.resource=n.resource,this.instrumentationLibrary=e}return e.prototype.startSpan=function(e,t,n){var r,h,f;void 0===t&&(t={}),void 0===n&&(n=i.D.active()),t.root&&(n=o.g.deleteSpan(n));var m=o.g.getSpan(n);if((0,p.Ll)(n))return s.K.debug("Instrumentation suppressed, returning Noop Span"),o.g.wrapSpanContext(a.Rr);var g,y,v,b=null==m?void 0:m.spanContext(),E=this._idGenerator.generateSpanId();b&&o.g.isSpanContextValid(b)?(g=b.traceId,y=b.traceState,v=b.spanId):g=this._idGenerator.generateTraceId();var T=null!==(r=t.kind)&&void 0!==r?r:c.M.INTERNAL,w=(null!==(h=t.links)&&void 0!==h?h:[]).map((function(e){return{context:e.context,attributes:(0,d.FT)(e.attributes)}})),S=(0,d.FT)(t.attributes),x=this._sampler.shouldSample(n,g,e,T,S,w);y=null!==(f=x.traceState)&&void 0!==f?f:y;var C={traceId:g,spanId:E,traceFlags:x.decision===l.U.RECORD_AND_SAMPLED?u.r.SAMPLED:u.r.NONE,traceState:y};if(x.decision===l.U.NOT_RECORD)return s.K.debug("Recording is off, propagating context in a non-recording span"),o.g.wrapSpanContext(C);var I=new _(this,n,e,C,T,v,w,t.startTime),A=(0,d.FT)(Object.assign(S,x.attributes));return I.setAttributes(A),I},e.prototype.startActiveSpan=function(e,t,n,r){var s,a,c;if(!(arguments.length<2)){2===arguments.length?c=t:3===arguments.length?(s=t,c=n):(s=t,a=n,c=r);var l=null!=a?a:i.D.active(),u=this.startSpan(e,s,l),p=o.g.setSpan(l,u);return i.D.with(p,c,void 0,u)}},e.prototype.getGeneralLimits=function(){return this._generalLimits},e.prototype.getSpanLimits=function(){return this._spanLimits},e.prototype.getActiveSpanProcessor=function(){return this._tracerProvider.getActiveSpanProcessor()},e}(),j=n(41384),U=n(81929),q=n(68380),$=n(13096),H=n(71016),V=n(65844),z=n(14398),W=function(){return W=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}(e,2),o=i[0],s=i[1];return W(W(W(W({},r._syncAttributes),o),null!==(n=t._syncAttributes)&&void 0!==n?n:t.attributes),s)}));return new e(i,o)},e.EMPTY=new e({}),e}(),G=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},X=function(){function e(e){this._spanProcessors=e}return e.prototype.forceFlush=function(){var e,t,n=[];try{for(var r=G(this._spanProcessors),i=r.next();!i.done;i=r.next()){var o=i.value;n.push(o.forceFlush())}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return new Promise((function(e){Promise.all(n).then((function(){e()})).catch((function(t){(0,S.L)(t||new Error("MultiSpanProcessor: forceFlush failed")),e()}))}))},e.prototype.onStart=function(e,t){var n,r;try{for(var i=G(this._spanProcessors),o=i.next();!o.done;o=i.next())o.value.onStart(e,t)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}},e.prototype.onEnd=function(e){var t,n;try{for(var r=G(this._spanProcessors),i=r.next();!i.done;i=r.next())i.value.onEnd(e)}catch(e){t={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(t)throw t.error}}},e.prototype.shutdown=function(){var e,t,n=[];try{for(var r=G(this._spanProcessors),i=r.next();!i.done;i=r.next()){var o=i.value;n.push(o.shutdown())}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}return new Promise((function(e,t){Promise.all(n).then((function(){e()}),t)}))},e}(),Y=function(){function e(){}return e.prototype.onStart=function(e,t){},e.prototype.onEnd=function(e){},e.prototype.shutdown=function(){return Promise.resolve()},e.prototype.forceFlush=function(){return Promise.resolve()},e}(),Z=n(62663),Q=n(21180),J=n(88243),ee=function(){function e(e,t){this._exporter=e,this._finishedSpans=[],this._droppedSpansCount=0;var n=(0,v.d)();this._maxExportBatchSize="number"==typeof(null==t?void 0:t.maxExportBatchSize)?t.maxExportBatchSize:n.OTEL_BSP_MAX_EXPORT_BATCH_SIZE,this._maxQueueSize="number"==typeof(null==t?void 0:t.maxQueueSize)?t.maxQueueSize:n.OTEL_BSP_MAX_QUEUE_SIZE,this._scheduledDelayMillis="number"==typeof(null==t?void 0:t.scheduledDelayMillis)?t.scheduledDelayMillis:n.OTEL_BSP_SCHEDULE_DELAY,this._exportTimeoutMillis="number"==typeof(null==t?void 0:t.exportTimeoutMillis)?t.exportTimeoutMillis:n.OTEL_BSP_EXPORT_TIMEOUT,this._shutdownOnce=new Z.q(this._shutdown,this),this._maxExportBatchSize>this._maxQueueSize&&(s.K.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"),this._maxExportBatchSize=this._maxQueueSize)}return e.prototype.forceFlush=function(){return this._shutdownOnce.isCalled?this._shutdownOnce.promise:this._flushAll()},e.prototype.onStart=function(e,t){},e.prototype.onEnd=function(e){this._shutdownOnce.isCalled||0!=(e.spanContext().traceFlags&u.r.SAMPLED)&&this._addToBuffer(e)},e.prototype.shutdown=function(){return this._shutdownOnce.call()},e.prototype._shutdown=function(){var e=this;return Promise.resolve().then((function(){return e.onShutdown()})).then((function(){return e._flushAll()})).then((function(){return e._exporter.shutdown()}))},e.prototype._addToBuffer=function(e){if(this._finishedSpans.length>=this._maxQueueSize)return 0===this._droppedSpansCount&&s.K.debug("maxQueueSize reached, dropping spans"),void this._droppedSpansCount++;this._droppedSpansCount>0&&(s.K.warn("Dropped "+this._droppedSpansCount+" spans because maxQueueSize reached"),this._droppedSpansCount=0),this._finishedSpans.push(e),this._maybeStartTimer()},e.prototype._flushAll=function(){var e=this;return new Promise((function(t,n){for(var r=[],i=0,o=Math.ceil(e._finishedSpans.length/e._maxExportBatchSize);i0&&(e._clearTimer(),e._maybeStartTimer())})).catch((function(e){(0,S.L)(e)}))}),this._scheduledDelayMillis),(0,J.g)(this._timer))},e.prototype._clearTimer=function(){void 0!==this._timer&&(clearTimeout(this._timer),this._timer=void 0)},e}(),te=(L=function(e,t){return L=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},L(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}L(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),ne=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return te(t,e),t.prototype.onShutdown=function(){},t}(ee);!function(e){e[e.resolved=0]="resolved",e[e.timeout=1]="timeout",e[e.error=2]="error",e[e.unresolved=3]="unresolved"}(F||(F={}));var re=function(){function e(e){var t;void 0===e&&(e={}),this._registeredSpanProcessors=[],this._tracers=new Map;var n=(0,U.T)({},k(),function(e){var t,n,r,i,o,s,a,c,l,u,p,d,h=Object.assign({},e.spanLimits),f=(0,N.vU)();return h.attributeCountLimit=null!==(s=null!==(o=null!==(i=null!==(n=null===(t=e.spanLimits)||void 0===t?void 0:t.attributeCountLimit)&&void 0!==n?n:null===(r=e.generalLimits)||void 0===r?void 0:r.attributeCountLimit)&&void 0!==i?i:f.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT)&&void 0!==o?o:f.OTEL_ATTRIBUTE_COUNT_LIMIT)&&void 0!==s?s:N.qG,h.attributeValueLengthLimit=null!==(d=null!==(p=null!==(u=null!==(c=null===(a=e.spanLimits)||void 0===a?void 0:a.attributeValueLengthLimit)&&void 0!==c?c:null===(l=e.generalLimits)||void 0===l?void 0:l.attributeValueLengthLimit)&&void 0!==u?u:f.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT)&&void 0!==p?p:f.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT)&&void 0!==d?d:N.KR,Object.assign({},e,{spanLimits:h})}(e));this.resource=null!==(t=n.resource)&&void 0!==t?t:K.empty(),this.resource=K.default().merge(this.resource),this._config=Object.assign({},n,{resource:this.resource});var r=this._buildExporterFromEnv();if(void 0!==r){var i=new ne(r);this.activeSpanProcessor=i}else this.activeSpanProcessor=new Y}return e.prototype.getTracer=function(e,t,n){var r=e+"@"+(t||"")+":"+((null==n?void 0:n.schemaUrl)||"");return this._tracers.has(r)||this._tracers.set(r,new B({name:e,version:t,schemaUrl:null==n?void 0:n.schemaUrl},this._config,this)),this._tracers.get(r)},e.prototype.addSpanProcessor=function(e){0===this._registeredSpanProcessors.length&&this.activeSpanProcessor.shutdown().catch((function(e){return s.K.error("Error while trying to shutdown current span processor",e)})),this._registeredSpanProcessors.push(e),this.activeSpanProcessor=new X(this._registeredSpanProcessors)},e.prototype.getActiveSpanProcessor=function(){return this.activeSpanProcessor},e.prototype.register=function(e){void 0===e&&(e={}),o.g.setGlobalTracerProvider(this),void 0===e.propagator&&(e.propagator=this._buildPropagatorFromEnv()),e.contextManager&&i.D.setGlobalContextManager(e.contextManager),e.propagator&&j.u.setGlobalPropagator(e.propagator)},e.prototype.forceFlush=function(){var e=this._config.forceFlushTimeoutMillis,t=this._registeredSpanProcessors.map((function(t){return new Promise((function(n){var r,i=setTimeout((function(){n(new Error("Span processor did not completed within timeout period of "+e+" ms")),r=F.timeout}),e);t.forceFlush().then((function(){clearTimeout(i),r!==F.timeout&&(r=F.resolved,n(r))})).catch((function(e){clearTimeout(i),r=F.error,n(e)}))}))}));return new Promise((function(e,n){Promise.all(t).then((function(t){var r=t.filter((function(e){return e!==F.resolved}));r.length>0?n(r):e()})).catch((function(e){return n([e])}))}))},e.prototype.shutdown=function(){return this.activeSpanProcessor.shutdown()},e.prototype._getPropagator=function(e){var t;return null===(t=this.constructor._registeredPropagators.get(e))||void 0===t?void 0:t()},e.prototype._getSpanExporter=function(e){var t;return null===(t=this.constructor._registeredExporters.get(e))||void 0===t?void 0:t()},e.prototype._buildPropagatorFromEnv=function(){var e=this,t=Array.from(new Set((0,v.d)().OTEL_PROPAGATORS)),n=t.map((function(t){var n=e._getPropagator(t);return n||s.K.warn('Propagator "'+t+'" requested through environment variable is unavailable.'),n})).reduce((function(e,t){return t&&e.push(t),e}),[]);return 0===n.length?void 0:1===t.length?n[0]:new q.Y({propagators:n})},e.prototype._buildExporterFromEnv=function(){var e=(0,v.d)().OTEL_TRACES_EXPORTER;if("none"!==e&&""!==e){var t=this._getSpanExporter(e);return t||s.K.error('Exporter "'+e+'" requested through environment variable is unavailable.'),t}},e._registeredPropagators=new Map([["tracecontext",function(){return new $.jf}],["baggage",function(){return new H.a}]]),e._registeredExporters=new Map,e}(),ie=function(){function e(){}return e.prototype.export=function(e,t){return this._sendSpans(e,t)},e.prototype.shutdown=function(){return this._sendSpans([]),Promise.resolve()},e.prototype._exportInfo=function(e){var t;return{traceId:e.spanContext().traceId,parentId:e.parentSpanId,traceState:null===(t=e.spanContext().traceState)||void 0===t?void 0:t.serialize(),name:e.name,id:e.spanContext().spanId,kind:e.kind,timestamp:(0,m.ji)(e.startTime),duration:(0,m.ji)(e.duration),attributes:e.attributes,status:e.status,events:e.events,links:e.links}},e.prototype._sendSpans=function(e,t){var n,r;try{for(var i=function(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),o=i.next();!o.done;o=i.next()){var s=o.value;console.dir(this._exportInfo(s),{depth:3})}}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}if(t)return t({code:Q.I.SUCCESS})},e}(),oe=function(){function e(){this._finishedSpans=[],this._stopped=!1}return e.prototype.export=function(e,t){var n;if(this._stopped)return t({code:Q.I.FAILED,error:new Error("Exporter has been stopped")});(n=this._finishedSpans).push.apply(n,function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i0)&&!(r=o.next()).done;)s.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return s}(e),!1)),setTimeout((function(){return t({code:Q.I.SUCCESS})}),0)},e.prototype.shutdown=function(){return this._stopped=!0,this._finishedSpans=[],Promise.resolve()},e.prototype.reset=function(){this._finishedSpans=[]},e.prototype.getFinishedSpans=function(){return this._finishedSpans},e}(),se=n(47497),ae=function(){function e(e){this._exporter=e,this._shutdownOnce=new Z.q(this._shutdown,this),this._unresolvedExports=new Set}return e.prototype.forceFlush=function(){return e=this,t=void 0,r=function(){return function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,r=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]{"use strict";n.r(t),n.d(t,{AwsEcsLaunchtypeValues:()=>i._t,CloudPlatformValues:()=>i.CY,CloudProviderValues:()=>i.LH,DbCassandraConsistencyLevelValues:()=>r.xM,DbSystemValues:()=>r.fL,FaasDocumentOperationValues:()=>r.ZI,FaasInvokedProviderValues:()=>r.o0,FaasTriggerValues:()=>r.iD,HostArchValues:()=>i.IV,HttpFlavorValues:()=>r.Yi,MessageTypeValues:()=>r._J,MessagingDestinationKindValues:()=>r.y8,MessagingOperationValues:()=>r.jU,NetHostConnectionSubtypeValues:()=>r.oP,NetHostConnectionTypeValues:()=>r.ZM,NetTransportValues:()=>r.Di,OsTypeValues:()=>i.er,RpcGrpcStatusCodeValues:()=>r.yG,SemanticAttributes:()=>r.og,SemanticResourceAttributes:()=>i.R9,TelemetrySdkLanguageValues:()=>i.Te});var r=n(38543),i=n(65844)},65844:(e,t,n)=>{"use strict";n.d(t,{CY:()=>o,IV:()=>a,LH:()=>i,R9:()=>r,Te:()=>l,_t:()=>s,er:()=>c});var r={CLOUD_PROVIDER:"cloud.provider",CLOUD_ACCOUNT_ID:"cloud.account.id",CLOUD_REGION:"cloud.region",CLOUD_AVAILABILITY_ZONE:"cloud.availability_zone",CLOUD_PLATFORM:"cloud.platform",AWS_ECS_CONTAINER_ARN:"aws.ecs.container.arn",AWS_ECS_CLUSTER_ARN:"aws.ecs.cluster.arn",AWS_ECS_LAUNCHTYPE:"aws.ecs.launchtype",AWS_ECS_TASK_ARN:"aws.ecs.task.arn",AWS_ECS_TASK_FAMILY:"aws.ecs.task.family",AWS_ECS_TASK_REVISION:"aws.ecs.task.revision",AWS_EKS_CLUSTER_ARN:"aws.eks.cluster.arn",AWS_LOG_GROUP_NAMES:"aws.log.group.names",AWS_LOG_GROUP_ARNS:"aws.log.group.arns",AWS_LOG_STREAM_NAMES:"aws.log.stream.names",AWS_LOG_STREAM_ARNS:"aws.log.stream.arns",CONTAINER_NAME:"container.name",CONTAINER_ID:"container.id",CONTAINER_RUNTIME:"container.runtime",CONTAINER_IMAGE_NAME:"container.image.name",CONTAINER_IMAGE_TAG:"container.image.tag",DEPLOYMENT_ENVIRONMENT:"deployment.environment",DEVICE_ID:"device.id",DEVICE_MODEL_IDENTIFIER:"device.model.identifier",DEVICE_MODEL_NAME:"device.model.name",FAAS_NAME:"faas.name",FAAS_ID:"faas.id",FAAS_VERSION:"faas.version",FAAS_INSTANCE:"faas.instance",FAAS_MAX_MEMORY:"faas.max_memory",HOST_ID:"host.id",HOST_NAME:"host.name",HOST_TYPE:"host.type",HOST_ARCH:"host.arch",HOST_IMAGE_NAME:"host.image.name",HOST_IMAGE_ID:"host.image.id",HOST_IMAGE_VERSION:"host.image.version",K8S_CLUSTER_NAME:"k8s.cluster.name",K8S_NODE_NAME:"k8s.node.name",K8S_NODE_UID:"k8s.node.uid",K8S_NAMESPACE_NAME:"k8s.namespace.name",K8S_POD_UID:"k8s.pod.uid",K8S_POD_NAME:"k8s.pod.name",K8S_CONTAINER_NAME:"k8s.container.name",K8S_REPLICASET_UID:"k8s.replicaset.uid",K8S_REPLICASET_NAME:"k8s.replicaset.name",K8S_DEPLOYMENT_UID:"k8s.deployment.uid",K8S_DEPLOYMENT_NAME:"k8s.deployment.name",K8S_STATEFULSET_UID:"k8s.statefulset.uid",K8S_STATEFULSET_NAME:"k8s.statefulset.name",K8S_DAEMONSET_UID:"k8s.daemonset.uid",K8S_DAEMONSET_NAME:"k8s.daemonset.name",K8S_JOB_UID:"k8s.job.uid",K8S_JOB_NAME:"k8s.job.name",K8S_CRONJOB_UID:"k8s.cronjob.uid",K8S_CRONJOB_NAME:"k8s.cronjob.name",OS_TYPE:"os.type",OS_DESCRIPTION:"os.description",OS_NAME:"os.name",OS_VERSION:"os.version",PROCESS_PID:"process.pid",PROCESS_EXECUTABLE_NAME:"process.executable.name",PROCESS_EXECUTABLE_PATH:"process.executable.path",PROCESS_COMMAND:"process.command",PROCESS_COMMAND_LINE:"process.command_line",PROCESS_COMMAND_ARGS:"process.command_args",PROCESS_OWNER:"process.owner",PROCESS_RUNTIME_NAME:"process.runtime.name",PROCESS_RUNTIME_VERSION:"process.runtime.version",PROCESS_RUNTIME_DESCRIPTION:"process.runtime.description",SERVICE_NAME:"service.name",SERVICE_NAMESPACE:"service.namespace",SERVICE_INSTANCE_ID:"service.instance.id",SERVICE_VERSION:"service.version",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",TELEMETRY_AUTO_VERSION:"telemetry.auto.version",WEBENGINE_NAME:"webengine.name",WEBENGINE_VERSION:"webengine.version",WEBENGINE_DESCRIPTION:"webengine.description"},i={ALIBABA_CLOUD:"alibaba_cloud",AWS:"aws",AZURE:"azure",GCP:"gcp"},o={ALIBABA_CLOUD_ECS:"alibaba_cloud_ecs",ALIBABA_CLOUD_FC:"alibaba_cloud_fc",AWS_EC2:"aws_ec2",AWS_ECS:"aws_ecs",AWS_EKS:"aws_eks",AWS_LAMBDA:"aws_lambda",AWS_ELASTIC_BEANSTALK:"aws_elastic_beanstalk",AZURE_VM:"azure_vm",AZURE_CONTAINER_INSTANCES:"azure_container_instances",AZURE_AKS:"azure_aks",AZURE_FUNCTIONS:"azure_functions",AZURE_APP_SERVICE:"azure_app_service",GCP_COMPUTE_ENGINE:"gcp_compute_engine",GCP_CLOUD_RUN:"gcp_cloud_run",GCP_KUBERNETES_ENGINE:"gcp_kubernetes_engine",GCP_CLOUD_FUNCTIONS:"gcp_cloud_functions",GCP_APP_ENGINE:"gcp_app_engine"},s={EC2:"ec2",FARGATE:"fargate"},a={AMD64:"amd64",ARM32:"arm32",ARM64:"arm64",IA64:"ia64",PPC32:"ppc32",PPC64:"ppc64",X86:"x86"},c={WINDOWS:"windows",LINUX:"linux",DARWIN:"darwin",FREEBSD:"freebsd",NETBSD:"netbsd",OPENBSD:"openbsd",DRAGONFLYBSD:"dragonflybsd",HPUX:"hpux",AIX:"aix",SOLARIS:"solaris",Z_OS:"z_os"},l={CPP:"cpp",DOTNET:"dotnet",ERLANG:"erlang",GO:"go",JAVA:"java",NODEJS:"nodejs",PHP:"php",PYTHON:"python",RUBY:"ruby",WEBJS:"webjs"}},38543:(e,t,n)=>{"use strict";n.d(t,{Di:()=>l,Yi:()=>d,ZI:()=>a,ZM:()=>u,_J:()=>g,fL:()=>i,iD:()=>s,jU:()=>f,o0:()=>c,oP:()=>p,og:()=>r,xM:()=>o,y8:()=>h,yG:()=>m});var r={AWS_LAMBDA_INVOKED_ARN:"aws.lambda.invoked_arn",DB_SYSTEM:"db.system",DB_CONNECTION_STRING:"db.connection_string",DB_USER:"db.user",DB_JDBC_DRIVER_CLASSNAME:"db.jdbc.driver_classname",DB_NAME:"db.name",DB_STATEMENT:"db.statement",DB_OPERATION:"db.operation",DB_MSSQL_INSTANCE_NAME:"db.mssql.instance_name",DB_CASSANDRA_KEYSPACE:"db.cassandra.keyspace",DB_CASSANDRA_PAGE_SIZE:"db.cassandra.page_size",DB_CASSANDRA_CONSISTENCY_LEVEL:"db.cassandra.consistency_level",DB_CASSANDRA_TABLE:"db.cassandra.table",DB_CASSANDRA_IDEMPOTENCE:"db.cassandra.idempotence",DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT:"db.cassandra.speculative_execution_count",DB_CASSANDRA_COORDINATOR_ID:"db.cassandra.coordinator.id",DB_CASSANDRA_COORDINATOR_DC:"db.cassandra.coordinator.dc",DB_HBASE_NAMESPACE:"db.hbase.namespace",DB_REDIS_DATABASE_INDEX:"db.redis.database_index",DB_MONGODB_COLLECTION:"db.mongodb.collection",DB_SQL_TABLE:"db.sql.table",EXCEPTION_TYPE:"exception.type",EXCEPTION_MESSAGE:"exception.message",EXCEPTION_STACKTRACE:"exception.stacktrace",EXCEPTION_ESCAPED:"exception.escaped",FAAS_TRIGGER:"faas.trigger",FAAS_EXECUTION:"faas.execution",FAAS_DOCUMENT_COLLECTION:"faas.document.collection",FAAS_DOCUMENT_OPERATION:"faas.document.operation",FAAS_DOCUMENT_TIME:"faas.document.time",FAAS_DOCUMENT_NAME:"faas.document.name",FAAS_TIME:"faas.time",FAAS_CRON:"faas.cron",FAAS_COLDSTART:"faas.coldstart",FAAS_INVOKED_NAME:"faas.invoked_name",FAAS_INVOKED_PROVIDER:"faas.invoked_provider",FAAS_INVOKED_REGION:"faas.invoked_region",NET_TRANSPORT:"net.transport",NET_PEER_IP:"net.peer.ip",NET_PEER_PORT:"net.peer.port",NET_PEER_NAME:"net.peer.name",NET_HOST_IP:"net.host.ip",NET_HOST_PORT:"net.host.port",NET_HOST_NAME:"net.host.name",NET_HOST_CONNECTION_TYPE:"net.host.connection.type",NET_HOST_CONNECTION_SUBTYPE:"net.host.connection.subtype",NET_HOST_CARRIER_NAME:"net.host.carrier.name",NET_HOST_CARRIER_MCC:"net.host.carrier.mcc",NET_HOST_CARRIER_MNC:"net.host.carrier.mnc",NET_HOST_CARRIER_ICC:"net.host.carrier.icc",PEER_SERVICE:"peer.service",ENDUSER_ID:"enduser.id",ENDUSER_ROLE:"enduser.role",ENDUSER_SCOPE:"enduser.scope",THREAD_ID:"thread.id",THREAD_NAME:"thread.name",CODE_FUNCTION:"code.function",CODE_NAMESPACE:"code.namespace",CODE_FILEPATH:"code.filepath",CODE_LINENO:"code.lineno",HTTP_METHOD:"http.method",HTTP_URL:"http.url",HTTP_TARGET:"http.target",HTTP_HOST:"http.host",HTTP_SCHEME:"http.scheme",HTTP_STATUS_CODE:"http.status_code",HTTP_FLAVOR:"http.flavor",HTTP_USER_AGENT:"http.user_agent",HTTP_REQUEST_CONTENT_LENGTH:"http.request_content_length",HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED:"http.request_content_length_uncompressed",HTTP_RESPONSE_CONTENT_LENGTH:"http.response_content_length",HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED:"http.response_content_length_uncompressed",HTTP_SERVER_NAME:"http.server_name",HTTP_ROUTE:"http.route",HTTP_CLIENT_IP:"http.client_ip",AWS_DYNAMODB_TABLE_NAMES:"aws.dynamodb.table_names",AWS_DYNAMODB_CONSUMED_CAPACITY:"aws.dynamodb.consumed_capacity",AWS_DYNAMODB_ITEM_COLLECTION_METRICS:"aws.dynamodb.item_collection_metrics",AWS_DYNAMODB_PROVISIONED_READ_CAPACITY:"aws.dynamodb.provisioned_read_capacity",AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY:"aws.dynamodb.provisioned_write_capacity",AWS_DYNAMODB_CONSISTENT_READ:"aws.dynamodb.consistent_read",AWS_DYNAMODB_PROJECTION:"aws.dynamodb.projection",AWS_DYNAMODB_LIMIT:"aws.dynamodb.limit",AWS_DYNAMODB_ATTRIBUTES_TO_GET:"aws.dynamodb.attributes_to_get",AWS_DYNAMODB_INDEX_NAME:"aws.dynamodb.index_name",AWS_DYNAMODB_SELECT:"aws.dynamodb.select",AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES:"aws.dynamodb.global_secondary_indexes",AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES:"aws.dynamodb.local_secondary_indexes",AWS_DYNAMODB_EXCLUSIVE_START_TABLE:"aws.dynamodb.exclusive_start_table",AWS_DYNAMODB_TABLE_COUNT:"aws.dynamodb.table_count",AWS_DYNAMODB_SCAN_FORWARD:"aws.dynamodb.scan_forward",AWS_DYNAMODB_SEGMENT:"aws.dynamodb.segment",AWS_DYNAMODB_TOTAL_SEGMENTS:"aws.dynamodb.total_segments",AWS_DYNAMODB_COUNT:"aws.dynamodb.count",AWS_DYNAMODB_SCANNED_COUNT:"aws.dynamodb.scanned_count",AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS:"aws.dynamodb.attribute_definitions",AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES:"aws.dynamodb.global_secondary_index_updates",MESSAGING_SYSTEM:"messaging.system",MESSAGING_DESTINATION:"messaging.destination",MESSAGING_DESTINATION_KIND:"messaging.destination_kind",MESSAGING_TEMP_DESTINATION:"messaging.temp_destination",MESSAGING_PROTOCOL:"messaging.protocol",MESSAGING_PROTOCOL_VERSION:"messaging.protocol_version",MESSAGING_URL:"messaging.url",MESSAGING_MESSAGE_ID:"messaging.message_id",MESSAGING_CONVERSATION_ID:"messaging.conversation_id",MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES:"messaging.message_payload_size_bytes",MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES:"messaging.message_payload_compressed_size_bytes",MESSAGING_OPERATION:"messaging.operation",MESSAGING_CONSUMER_ID:"messaging.consumer_id",MESSAGING_RABBITMQ_ROUTING_KEY:"messaging.rabbitmq.routing_key",MESSAGING_KAFKA_MESSAGE_KEY:"messaging.kafka.message_key",MESSAGING_KAFKA_CONSUMER_GROUP:"messaging.kafka.consumer_group",MESSAGING_KAFKA_CLIENT_ID:"messaging.kafka.client_id",MESSAGING_KAFKA_PARTITION:"messaging.kafka.partition",MESSAGING_KAFKA_TOMBSTONE:"messaging.kafka.tombstone",RPC_SYSTEM:"rpc.system",RPC_SERVICE:"rpc.service",RPC_METHOD:"rpc.method",RPC_GRPC_STATUS_CODE:"rpc.grpc.status_code",RPC_JSONRPC_VERSION:"rpc.jsonrpc.version",RPC_JSONRPC_REQUEST_ID:"rpc.jsonrpc.request_id",RPC_JSONRPC_ERROR_CODE:"rpc.jsonrpc.error_code",RPC_JSONRPC_ERROR_MESSAGE:"rpc.jsonrpc.error_message",MESSAGE_TYPE:"message.type",MESSAGE_ID:"message.id",MESSAGE_COMPRESSED_SIZE:"message.compressed_size",MESSAGE_UNCOMPRESSED_SIZE:"message.uncompressed_size"},i={OTHER_SQL:"other_sql",MSSQL:"mssql",MYSQL:"mysql",ORACLE:"oracle",DB2:"db2",POSTGRESQL:"postgresql",REDSHIFT:"redshift",HIVE:"hive",CLOUDSCAPE:"cloudscape",HSQLDB:"hsqldb",PROGRESS:"progress",MAXDB:"maxdb",HANADB:"hanadb",INGRES:"ingres",FIRSTSQL:"firstsql",EDB:"edb",CACHE:"cache",ADABAS:"adabas",FIREBIRD:"firebird",DERBY:"derby",FILEMAKER:"filemaker",INFORMIX:"informix",INSTANTDB:"instantdb",INTERBASE:"interbase",MARIADB:"mariadb",NETEZZA:"netezza",PERVASIVE:"pervasive",POINTBASE:"pointbase",SQLITE:"sqlite",SYBASE:"sybase",TERADATA:"teradata",VERTICA:"vertica",H2:"h2",COLDFUSION:"coldfusion",CASSANDRA:"cassandra",HBASE:"hbase",MONGODB:"mongodb",REDIS:"redis",COUCHBASE:"couchbase",COUCHDB:"couchdb",COSMOSDB:"cosmosdb",DYNAMODB:"dynamodb",NEO4J:"neo4j",GEODE:"geode",ELASTICSEARCH:"elasticsearch",MEMCACHED:"memcached",COCKROACHDB:"cockroachdb"},o={ALL:"all",EACH_QUORUM:"each_quorum",QUORUM:"quorum",LOCAL_QUORUM:"local_quorum",ONE:"one",TWO:"two",THREE:"three",LOCAL_ONE:"local_one",ANY:"any",SERIAL:"serial",LOCAL_SERIAL:"local_serial"},s={DATASOURCE:"datasource",HTTP:"http",PUBSUB:"pubsub",TIMER:"timer",OTHER:"other"},a={INSERT:"insert",EDIT:"edit",DELETE:"delete"},c={ALIBABA_CLOUD:"alibaba_cloud",AWS:"aws",AZURE:"azure",GCP:"gcp"},l={IP_TCP:"ip_tcp",IP_UDP:"ip_udp",IP:"ip",UNIX:"unix",PIPE:"pipe",INPROC:"inproc",OTHER:"other"},u={WIFI:"wifi",WIRED:"wired",CELL:"cell",UNAVAILABLE:"unavailable",UNKNOWN:"unknown"},p={GPRS:"gprs",EDGE:"edge",UMTS:"umts",CDMA:"cdma",EVDO_0:"evdo_0",EVDO_A:"evdo_a",CDMA2000_1XRTT:"cdma2000_1xrtt",HSDPA:"hsdpa",HSUPA:"hsupa",HSPA:"hspa",IDEN:"iden",EVDO_B:"evdo_b",LTE:"lte",EHRPD:"ehrpd",HSPAP:"hspap",GSM:"gsm",TD_SCDMA:"td_scdma",IWLAN:"iwlan",NR:"nr",NRNSA:"nrnsa",LTE_CA:"lte_ca"},d={HTTP_1_0:"1.0",HTTP_1_1:"1.1",HTTP_2_0:"2.0",SPDY:"SPDY",QUIC:"QUIC"},h={QUEUE:"queue",TOPIC:"topic"},f={RECEIVE:"receive",PROCESS:"process"},m={OK:0,CANCELLED:1,UNKNOWN:2,INVALID_ARGUMENT:3,DEADLINE_EXCEEDED:4,NOT_FOUND:5,ALREADY_EXISTS:6,PERMISSION_DENIED:7,RESOURCE_EXHAUSTED:8,FAILED_PRECONDITION:9,ABORTED:10,OUT_OF_RANGE:11,UNIMPLEMENTED:12,INTERNAL:13,UNAVAILABLE:14,DATA_LOSS:15,UNAUTHENTICATED:16},g={SENT:"SENT",RECEIVED:"RECEIVED"}},11240:(e,t,n)=>{const r=n(95687),i=n(60325);if("darwin"!==process.platform)e.exports.all=()=>[],e.exports.each=()=>{};else{const t=n(32081),o=/(?=-----BEGIN\sCERTIFICATE-----)/g,s="/System/Library/Keychains/SystemRootCertificates.keychain",a=["find-certificate","-a","-p"],c=t.spawnSync("/usr/bin/security",a).stdout.toString().split(o),l=t.spawnSync("/usr/bin/security",a.concat(s)).stdout.toString().split(o);r.globalAgent.options.ca=r.globalAgent.options.ca||[];const u=r.globalAgent.options.ca,p=c.concat(l);p.filter((function(e,t,n){return n.indexOf(e)===t})).forEach((e=>u.push(e))),e.exports.der2=i.validFormats,e.exports.all=function(e){return p.map(i.transform(e)).filter((e=>e))},e.exports.each=function(e,t){return"function"==typeof e&&(t=e,e=void 0),p.map(i.transform(e)).filter((e=>e)).forEach(t)}}},60325:(e,t,n)=>{const r=n(35758),i=n(84821);var o=e.exports.validFormats={der:0,pem:1,txt:2,asn1:3};function s(e){const t=r.pki.pemToDer(e),n=r.asn1,i=n.fromDer(t.data.toString("binary")).value[0].value,o=i[0],s=o.tagClass===n.Class.CONTEXT_SPECIFIC&&0===o.type&&o.constructed,a=i.slice(s);return{serial:a[0],issuer:a[2],valid:a[3],subject:a[4]}}e.exports.transform=function(e){return function(t){try{switch(e){case o.der:return r.pki.pemToDer(t);case o.pem:return t;case o.txt:return function(e){const t=s(e),n=new Date,r=t.subject.value.map((e=>e.value[0].value[1].value)).join("/"),o=t.valid.value.map((e=>e.value)).join(" - "),a=n.toTimeString().replace(/\s*\(.*\)\s*/,"");return[`Subject\t${r}`,`Valid\t${o}`,`Saved\t${n.toLocaleDateString()} ${a} by ${i.name}@${i.version}`,String(e)].join("\n")}(t);case o.asn1:return s(t);default:return r.pki.certificateFromPem(t)}}catch(e){return}}}},892:(e,t)=>{"use strict";var n,r,i,o,s,a,c,l,u,p,d,h,f,m,g,y;Object.defineProperty(t,"__esModule",{value:!0}),t.Type=t.StandardType=t.ExtendedTypeBuilder=t.StandardTypeBuilder=t.TypeBuilder=t.TemplateLiteralDslParser=t.TemplateLiteralGenerator=t.TemplateLiteralFinite=t.TemplateLiteralParser=t.TemplateLiteralParserError=t.TemplateLiteralResolver=t.TemplateLiteralPattern=t.UnionResolver=t.KeyArrayResolver=t.KeyResolver=t.ObjectMap=t.IndexedAccessor=t.TypeClone=t.TypeExtends=t.TypeExtendsResult=t.ExtendsUndefined=t.TypeGuard=t.TypeGuardUnknownTypeError=t.FormatRegistry=t.TypeRegistry=t.PatternStringExact=t.PatternNumberExact=t.PatternBooleanExact=t.PatternString=t.PatternNumber=t.PatternBoolean=t.Kind=t.Hint=t.Modifier=void 0,t.Modifier=Symbol.for("TypeBox.Modifier"),t.Hint=Symbol.for("TypeBox.Hint"),t.Kind=Symbol.for("TypeBox.Kind"),t.PatternBoolean="(true|false)",t.PatternNumber="(0|[1-9][0-9]*)",t.PatternString="(.*)",t.PatternBooleanExact=`^${t.PatternBoolean}$`,t.PatternNumberExact=`^${t.PatternNumber}$`,t.PatternStringExact=`^${t.PatternString}$`,function(e){const t=new Map;e.Entries=function(){return new Map(t)},e.Clear=function(){return t.clear()},e.Has=function(e){return t.has(e)},e.Set=function(e,n){t.set(e,n)},e.Get=function(e){return t.get(e)}}(n=t.TypeRegistry||(t.TypeRegistry={})),function(e){const t=new Map;e.Entries=function(){return new Map(t)},e.Clear=function(){return t.clear()},e.Has=function(e){return t.has(e)},e.Set=function(e,n){t.set(e,n)},e.Get=function(e){return t.get(e)}}(t.FormatRegistry||(t.FormatRegistry={}));class _ extends Error{constructor(e){super("TypeGuard: Unknown type"),this.schema=e}}t.TypeGuardUnknownTypeError=_,function(e){function r(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function i(e){return"object"==typeof e&&null!==e&&Array.isArray(e)}function o(e){try{return new RegExp(e),!0}catch{return!1}}function s(e){if("string"!=typeof e)return!1;for(let t=0;t=7&&n<=13||27===n||127===n)return!1}return!0}function a(e){return d(e)||K(e)}function c(e){return"string"==typeof e}function l(e){return"number"==typeof e&&globalThis.Number.isFinite(e)}function u(e){return void 0===e||void 0!==e&&function(e){return"bigint"==typeof e}(e)}function p(e){return void 0===e||void 0!==e&&l(e)}function d(e){return void 0===e||void 0!==e&&function(e){return"boolean"==typeof e}(e)}function h(e){return void 0===e||void 0!==e&&c(e)}function f(e){return w(e)&&"Any"===e[t.Kind]&&h(e.$id)}function m(e){return w(e)&&"Array"===e[t.Kind]&&"array"===e.type&&h(e.$id)&&K(e.items)&&p(e.minItems)&&p(e.maxItems)&&d(e.uniqueItems)}function g(e){return w(e)&&"BigInt"===e[t.Kind]&&"null"===e.type&&"BigInt"===e.typeOf&&h(e.$id)&&u(e.multipleOf)&&u(e.minimum)&&u(e.maximum)&&u(e.exclusiveMinimum)&&u(e.exclusiveMaximum)}function y(e){return w(e)&&"Boolean"===e[t.Kind]&&"boolean"===e.type&&h(e.$id)}function _(e){if(!(w(e)&&"Constructor"===e[t.Kind]&&"object"===e.type&&"Constructor"===e.instanceOf&&h(e.$id)&&i(e.parameters)&&K(e.returns)))return!1;for(const t of e.parameters)if(!K(t))return!1;return!0}function v(e){return w(e)&&"Date"===e[t.Kind]&&"object"===e.type&&"Date"===e.instanceOf&&h(e.$id)&&p(e.minimumTimestamp)&&p(e.maximumTimestamp)&&p(e.exclusiveMinimumTimestamp)&&p(e.exclusiveMaximumTimestamp)}function b(e){if(!(w(e)&&"Function"===e[t.Kind]&&"object"===e.type&&"Function"===e.instanceOf&&h(e.$id)&&i(e.parameters)&&K(e.returns)))return!1;for(const t of e.parameters)if(!K(t))return!1;return!0}function E(e){return w(e)&&"Integer"===e[t.Kind]&&"integer"===e.type&&h(e.$id)&&p(e.multipleOf)&&p(e.minimum)&&p(e.maximum)&&p(e.exclusiveMinimum)&&p(e.exclusiveMaximum)}function T(e){if(!(w(e)&&"Intersect"===e[t.Kind]&&i(e.allOf)&&h(e.type)&&(d(e.unevaluatedProperties)||(n=e.unevaluatedProperties,void 0===n||K(n)))&&h(e.$id)))return!1;var n;if("type"in e&&"object"!==e.type)return!1;for(const t of e.allOf)if(!K(t))return!1;return!0}function w(e){return r(e)&&t.Kind in e&&"string"==typeof e[t.Kind]}function S(e){return w(e)&&"Literal"===e[t.Kind]&&h(e.$id)&&"string"==typeof e.const}function x(e){return w(e)&&"Literal"===e[t.Kind]&&h(e.$id)&&"number"==typeof e.const}function C(e){return w(e)&&"Literal"===e[t.Kind]&&h(e.$id)&&"boolean"==typeof e.const}function I(e){return S(e)||x(e)||C(e)}function A(e){return w(e)&&"Never"===e[t.Kind]&&r(e.not)&&0===globalThis.Object.getOwnPropertyNames(e.not).length}function k(e){return w(e)&&"Not"===e[t.Kind]&&i(e.allOf)&&2===e.allOf.length&&r(e.allOf[0])&&K(e.allOf[0].not)&&K(e.allOf[1])}function R(e){return w(e)&&"Null"===e[t.Kind]&&"null"===e.type&&h(e.$id)}function P(e){return w(e)&&"Number"===e[t.Kind]&&"number"===e.type&&h(e.$id)&&p(e.multipleOf)&&p(e.minimum)&&p(e.maximum)&&p(e.exclusiveMinimum)&&p(e.exclusiveMaximum)}function N(e){if(!(w(e)&&"Object"===e[t.Kind]&&"object"===e.type&&h(e.$id)&&r(e.properties)&&a(e.additionalProperties)&&p(e.minProperties)&&p(e.maxProperties)))return!1;for(const[t,n]of Object.entries(e.properties)){if(!s(t))return!1;if(!K(n))return!1}return!0}function O(e){return w(e)&&"Promise"===e[t.Kind]&&"object"===e.type&&"Promise"===e.instanceOf&&h(e.$id)&&K(e.item)}function M(e){if(!(w(e)&&"Record"===e[t.Kind]&&"object"===e.type&&h(e.$id)&&a(e.additionalProperties)&&r(e.patternProperties)))return!1;const n=Object.keys(e.patternProperties);return 1===n.length&&!!o(n[0])&&!!K(e.patternProperties[n[0]])}function D(e){return w(e)&&"Ref"===e[t.Kind]&&h(e.$id)&&c(e.$ref)}function L(e){return w(e)&&"String"===e[t.Kind]&&"string"===e.type&&h(e.$id)&&p(e.minLength)&&p(e.maxLength)&&(void 0===(n=e.pattern)||void 0!==n&&c(n)&&s(n)&&o(n))&&function(e){return void 0===e||void 0!==e&&c(e)&&s(e)}(e.format);var n}function F(e){return w(e)&&"Symbol"===e[t.Kind]&&"null"===e.type&&"Symbol"===e.typeOf&&h(e.$id)}function B(e){return w(e)&&"TemplateLiteral"===e[t.Kind]&&"string"===e.type&&c(e.pattern)&&"^"===e.pattern[0]&&"$"===e.pattern[e.pattern.length-1]}function j(e){return w(e)&&"This"===e[t.Kind]&&h(e.$id)&&c(e.$ref)}function U(e){if(!(w(e)&&"Tuple"===e[t.Kind]&&"array"===e.type&&h(e.$id)&&l(e.minItems)&&l(e.maxItems)&&e.minItems===e.maxItems))return!1;if(void 0===e.items&&void 0===e.additionalItems&&0===e.minItems)return!0;if(!i(e.items))return!1;for(const t of e.items)if(!K(t))return!1;return!0}function q(e){return w(e)&&"Undefined"===e[t.Kind]&&"null"===e.type&&"Undefined"===e.typeOf&&h(e.$id)}function $(e){if(!(w(e)&&"Union"===e[t.Kind]&&i(e.anyOf)&&h(e.$id)))return!1;for(const t of e.anyOf)if(!K(t))return!1;return!0}function H(e){return w(e)&&"Uint8Array"===e[t.Kind]&&"object"===e.type&&h(e.$id)&&"Uint8Array"===e.instanceOf&&p(e.minByteLength)&&p(e.maxByteLength)}function V(e){return w(e)&&"Unknown"===e[t.Kind]&&h(e.$id)}function z(e){return w(e)&&"Unsafe"===e[t.Kind]}function W(e){return w(e)&&"Void"===e[t.Kind]&&"null"===e.type&&"Void"===e.typeOf&&h(e.$id)}function K(e){return"object"==typeof e&&(f(e)||m(e)||y(e)||g(e)||_(e)||v(e)||b(e)||E(e)||T(e)||I(e)||A(e)||k(e)||R(e)||P(e)||N(e)||O(e)||M(e)||D(e)||L(e)||F(e)||B(e)||j(e)||U(e)||q(e)||$(e)||H(e)||V(e)||z(e)||W(e)||w(e)&&n.Has(e[t.Kind]))}e.TAny=f,e.TArray=m,e.TBigInt=g,e.TBoolean=y,e.TConstructor=_,e.TDate=v,e.TFunction=b,e.TInteger=E,e.TIntersect=T,e.TKind=w,e.TLiteralString=S,e.TLiteralNumber=x,e.TLiteralBoolean=C,e.TLiteral=I,e.TNever=A,e.TNot=k,e.TNull=R,e.TNumber=P,e.TObject=N,e.TPromise=O,e.TRecord=M,e.TRef=D,e.TString=L,e.TSymbol=F,e.TTemplateLiteral=B,e.TThis=j,e.TTuple=U,e.TUndefined=q,e.TUnionLiteral=function(e){return $(e)&&e.anyOf.every((e=>S(e)||x(e)))},e.TUnion=$,e.TUint8Array=H,e.TUnknown=V,e.TUnsafe=z,e.TVoid=W,e.TReadonlyOptional=function(e){return r(e)&&"ReadonlyOptional"===e[t.Modifier]},e.TReadonly=function(e){return r(e)&&"Readonly"===e[t.Modifier]},e.TOptional=function(e){return r(e)&&"Optional"===e[t.Modifier]},e.TSchema=K}(r=t.TypeGuard||(t.TypeGuard={})),(t.ExtendsUndefined||(t.ExtendsUndefined={})).Check=function e(n){return"Undefined"===n[t.Kind]||"Union"===n[t.Kind]&&n.anyOf.some((t=>e(t)))},function(e){e[e.Union=0]="Union",e[e.True=1]="True",e[e.False=2]="False"}(i=t.TypeExtendsResult||(t.TypeExtendsResult={})),function(e){function n(e){return e===i.False?i.False:i.True}function o(e,t){return i.True}function s(e,t){return r.TLiteral(e)&&"boolean"==typeof e.const||r.TBoolean(e)?i.True:i.False}function a(e,t){return r.TLiteral(e)&&"number"==typeof e.const||r.TNumber(e)||r.TInteger(e)?i.True:i.False}function c(e,t){return t.allOf.every((t=>A(e,t)===i.True))?i.True:i.False}function l(e){return"string"==typeof e.const}function u(e){return"number"==typeof e.const}function p(e,t){return i.False}function d(e,t){return r.TLiteral(e)&&u(e)||r.TNumber(e)||r.TInteger(e)?i.True:i.False}function f(e,t){return globalThis.Object.keys(e.properties).length===t}function m(e){return v(e)}function g(e){return f(e,0)||f(e,1)&&"description"in e.properties&&r.TUnion(e.properties.description)&&2===e.properties.description.anyOf.length&&(r.TString(e.properties.description.anyOf[0])&&r.TUndefined(e.properties.description.anyOf[1])||r.TString(e.properties.description.anyOf[1])&&r.TUndefined(e.properties.description.anyOf[0]))}function y(e){return f(e,0)}function _(e){return f(e,0)}function v(e){const r=t.Type.Number();return f(e,0)||f(e,1)&&"length"in e.properties&&n(A(e.properties.length,r))===i.True}function b(e,t){return A(e,t)===i.False||r.TOptional(e)&&!r.TOptional(t)?i.False:i.True}function E(e,o){return r.TUnknown(e)?i.False:r.TAny(e)?i.Union:r.TNever(e)||r.TLiteral(e)&&l(e)&&m(o)||r.TLiteral(e)&&u(e)&&y(o)||r.TLiteral(e)&&"boolean"==typeof e.const&&_(o)||r.TSymbol(e)&&g(o)||r.TBigInt(e)&&f(o,0)||r.TString(e)&&m(o)||r.TSymbol(e)&&g(o)||r.TNumber(e)&&y(o)||r.TInteger(e)&&y(o)||r.TBoolean(e)&&_(o)||r.TUint8Array(e)&&function(e){return v(e)}(o)||r.TDate(e)&&function(e){return f(e,0)}(o)||r.TConstructor(e)&&function(e){return f(e,0)}(o)||r.TFunction(e)&&function(e){const r=t.Type.Number();return f(e,0)||f(e,1)&&"length"in e.properties&&n(A(e.properties.length,r))===i.True}(o)?i.True:r.TRecord(e)&&r.TString(T(e))?"Record"===o[t.Hint]?i.True:i.False:r.TRecord(e)&&r.TNumber(T(e))&&f(o,0)?i.True:i.False}function T(e){if(t.PatternNumberExact in e.patternProperties)return t.Type.Number();if(t.PatternStringExact in e.patternProperties)return t.Type.String();throw Error("TypeExtends: Cannot get record key")}function w(e){if(t.PatternNumberExact in e.patternProperties)return e.patternProperties[t.PatternNumberExact];if(t.PatternStringExact in e.patternProperties)return e.patternProperties[t.PatternStringExact];throw Error("TypeExtends: Cannot get record value")}function S(e,t){const o=T(t),s=w(t);if(r.TLiteral(e)&&l(e)&&r.TNumber(o)&&n(A(e,s))===i.True)return i.True;if(r.TUint8Array(e)&&r.TNumber(o))return A(e,s);if(r.TString(e)&&r.TNumber(o))return A(e,s);if(r.TArray(e)&&r.TNumber(o))return A(e,s);if(r.TObject(e)){for(const t of globalThis.Object.keys(e.properties))if(b(s,e.properties[t])===i.False)return i.False;return i.True}return i.False}function x(e,t){return r.TLiteral(e)&&"string"==typeof e.const||r.TString(e)?i.True:i.False}function C(e,t){return t.anyOf.some((t=>A(e,t)===i.True))?i.True:i.False}function I(e,t){return i.True}function A(e,l){if(r.TTemplateLiteral(e))return A(h.Resolve(e),l);if(r.TTemplateLiteral(l))return A(e,h.Resolve(l));if(r.TAny(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)&&t.anyOf.some((e=>r.TAny(e)||r.TUnknown(e)))?i.True:r.TUnion(t)?i.Union:r.TUnknown(t)||r.TAny(t)?i.True:i.Union}(e,l);if(r.TArray(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)&&v(t)?i.True:r.TArray(t)?n(A(e.items,t.items)):i.False}(e,l);if(r.TBigInt(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TBigInt(t)?i.True:i.False}(e,l);if(r.TBoolean(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TBoolean(t)?i.True:i.False}(e,l);if(r.TConstructor(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TConstructor(t)?e.parameters.length>t.parameters.length?i.False:e.parameters.every(((e,r)=>n(A(t.parameters[r],e))===i.True))?n(A(e.returns,t.returns)):i.False:i.False}(e,l);if(r.TDate(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TDate(t)?i.True:i.False}(e,l);if(r.TFunction(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TFunction(t)?e.parameters.length>t.parameters.length?i.False:e.parameters.every(((e,r)=>n(A(t.parameters[r],e))===i.True))?n(A(e.returns,t.returns)):i.False:i.False}(e,l);if(r.TInteger(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TInteger(t)||r.TNumber(t)?i.True:i.False}(e,l);if(r.TIntersect(e))return function(e,t){return e.allOf.some((e=>A(e,t)===i.True))?i.True:i.False}(e,l);if(r.TLiteral(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TString(t)?x(e):r.TNumber(t)?d(e):r.TInteger(t)?a(e):r.TBoolean(t)?s(e):r.TLiteral(t)&&t.const===e.const?i.True:i.False}(e,l);if(r.TNever(e))return i.True;if(r.TNull(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TNull(t)?i.True:i.False}(e,l);if(r.TNumber(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TInteger(t)||r.TNumber(t)?i.True:i.False}(e,l);if(r.TObject(e))return function(e,t){if(r.TIntersect(t))return c(e,t);if(r.TUnion(t))return C(e,t);if(r.TUnknown(t))return I();if(r.TAny(t))return o();if(r.TRecord(t))return S(e,t);if(!r.TObject(t))return i.False;for(const n of globalThis.Object.keys(t.properties)){if(!(n in e.properties))return i.False;if(b(e.properties[n],t.properties[n])===i.False)return i.False}return i.True}(e,l);if(r.TRecord(e))return function(e,t){const n=w(e);return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?A(n,w(t)):i.False}(e,l);if(r.TString(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TString(t)?i.True:i.False}(e,l);if(r.TSymbol(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TSymbol(t)?i.True:i.False}(e,l);if(r.TTuple(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)&&v(t)||r.TArray(t)&&function(e,t){return r.TArray(t)&&void 0!==e.items&&e.items.every((e=>A(e,t.items)===i.True))}(e,t)?i.True:r.TTuple(t)?void 0===e.items&&void 0!==t.items||void 0!==e.items&&void 0===t.items?i.False:void 0===e.items&&void 0===t.items||e.items.every(((e,n)=>A(e,t.items[n])===i.True))?i.True:i.False:i.False}(e,l);if(r.TPromise(e))return function(e,s){return r.TIntersect(s)?c(e,s):r.TUnion(s)?C(e,s):r.TUnknown(s)?I():r.TAny(s)?o():r.TObject(s)&&function(e){const r=t.Type.Function([t.Type.Any()],t.Type.Any());return f(e,0)||f(e,1)&&"then"in e.properties&&n(A(e.properties.then,r))===i.True}(s)?i.True:r.TPromise(s)?n(A(e.item,s.item)):i.False}(e,l);if(r.TUint8Array(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TUint8Array(t)?i.True:i.False}(e,l);if(r.TUndefined(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TNever(t)?p():r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TRecord(t)?S(e,t):r.TVoid(t)?function(e,t){return r.TUndefined(e)||r.TUndefined(e)?i.True:i.False}(e):r.TUndefined(t)?i.True:i.False}(e,l);if(r.TUnion(e))return function(e,t){return e.anyOf.every((e=>A(e,t)===i.True))?i.True:i.False}(e,l);if(r.TUnknown(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TAny(t)?o():r.TString(t)?x(e):r.TNumber(t)?d(e):r.TInteger(t)?a(e):r.TBoolean(t)?s(e):r.TArray(t)||r.TTuple(t)?function(e,t){return r.TUnknown(e)?i.False:r.TAny(e)?i.Union:r.TNever(e)?i.True:i.False}(e):r.TObject(t)?E(e,t):r.TUnknown(t)?i.True:i.False}(e,l);if(r.TVoid(e))return function(e,t){return r.TIntersect(t)?c(e,t):r.TUnion(t)?C(e,t):r.TUnknown(t)?I():r.TAny(t)?o():r.TObject(t)?E(e,t):r.TVoid(t)?i.True:i.False}(e,l);throw Error(`TypeExtends: Unknown left type operand '${e[t.Kind]}'`)}e.Extends=function(e,t){return A(e,t)}}(o=t.TypeExtends||(t.TypeExtends={})),function(e){function t(e){return function(e){return globalThis.Array.isArray(e)}(e)?function(e){return e.map((e=>t(e)))}(e):function(e){return"object"==typeof e&&null!==e}(e)?function(e){return{...globalThis.Object.getOwnPropertyNames(e).reduce(((n,r)=>({...n,[r]:t(e[r])})),{}),...globalThis.Object.getOwnPropertySymbols(e).reduce(((n,r)=>({...n,[r]:t(e[r])})),{})}}(e):e}e.Clone=function(e,n){return{...t(e),...n}}}(s=t.TypeClone||(t.TypeClone={})),function(e){function n(e,r){return"Intersect"===e[t.Kind]?function(e,r){const i=e.allOf.reduce(((e,i)=>{const o=n(i,r);return"Never"===o[t.Kind]?e:[...e,o]}),[]);return t.Type.Intersect(i)}(e,r):"Union"===e[t.Kind]?function(e,r){const i=e.anyOf.map((e=>n(e,r)));return t.Type.Union(i)}(e,r):"Object"===e[t.Kind]?function(e,n){const r=e.properties[n];return void 0===r?t.Type.Never():t.Type.Union([r])}(e,r):"Tuple"===e[t.Kind]?function(e,n){const r=e.items;if(void 0===r)return t.Type.Never();const i=r[n];return void 0===i?t.Type.Never():i}(e,r):t.Type.Never()}e.Resolve=function(e,r,i={}){return t.Type.Union(r.map((t=>n(e,t.toString()))),i)}}(a=t.IndexedAccessor||(t.IndexedAccessor={})),function(e){function n(e,r){return"Intersect"===e[t.Kind]?function(e,r){return t.Type.Intersect(e.allOf.map((e=>n(e,r))),{...e})}(e,r):"Union"===e[t.Kind]?function(e,r){return t.Type.Union(e.anyOf.map((e=>n(e,r))),{...e})}(e,r):"Object"===e[t.Kind]?function(e,t){return t(e)}(e,r):e}e.Map=function(e,t,r){return{...n(s.Clone(e,{}),t),...r}}}(c=t.ObjectMap||(t.ObjectMap={})),function(e){function t(e,n){return r.TIntersect(e)?function(e,n){return e.allOf.reduce(((e,r)=>[...e,...t(r,n)]),[])}(e,n):r.TUnion(e)?function(e,n){const r=e.anyOf.map((e=>t(e,n)));return[...r.reduce(((e,t)=>t.map((t=>r.every((e=>e.includes(t)))?e.add(t):e))[0]),new Set)]}(e,n):r.TObject(e)?function(e,t){return globalThis.Object.keys(e.properties)}(e):r.TRecord(e)?function(e,t){return t.includePatterns?globalThis.Object.keys(e.patternProperties):[]}(e,n):[]}function n(e,n){return[...new Set(t(e,n))]}e.ResolveKeys=n,e.ResolvePattern=function(e){return`^(${n(e,{includePatterns:!0}).map((e=>`(${function(e){return"^"===e[0]&&"$"===e[e.length-1]?e.slice(1,e.length-1):e}(e)})`)).join("|")})$`}}(l=t.KeyResolver||(t.KeyResolver={})),function(e){e.Resolve=function(e){if(globalThis.Array.isArray(e))return e;if(r.TUnionLiteral(e))return e.anyOf.map((e=>e.const.toString()));if(r.TLiteral(e))return[e.const];if(r.TTemplateLiteral(e)){const t=f.ParseExact(e.pattern);if(!m.Check(t))throw Error("KeyArrayResolver: Cannot resolve keys from infinite template expression");return[...g.Generate(t)]}return[]}}(u=t.KeyArrayResolver||(t.KeyArrayResolver={})),function(e){function*n(e){for(const r of e.anyOf)"Union"===r[t.Kind]?yield*n(r):yield r}e.Resolve=function(e){return t.Type.Union([...n(e)],{...e})}}(p=t.UnionResolver||(t.UnionResolver={})),function(e){function n(e,i){if(r.TTemplateLiteral(e))return e.pattern.slice(1,e.pattern.length-1);if(r.TUnion(e))return`(${e.anyOf.map((e=>n(e,i))).join("|")})`;if(r.TNumber(e))return`${i}${t.PatternNumber}`;if(r.TInteger(e))return`${i}${t.PatternNumber}`;if(r.TBigInt(e))return`${i}${t.PatternNumber}`;if(r.TString(e))return`${i}${t.PatternString}`;if(r.TLiteral(e))return`${i}${o=e.const.toString(),o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}`;if(r.TBoolean(e))return`${i}${t.PatternBoolean}`;throw r.TNever(e)?Error("TemplateLiteralPattern: TemplateLiteral cannot operate on types of TNever"):Error(`TemplateLiteralPattern: Unexpected Kind '${e[t.Kind]}'`);var o}e.Create=function(e){return`^${e.map((e=>n(e,""))).join("")}$`}}(d=t.TemplateLiteralPattern||(t.TemplateLiteralPattern={})),function(e){e.Resolve=function(e){const n=f.ParseExact(e.pattern);if(!m.Check(n))return t.Type.String();const r=[...g.Generate(n)].map((e=>t.Type.Literal(e)));return t.Type.Union(r)}}(h=t.TemplateLiteralResolver||(t.TemplateLiteralResolver={}));class v extends Error{constructor(e){super(e)}}t.TemplateLiteralParserError=v,function(e){function t(e,t,n){return e[t]===n&&92!==e.charCodeAt(t-1)}function n(e,n){return t(e,n,"(")}function r(e,n){return t(e,n,")")}function i(e,n){return t(e,n,"|")}function o(e){return function(e){if(!n(e,0)||!r(e,e.length-1))return!1;let t=0;for(let i=0;i0&&a.push(o(t)),s=c+1}const c=e.slice(s);return c.length>0&&a.push(o(c)),0===a.length?{type:"const",const:""}:1===a.length?a[0]:{type:"or",expr:a}}(e):function(e){for(let t=0;t0&&s.push(o(a)),r=n-1}return 0===s.length?{type:"const",const:""}:1===s.length?s[0]:{type:"and",expr:s}}(e):{type:"const",const:e}}e.Parse=o,e.ParseExact=function(e){return o(e.slice(1,e.length-1))}}(f=t.TemplateLiteralParser||(t.TemplateLiteralParser={})),function(e){e.Check=function e(t){if(function(e){return"or"===e.type&&2===e.expr.length&&"const"===e.expr[0].type&&"true"===e.expr[0].const&&"const"===e.expr[1].type&&"false"===e.expr[1].const}(t))return!0;if(function(e){return"or"===e.type&&2===e.expr.length&&"const"===e.expr[0].type&&"0"===e.expr[0].const&&"const"===e.expr[1].type&&"[1-9][0-9]*"===e.expr[1].const}(t)||function(e){return"const"===e.type&&".*"===e.const}(t))return!1;if("and"===t.type)return t.expr.every((t=>e(t)));if("or"===t.type)return t.expr.every((t=>e(t)));if("const"===t.type)return!0;throw Error("TemplateLiteralFinite: Unknown expression type")}}(m=t.TemplateLiteralFinite||(t.TemplateLiteralFinite={})),function(e){function*t(e){if(1===e.length)return yield*e[0];for(const n of e[0])for(const r of t(e.slice(1)))yield`${n}${r}`}function*n(e){return yield*t(e.expr.map((e=>[...r(e)])))}function*r(e){if("and"===e.type)return yield*n(e);if("or"===e.type)return yield*function*(e){for(const t of e.expr)yield*r(t)}(e);if("const"===e.type)return yield*function*(e){return yield e.const}(e);throw Error("TemplateLiteralGenerator: Unknown expression")}e.Generate=r}(g=t.TemplateLiteralGenerator||(t.TemplateLiteralGenerator={})),function(e){function*n(e){const n=e.trim().replace(/"|'/g,"");if("boolean"===n)return yield t.Type.Boolean();if("number"===n)return yield t.Type.Number();if("bigint"===n)return yield t.Type.BigInt();if("string"===n)return yield t.Type.String();const r=n.split("|").map((e=>t.Type.Literal(e.trim())));return yield 0===r.length?t.Type.Never():1===r.length?r[0]:t.Type.Union(r)}function*r(e){if("{"!==e[1]){const n=t.Type.Literal("$"),r=i(e.slice(1));return yield*[n,...r]}for(let t=2;t({...e,[n]:t.Type.Index(r,[n])})),{});return t.Type.Object(i,n)}Enum(e,n={}){const r=globalThis.Object.keys(e).filter((e=>isNaN(e))).map((t=>e[t])).map((e=>"string"==typeof e?{[t.Kind]:"Literal",type:"string",const:e}:{[t.Kind]:"Literal",type:"number",const:e}));return this.Create({...n,[t.Kind]:"Union",anyOf:r})}Extends(e,t,n,r,a={}){switch(o.Extends(e,t)){case i.Union:return this.Union([s.Clone(n,a),s.Clone(r,a)]);case i.True:return s.Clone(n,a);case i.False:return s.Clone(r,a)}}Exclude(e,t,n={}){if(r.TTemplateLiteral(e))return this.Exclude(h.Resolve(e),t,n);if(r.TTemplateLiteral(t))return this.Exclude(e,h.Resolve(t),n);if(r.TUnion(e)){const r=e.anyOf.filter((e=>o.Extends(e,t)===i.False));return 1===r.length?s.Clone(r[0],n):this.Union(r,n)}return o.Extends(e,t)!==i.False?this.Never(n):s.Clone(e,n)}Extract(e,t,n={}){if(r.TTemplateLiteral(e))return this.Extract(h.Resolve(e),t,n);if(r.TTemplateLiteral(t))return this.Extract(e,h.Resolve(t),n);if(r.TUnion(e)){const r=e.anyOf.filter((e=>o.Extends(e,t)!==i.False));return 1===r.length?s.Clone(r[0],n):this.Union(r,n)}return o.Extends(e,t)!==i.False?s.Clone(e,n):this.Never(n)}Index(e,t,n={}){if(r.TArray(e)&&r.TNumber(t))return s.Clone(e.items,n);if(r.TTuple(e)&&r.TNumber(t)){const t=(void 0===e.items?[]:e.items).map((e=>s.Clone(e,{})));return this.Union(t,n)}{const r=u.Resolve(t),i=s.Clone(e,{});return a.Resolve(i,r,n)}}Integer(e={}){return this.Create({...e,[t.Kind]:"Integer",type:"integer"})}Intersect(e,n={}){if(0===e.length)return t.Type.Never();if(1===e.length)return s.Clone(e[0],n);const i=e.every((e=>r.TObject(e))),o=e.map((e=>s.Clone(e,{}))),a=r.TSchema(n.unevaluatedProperties)?{unevaluatedProperties:s.Clone(n.unevaluatedProperties,{})}:{};return!1===n.unevaluatedProperties||r.TSchema(n.unevaluatedProperties)||i?this.Create({...n,...a,[t.Kind]:"Intersect",type:"object",allOf:o}):this.Create({...n,...a,[t.Kind]:"Intersect",allOf:o})}KeyOf(e,n={}){if(r.TRecord(e)){const r=Object.getOwnPropertyNames(e.patternProperties)[0];if(r===t.PatternNumberExact)return this.Number(n);if(r===t.PatternStringExact)return this.String(n);throw Error("StandardTypeBuilder: Unable to resolve key type from Record key pattern")}if(r.TTuple(e)){const r=(void 0===e.items?[]:e.items).map(((e,n)=>t.Type.Literal(n)));return this.Union(r,n)}if(r.TArray(e))return this.Number(n);{const t=l.ResolveKeys(e,{includePatterns:!1});if(0===t.length)return this.Never(n);const r=t.map((e=>this.Literal(e)));return this.Union(r,n)}}Literal(e,n={}){return this.Create({...n,[t.Kind]:"Literal",const:e,type:typeof e})}Never(e={}){return this.Create({...e,[t.Kind]:"Never",not:{}})}Not(e,n,r){return this.Create({...r,[t.Kind]:"Not",allOf:[{not:s.Clone(e,{})},s.Clone(n,{})]})}Null(e={}){return this.Create({...e,[t.Kind]:"Null",type:"null"})}Number(e={}){return this.Create({...e,[t.Kind]:"Number",type:"number"})}Object(e,n={}){const i=globalThis.Object.getOwnPropertyNames(e),o=i.filter((t=>r.TOptional(e[t])||r.TReadonlyOptional(e[t]))),a=i.filter((e=>!o.includes(e))),c=r.TSchema(n.additionalProperties)?{additionalProperties:s.Clone(n.additionalProperties,{})}:{},l=i.reduce(((t,n)=>({...t,[n]:s.Clone(e[n],{})})),{});return a.length>0?this.Create({...n,...c,[t.Kind]:"Object",type:"object",properties:l,required:a}):this.Create({...n,...c,[t.Kind]:"Object",type:"object",properties:l})}Omit(e,t,n={}){const r=u.Resolve(t);return c.Map(s.Clone(e,{}),(e=>{e.required&&(e.required=e.required.filter((e=>!r.includes(e))),0===e.required.length&&delete e.required);for(const t of globalThis.Object.keys(e.properties))r.includes(t)&&delete e.properties[t];return this.Create(e)}),n)}Partial(e,n={}){return c.Map(s.Clone(e,{}),(e=>(delete e.required,globalThis.Object.keys(e.properties).forEach((n=>function(e){switch(e[t.Modifier]){case"ReadonlyOptional":case"Readonly":e[t.Modifier]="ReadonlyOptional";break;default:e[t.Modifier]="Optional"}}(e.properties[n]))),e)),n)}Pick(e,t,n={}){const r=u.Resolve(t);return c.Map(s.Clone(e,{}),(e=>{e.required&&(e.required=e.required.filter((e=>r.includes(e))),0===e.required.length&&delete e.required);for(const t of globalThis.Object.keys(e.properties))r.includes(t)||delete e.properties[t];return this.Create(e)}),n)}Record(e,n,i={}){if(r.TTemplateLiteral(e)){const r=f.ParseExact(e.pattern);return m.Check(r)?this.Object([...g.Generate(r)].reduce(((e,t)=>({...e,[t]:s.Clone(n,{})})),{}),i):this.Create({...i,[t.Kind]:"Record",type:"object",patternProperties:{[e.pattern]:s.Clone(n,{})}})}if(r.TUnion(e)){const o=p.Resolve(e);if(r.TUnionLiteral(o)){const e=o.anyOf.reduce(((e,t)=>({...e,[t.const]:s.Clone(n,{})})),{});return this.Object(e,{...i,[t.Hint]:"Record"})}throw Error("TypeBuilder: Record key of type union contains non-literal types")}if(r.TLiteral(e)){if("string"==typeof e.const||"number"==typeof e.const)return this.Object({[e.const]:s.Clone(n,{})},i);throw Error("TypeBuilder: Record key of type literal is not of type string or number")}if(r.TInteger(e)||r.TNumber(e)){const e=t.PatternNumberExact;return this.Create({...i,[t.Kind]:"Record",type:"object",patternProperties:{[e]:s.Clone(n,{})}})}if(r.TString(e)){const r=void 0===e.pattern?t.PatternStringExact:e.pattern;return this.Create({...i,[t.Kind]:"Record",type:"object",patternProperties:{[r]:s.Clone(n,{})}})}throw Error("StandardTypeBuilder: Record key is an invalid type")}Recursive(e,n={}){void 0===n.$id&&(n.$id="T"+b++);const r=e({[t.Kind]:"This",$ref:`${n.$id}`});return r.$id=n.$id,this.Create({...n,[t.Hint]:"Recursive",...r})}Ref(e,n={}){if(void 0===e.$id)throw Error("StandardTypeBuilder.Ref: Target type must specify an $id");return this.Create({...n,[t.Kind]:"Ref",$ref:e.$id})}Required(e,n={}){return c.Map(s.Clone(e,{}),(e=>(e.required=globalThis.Object.keys(e.properties),globalThis.Object.keys(e.properties).forEach((n=>function(e){switch(e[t.Modifier]){case"ReadonlyOptional":case"Readonly":e[t.Modifier]="Readonly";break;default:delete e[t.Modifier]}}(e.properties[n]))),e)),n)}Rest(e){return r.TTuple(e)?void 0===e.items?[]:e.items.map((e=>s.Clone(e,{}))):[s.Clone(e,{})]}String(e={}){return this.Create({...e,[t.Kind]:"String",type:"string"})}TemplateLiteral(e,n={}){const r="string"==typeof e?d.Create(y.Parse(e)):d.Create(e);return this.Create({...n,[t.Kind]:"TemplateLiteral",type:"string",pattern:r})}Tuple(e,n={}){const[r,i,o]=[!1,e.length,e.length],a=e.map((e=>s.Clone(e,{}))),c=e.length>0?{...n,[t.Kind]:"Tuple",type:"array",items:a,additionalItems:r,minItems:i,maxItems:o}:{...n,[t.Kind]:"Tuple",type:"array",minItems:i,maxItems:o};return this.Create(c)}Union(e,n={}){if(r.TTemplateLiteral(e))return h.Resolve(e);{const r=e;if(0===r.length)return this.Never(n);if(1===r.length)return this.Create(s.Clone(r[0],n));const i=r.map((e=>s.Clone(e,{})));return this.Create({...n,[t.Kind]:"Union",anyOf:i})}}Unknown(e={}){return this.Create({...e,[t.Kind]:"Unknown"})}Unsafe(e={}){return this.Create({...e,[t.Kind]:e[t.Kind]||"Unsafe"})}}t.StandardTypeBuilder=T;class w extends T{BigInt(e={}){return this.Create({...e,[t.Kind]:"BigInt",type:"null",typeOf:"BigInt"})}ConstructorParameters(e,t={}){return this.Tuple([...e.parameters],{...t})}Constructor(e,n,r){const i=s.Clone(n,{}),o=e.map((e=>s.Clone(e,{})));return this.Create({...r,[t.Kind]:"Constructor",type:"object",instanceOf:"Constructor",parameters:o,returns:i})}Date(e={}){return this.Create({...e,[t.Kind]:"Date",type:"object",instanceOf:"Date"})}Function(e,n,r){const i=s.Clone(n,{}),o=e.map((e=>s.Clone(e,{})));return this.Create({...r,[t.Kind]:"Function",type:"object",instanceOf:"Function",parameters:o,returns:i})}InstanceType(e,t={}){return s.Clone(e.returns,t)}Parameters(e,t={}){return this.Tuple(e.parameters,{...t})}Promise(e,n={}){return this.Create({...n,[t.Kind]:"Promise",type:"object",instanceOf:"Promise",item:s.Clone(e,{})})}RegEx(e,n={}){return this.Create({...n,[t.Kind]:"String",type:"string",pattern:e.source})}ReturnType(e,t={}){return s.Clone(e.returns,t)}Symbol(e){return this.Create({...e,[t.Kind]:"Symbol",type:"null",typeOf:"Symbol"})}Undefined(e={}){return this.Create({...e,[t.Kind]:"Undefined",type:"null",typeOf:"Undefined"})}Uint8Array(e={}){return this.Create({...e,[t.Kind]:"Uint8Array",type:"object",instanceOf:"Uint8Array"})}Void(e={}){return this.Create({...e,[t.Kind]:"Void",type:"null",typeOf:"Void"})}}t.ExtendedTypeBuilder=w,t.StandardType=new T,t.Type=new w},47475:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};const i=n(82361),o=r(n(41241)),s=r(n(59577)),a=o.default("agent-base");function c(){const{stack:e}=new Error;return"string"==typeof e&&e.split("\n").some((e=>-1!==e.indexOf("(https.js:")||-1!==e.indexOf("node:https:")))}function l(e,t){return new l.Agent(e,t)}!function(e){class t extends i.EventEmitter{constructor(e,t){super();let n=t;"function"==typeof e?this.callback=e:e&&(n=e),this.timeout=null,n&&"number"==typeof n.timeout&&(this.timeout=n.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return"number"==typeof this.explicitDefaultPort?this.explicitDefaultPort:c()?443:80}set defaultPort(e){this.explicitDefaultPort=e}get protocol(){return"string"==typeof this.explicitProtocol?this.explicitProtocol:c()?"https:":"http:"}set protocol(e){this.explicitProtocol=e}callback(e,t,n){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(e,t){const n=Object.assign({},t);"boolean"!=typeof n.secureEndpoint&&(n.secureEndpoint=c()),null==n.host&&(n.host="localhost"),null==n.port&&(n.port=n.secureEndpoint?443:80),null==n.protocol&&(n.protocol=n.secureEndpoint?"https:":"http:"),n.host&&n.path&&delete n.path,delete n.agent,delete n.hostname,delete n._defaultAgent,delete n.defaultPort,delete n.createConnection,e._last=!0,e.shouldKeepAlive=!1;let r=!1,i=null;const o=n.timeout||this.timeout,l=t=>{e._hadError||(e.emit("error",t),e._hadError=!0)},u=()=>{i=null,r=!0;const e=new Error(`A "socket" was not created for HTTP request before ${o}ms`);e.code="ETIMEOUT",l(e)},p=e=>{r||(null!==i&&(clearTimeout(i),i=null),l(e))},d=t=>{if(r)return;if(null!=i&&(clearTimeout(i),i=null),o=t,Boolean(o)&&"function"==typeof o.addRequest)return a("Callback returned another Agent instance %o",t.constructor.name),void t.addRequest(e,n);var o;if(t)return t.once("free",(()=>{this.freeSocket(t,n)})),void e.onSocket(t);const s=new Error(`no Duplex stream was returned to agent-base for \`${e.method} ${e.path}\``);l(s)};if("function"==typeof this.callback){this.promisifiedCallback||(this.callback.length>=3?(a("Converting legacy callback function to promise"),this.promisifiedCallback=s.default(this.callback)):this.promisifiedCallback=this.callback),"number"==typeof o&&o>0&&(i=setTimeout(u,o)),"port"in n&&"number"!=typeof n.port&&(n.port=Number(n.port));try{a("Resolving socket for %o request: %o",n.protocol,`${e.method} ${e.path}`),Promise.resolve(this.promisifiedCallback(e,n)).then(d,p)}catch(e){Promise.reject(e).catch(p)}}else l(new Error("`callback` is not defined"))}freeSocket(e,t){a("Freeing socket %o %o",e.constructor.name,t),e.destroy()}destroy(){a("Destroying agent %o",this.constructor.name)}}e.Agent=t,e.prototype=e.Agent.prototype}(l||(l={})),e.exports=l},59577:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return function(t,n){return new Promise(((r,i)=>{e.call(this,t,n,((e,t)=>{e?i(e):r(t)}))}))}}},86236:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MissingRefError=t.ValidationError=t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=void 0;const r=n(38355),i=n(35671),o=n(30002),s=n(31512),a=["/properties"],c="http://json-schema.org/draft-07/schema";class l extends r.default{_addVocabularies(){super._addVocabularies(),i.default.forEach((e=>this.addVocabulary(e))),this.opts.discriminator&&this.addKeyword(o.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const e=this.opts.$data?this.$dataMetaSchema(s,a):s;this.addMetaSchema(e,c,!1),this.refs["http://json-schema.org/schema"]=c}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(c)?c:void 0)}}e.exports=t=l,Object.defineProperty(t,"__esModule",{value:!0}),t.default=l;var u=n(91686);Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return u.KeywordCxt}});var p=n(15669);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return p._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return p.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return p.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return p.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return p.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return p.CodeGen}});var d=n(46448);Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return d.default}});var h=n(91578);Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return h.default}})},66545:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.regexpCode=t.getEsmExportName=t.getProperty=t.safeStringify=t.stringify=t.strConcat=t.addCodeArg=t.str=t._=t.nil=t._Code=t.Name=t.IDENTIFIER=t._CodeOrName=void 0;class n{}t._CodeOrName=n,t.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class r extends n{constructor(e){if(super(),!t.IDENTIFIER.test(e))throw new Error("CodeGen: name must be a valid identifier");this.str=e}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}t.Name=r;class i extends n{constructor(e){super(),this._items="string"==typeof e?[e]:e}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const e=this._items[0];return""===e||'""'===e}get str(){var e;return null!==(e=this._str)&&void 0!==e?e:this._str=this._items.reduce(((e,t)=>`${e}${t}`),"")}get names(){var e;return null!==(e=this._names)&&void 0!==e?e:this._names=this._items.reduce(((e,t)=>(t instanceof r&&(e[t.str]=(e[t.str]||0)+1),e)),{})}}function o(e,...t){const n=[e[0]];let r=0;for(;r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.or=t.and=t.not=t.CodeGen=t.operators=t.varKinds=t.ValueScopeName=t.ValueScope=t.Scope=t.Name=t.regexpCode=t.stringify=t.getProperty=t.nil=t.strConcat=t.str=t._=void 0;const r=n(66545),i=n(59187);var o=n(66545);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return o._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return o.str}}),Object.defineProperty(t,"strConcat",{enumerable:!0,get:function(){return o.strConcat}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return o.nil}}),Object.defineProperty(t,"getProperty",{enumerable:!0,get:function(){return o.getProperty}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return o.stringify}}),Object.defineProperty(t,"regexpCode",{enumerable:!0,get:function(){return o.regexpCode}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return o.Name}});var s=n(59187);Object.defineProperty(t,"Scope",{enumerable:!0,get:function(){return s.Scope}}),Object.defineProperty(t,"ValueScope",{enumerable:!0,get:function(){return s.ValueScope}}),Object.defineProperty(t,"ValueScopeName",{enumerable:!0,get:function(){return s.ValueScopeName}}),Object.defineProperty(t,"varKinds",{enumerable:!0,get:function(){return s.varKinds}}),t.operators={GT:new r._Code(">"),GTE:new r._Code(">="),LT:new r._Code("<"),LTE:new r._Code("<="),EQ:new r._Code("==="),NEQ:new r._Code("!=="),NOT:new r._Code("!"),OR:new r._Code("||"),AND:new r._Code("&&"),ADD:new r._Code("+")};class a{optimizeNodes(){return this}optimizeNames(e,t){return this}}class c extends a{constructor(e,t,n){super(),this.varKind=e,this.name=t,this.rhs=n}render({es5:e,_n:t}){const n=e?i.varKinds.var:this.varKind,r=void 0===this.rhs?"":` = ${this.rhs}`;return`${n} ${this.name}${r};`+t}optimizeNames(e,t){if(e[this.name.str])return this.rhs&&(this.rhs=P(this.rhs,e,t)),this}get names(){return this.rhs instanceof r._CodeOrName?this.rhs.names:{}}}class l extends a{constructor(e,t,n){super(),this.lhs=e,this.rhs=t,this.sideEffects=n}render({_n:e}){return`${this.lhs} = ${this.rhs};`+e}optimizeNames(e,t){if(!(this.lhs instanceof r.Name)||e[this.lhs.str]||this.sideEffects)return this.rhs=P(this.rhs,e,t),this}get names(){return R(this.lhs instanceof r.Name?{}:{...this.lhs.names},this.rhs)}}class u extends l{constructor(e,t,n,r){super(e,n,r),this.op=t}render({_n:e}){return`${this.lhs} ${this.op}= ${this.rhs};`+e}}class p extends a{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`${this.label}:`+e}}class d extends a{constructor(e){super(),this.label=e,this.names={}}render({_n:e}){return`break${this.label?` ${this.label}`:""};`+e}}class h extends a{constructor(e){super(),this.error=e}render({_n:e}){return`throw ${this.error};`+e}get names(){return this.error.names}}class f extends a{constructor(e){super(),this.code=e}render({_n:e}){return`${this.code};`+e}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(e,t){return this.code=P(this.code,e,t),this}get names(){return this.code instanceof r._CodeOrName?this.code.names:{}}}class m extends a{constructor(e=[]){super(),this.nodes=e}render(e){return this.nodes.reduce(((t,n)=>t+n.render(e)),"")}optimizeNodes(){const{nodes:e}=this;let t=e.length;for(;t--;){const n=e[t].optimizeNodes();Array.isArray(n)?e.splice(t,1,...n):n?e[t]=n:e.splice(t,1)}return e.length>0?this:void 0}optimizeNames(e,t){const{nodes:n}=this;let r=n.length;for(;r--;){const i=n[r];i.optimizeNames(e,t)||(N(e,i.names),n.splice(r,1))}return n.length>0?this:void 0}get names(){return this.nodes.reduce(((e,t)=>k(e,t.names)),{})}}class g extends m{render(e){return"{"+e._n+super.render(e)+"}"+e._n}}class y extends m{}class _ extends g{}_.kind="else";class v extends g{constructor(e,t){super(t),this.condition=e}render(e){let t=`if(${this.condition})`+super.render(e);return this.else&&(t+="else "+this.else.render(e)),t}optimizeNodes(){super.optimizeNodes();const e=this.condition;if(!0===e)return this.nodes;let t=this.else;if(t){const e=t.optimizeNodes();t=this.else=Array.isArray(e)?new _(e):e}return t?!1===e?t instanceof v?t:t.nodes:this.nodes.length?this:new v(O(e),t instanceof v?[t]:t.nodes):!1!==e&&this.nodes.length?this:void 0}optimizeNames(e,t){var n;if(this.else=null===(n=this.else)||void 0===n?void 0:n.optimizeNames(e,t),super.optimizeNames(e,t)||this.else)return this.condition=P(this.condition,e,t),this}get names(){const e=super.names;return R(e,this.condition),this.else&&k(e,this.else.names),e}}v.kind="if";class b extends g{}b.kind="for";class E extends b{constructor(e){super(),this.iteration=e}render(e){return`for(${this.iteration})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iteration=P(this.iteration,e,t),this}get names(){return k(super.names,this.iteration.names)}}class T extends b{constructor(e,t,n,r){super(),this.varKind=e,this.name=t,this.from=n,this.to=r}render(e){const t=e.es5?i.varKinds.var:this.varKind,{name:n,from:r,to:o}=this;return`for(${t} ${n}=${r}; ${n}<${o}; ${n}++)`+super.render(e)}get names(){const e=R(super.names,this.from);return R(e,this.to)}}class w extends b{constructor(e,t,n,r){super(),this.loop=e,this.varKind=t,this.name=n,this.iterable=r}render(e){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(e)}optimizeNames(e,t){if(super.optimizeNames(e,t))return this.iterable=P(this.iterable,e,t),this}get names(){return k(super.names,this.iterable.names)}}class S extends g{constructor(e,t,n){super(),this.name=e,this.args=t,this.async=n}render(e){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(e)}}S.kind="func";class x extends m{render(e){return"return "+super.render(e)}}x.kind="return";class C extends g{render(e){let t="try"+super.render(e);return this.catch&&(t+=this.catch.render(e)),this.finally&&(t+=this.finally.render(e)),t}optimizeNodes(){var e,t;return super.optimizeNodes(),null===(e=this.catch)||void 0===e||e.optimizeNodes(),null===(t=this.finally)||void 0===t||t.optimizeNodes(),this}optimizeNames(e,t){var n,r;return super.optimizeNames(e,t),null===(n=this.catch)||void 0===n||n.optimizeNames(e,t),null===(r=this.finally)||void 0===r||r.optimizeNames(e,t),this}get names(){const e=super.names;return this.catch&&k(e,this.catch.names),this.finally&&k(e,this.finally.names),e}}class I extends g{constructor(e){super(),this.error=e}render(e){return`catch(${this.error})`+super.render(e)}}I.kind="catch";class A extends g{render(e){return"finally"+super.render(e)}}function k(e,t){for(const n in t)e[n]=(e[n]||0)+(t[n]||0);return e}function R(e,t){return t instanceof r._CodeOrName?k(e,t.names):e}function P(e,t,n){return e instanceof r.Name?o(e):(i=e)instanceof r._Code&&i._items.some((e=>e instanceof r.Name&&1===t[e.str]&&void 0!==n[e.str]))?new r._Code(e._items.reduce(((e,t)=>(t instanceof r.Name&&(t=o(t)),t instanceof r._Code?e.push(...t._items):e.push(t),e)),[])):e;var i;function o(e){const r=n[e.str];return void 0===r||1!==t[e.str]?e:(delete t[e.str],r)}}function N(e,t){for(const n in t)e[n]=(e[n]||0)-(t[n]||0)}function O(e){return"boolean"==typeof e||"number"==typeof e||null===e?!e:r._`!${F(e)}`}A.kind="finally",t.CodeGen=class{constructor(e,t={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...t,_n:t.lines?"\n":""},this._extScope=e,this._scope=new i.Scope({parent:e}),this._nodes=[new y]}toString(){return this._root.render(this.opts)}name(e){return this._scope.name(e)}scopeName(e){return this._extScope.name(e)}scopeValue(e,t){const n=this._extScope.value(e,t);return(this._values[n.prefix]||(this._values[n.prefix]=new Set)).add(n),n}getScopeValue(e,t){return this._extScope.getValue(e,t)}scopeRefs(e){return this._extScope.scopeRefs(e,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(e,t,n,r){const i=this._scope.toName(t);return void 0!==n&&r&&(this._constants[i.str]=n),this._leafNode(new c(e,i,n)),i}const(e,t,n){return this._def(i.varKinds.const,e,t,n)}let(e,t,n){return this._def(i.varKinds.let,e,t,n)}var(e,t,n){return this._def(i.varKinds.var,e,t,n)}assign(e,t,n){return this._leafNode(new l(e,t,n))}add(e,n){return this._leafNode(new u(e,t.operators.ADD,n))}code(e){return"function"==typeof e?e():e!==r.nil&&this._leafNode(new f(e)),this}object(...e){const t=["{"];for(const[n,i]of e)t.length>1&&t.push(","),t.push(n),(n!==i||this.opts.es5)&&(t.push(":"),(0,r.addCodeArg)(t,i));return t.push("}"),new r._Code(t)}if(e,t,n){if(this._blockNode(new v(e)),t&&n)this.code(t).else().code(n).endIf();else if(t)this.code(t).endIf();else if(n)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(e){return this._elseNode(new v(e))}else(){return this._elseNode(new _)}endIf(){return this._endBlockNode(v,_)}_for(e,t){return this._blockNode(e),t&&this.code(t).endFor(),this}for(e,t){return this._for(new E(e),t)}forRange(e,t,n,r,o=(this.opts.es5?i.varKinds.var:i.varKinds.let)){const s=this._scope.toName(e);return this._for(new T(o,s,t,n),(()=>r(s)))}forOf(e,t,n,o=i.varKinds.const){const s=this._scope.toName(e);if(this.opts.es5){const e=t instanceof r.Name?t:this.var("_arr",t);return this.forRange("_i",0,r._`${e}.length`,(t=>{this.var(s,r._`${e}[${t}]`),n(s)}))}return this._for(new w("of",o,s,t),(()=>n(s)))}forIn(e,t,n,o=(this.opts.es5?i.varKinds.var:i.varKinds.const)){if(this.opts.ownProperties)return this.forOf(e,r._`Object.keys(${t})`,n);const s=this._scope.toName(e);return this._for(new w("in",o,s,t),(()=>n(s)))}endFor(){return this._endBlockNode(b)}label(e){return this._leafNode(new p(e))}break(e){return this._leafNode(new d(e))}return(e){const t=new x;if(this._blockNode(t),this.code(e),1!==t.nodes.length)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(x)}try(e,t,n){if(!t&&!n)throw new Error('CodeGen: "try" without "catch" and "finally"');const r=new C;if(this._blockNode(r),this.code(e),t){const e=this.name("e");this._currNode=r.catch=new I(e),t(e)}return n&&(this._currNode=r.finally=new A,this.code(n)),this._endBlockNode(I,A)}throw(e){return this._leafNode(new h(e))}block(e,t){return this._blockStarts.push(this._nodes.length),e&&this.code(e).endBlock(t),this}endBlock(e){const t=this._blockStarts.pop();if(void 0===t)throw new Error("CodeGen: not in self-balancing block");const n=this._nodes.length-t;if(n<0||void 0!==e&&n!==e)throw new Error(`CodeGen: wrong number of nodes: ${n} vs ${e} expected`);return this._nodes.length=t,this}func(e,t=r.nil,n,i){return this._blockNode(new S(e,t,n)),i&&this.code(i).endFunc(),this}endFunc(){return this._endBlockNode(S)}optimize(e=1){for(;e-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(e){return this._currNode.nodes.push(e),this}_blockNode(e){this._currNode.nodes.push(e),this._nodes.push(e)}_endBlockNode(e,t){const n=this._currNode;if(n instanceof e||t&&n instanceof t)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${t?`${e.kind}/${t.kind}`:e.kind}"`)}_elseNode(e){const t=this._currNode;if(!(t instanceof v))throw new Error('CodeGen: "else" without "if"');return this._currNode=t.else=e,this}get _root(){return this._nodes[0]}get _currNode(){const e=this._nodes;return e[e.length-1]}set _currNode(e){const t=this._nodes;t[t.length-1]=e}},t.not=O;const M=L(t.operators.AND);t.and=function(...e){return e.reduce(M)};const D=L(t.operators.OR);function L(e){return(t,n)=>t===r.nil?n:n===r.nil?t:r._`${F(t)} ${e} ${F(n)}`}function F(e){return e instanceof r.Name?e:r._`(${e})`}t.or=function(...e){return e.reduce(D)}},59187:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ValueScope=t.ValueScopeName=t.Scope=t.varKinds=t.UsedValueState=void 0;const r=n(66545);class i extends Error{constructor(e){super(`CodeGen: "code" for ${e} not defined`),this.value=e.value}}var o;!function(e){e[e.Started=0]="Started",e[e.Completed=1]="Completed"}(o=t.UsedValueState||(t.UsedValueState={})),t.varKinds={const:new r.Name("const"),let:new r.Name("let"),var:new r.Name("var")};class s{constructor({prefixes:e,parent:t}={}){this._names={},this._prefixes=e,this._parent=t}toName(e){return e instanceof r.Name?e:this.name(e)}name(e){return new r.Name(this._newName(e))}_newName(e){return`${e}${(this._names[e]||this._nameGroup(e)).index++}`}_nameGroup(e){var t,n;if((null===(n=null===(t=this._parent)||void 0===t?void 0:t._prefixes)||void 0===n?void 0:n.has(e))||this._prefixes&&!this._prefixes.has(e))throw new Error(`CodeGen: prefix "${e}" is not allowed in this scope`);return this._names[e]={prefix:e,index:0}}}t.Scope=s;class a extends r.Name{constructor(e,t){super(t),this.prefix=e}setValue(e,{property:t,itemIndex:n}){this.value=e,this.scopePath=r._`.${new r.Name(t)}[${n}]`}}t.ValueScopeName=a;const c=r._`\n`;t.ValueScope=class extends s{constructor(e){super(e),this._values={},this._scope=e.scope,this.opts={...e,_n:e.lines?c:r.nil}}get(){return this._scope}name(e){return new a(e,this._newName(e))}value(e,t){var n;if(void 0===t.ref)throw new Error("CodeGen: ref must be passed in value");const r=this.toName(e),{prefix:i}=r,o=null!==(n=t.key)&&void 0!==n?n:t.ref;let s=this._values[i];if(s){const e=s.get(o);if(e)return e}else s=this._values[i]=new Map;s.set(o,r);const a=this._scope[i]||(this._scope[i]=[]),c=a.length;return a[c]=t.ref,r.setValue(t,{property:i,itemIndex:c}),r}getValue(e,t){const n=this._values[e];if(n)return n.get(t)}scopeRefs(e,t=this._values){return this._reduceValues(t,(t=>{if(void 0===t.scopePath)throw new Error(`CodeGen: name "${t}" has no value`);return r._`${e}${t.scopePath}`}))}scopeCode(e=this._values,t,n){return this._reduceValues(e,(e=>{if(void 0===e.value)throw new Error(`CodeGen: name "${e}" has no value`);return e.value.code}),t,n)}_reduceValues(e,n,s={},a){let c=r.nil;for(const l in e){const u=e[l];if(!u)continue;const p=s[l]=s[l]||new Map;u.forEach((e=>{if(p.has(e))return;p.set(e,o.Started);let s=n(e);if(s){const n=this.opts.es5?t.varKinds.var:t.varKinds.const;c=r._`${c}${n} ${e} = ${s};${this.opts._n}`}else{if(!(s=null==a?void 0:a(e)))throw new i(e);c=r._`${c}${s}${this.opts._n}`}p.set(e,o.Completed)}))}return c}}},6930:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.extendErrors=t.resetErrorsCount=t.reportExtraError=t.reportError=t.keyword$DataError=t.keywordError=void 0;const r=n(15669),i=n(88936),o=n(17250);function s(e,t){const n=e.const("err",t);e.if(r._`${o.default.vErrors} === null`,(()=>e.assign(o.default.vErrors,r._`[${n}]`)),r._`${o.default.vErrors}.push(${n})`),e.code(r._`${o.default.errors}++`)}function a(e,t){const{gen:n,validateName:i,schemaEnv:o}=e;o.$async?n.throw(r._`new ${e.ValidationError}(${t})`):(n.assign(r._`${i}.errors`,t),n.return(!1))}t.keywordError={message:({keyword:e})=>r.str`must pass "${e}" keyword validation`},t.keyword$DataError={message:({keyword:e,schemaType:t})=>t?r.str`"${e}" keyword must be ${t} ($data)`:r.str`"${e}" keyword is invalid ($data)`},t.reportError=function(e,n=t.keywordError,i,o){const{it:c}=e,{gen:u,compositeRule:p,allErrors:d}=c,h=l(e,n,i);(null!=o?o:p||d)?s(u,h):a(c,r._`[${h}]`)},t.reportExtraError=function(e,n=t.keywordError,r){const{it:i}=e,{gen:c,compositeRule:u,allErrors:p}=i;s(c,l(e,n,r)),u||p||a(i,o.default.vErrors)},t.resetErrorsCount=function(e,t){e.assign(o.default.errors,t),e.if(r._`${o.default.vErrors} !== null`,(()=>e.if(t,(()=>e.assign(r._`${o.default.vErrors}.length`,t)),(()=>e.assign(o.default.vErrors,null)))))},t.extendErrors=function({gen:e,keyword:t,schemaValue:n,data:i,errsCount:s,it:a}){if(void 0===s)throw new Error("ajv implementation error");const c=e.name("err");e.forRange("i",s,o.default.errors,(s=>{e.const(c,r._`${o.default.vErrors}[${s}]`),e.if(r._`${c}.instancePath === undefined`,(()=>e.assign(r._`${c}.instancePath`,(0,r.strConcat)(o.default.instancePath,a.errorPath)))),e.assign(r._`${c}.schemaPath`,r.str`${a.errSchemaPath}/${t}`),a.opts.verbose&&(e.assign(r._`${c}.schema`,n),e.assign(r._`${c}.data`,i))}))};const c={keyword:new r.Name("keyword"),schemaPath:new r.Name("schemaPath"),params:new r.Name("params"),propertyName:new r.Name("propertyName"),message:new r.Name("message"),schema:new r.Name("schema"),parentSchema:new r.Name("parentSchema")};function l(e,t,n){const{createErrors:i}=e.it;return!1===i?r._`{}`:function(e,t,n={}){const{gen:i,it:s}=e,a=[u(s,n),p(e,n)];return function(e,{params:t,message:n},i){const{keyword:s,data:a,schemaValue:l,it:u}=e,{opts:p,propertyName:d,topSchemaRef:h,schemaPath:f}=u;i.push([c.keyword,s],[c.params,"function"==typeof t?t(e):t||r._`{}`]),p.messages&&i.push([c.message,"function"==typeof n?n(e):n]),p.verbose&&i.push([c.schema,l],[c.parentSchema,r._`${h}${f}`],[o.default.data,a]),d&&i.push([c.propertyName,d])}(e,t,a),i.object(...a)}(e,t,n)}function u({errorPath:e},{instancePath:t}){const n=t?r.str`${e}${(0,i.getErrorPath)(t,i.Type.Str)}`:e;return[o.default.instancePath,(0,r.strConcat)(o.default.instancePath,n)]}function p({keyword:e,it:{errSchemaPath:t}},{schemaPath:n,parentSchema:o}){let s=o?t:r.str`${t}/${e}`;return n&&(s=r.str`${s}${(0,i.getErrorPath)(n,i.Type.Str)}`),[c.schemaPath,s]}},87382:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resolveSchema=t.getCompilingSchema=t.resolveRef=t.compileSchema=t.SchemaEnv=void 0;const r=n(15669),i=n(46448),o=n(17250),s=n(96696),a=n(88936),c=n(91686);class l{constructor(e){var t;let n;this.refs={},this.dynamicAnchors={},"object"==typeof e.schema&&(n=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=null!==(t=e.baseId)&&void 0!==t?t:(0,s.normalizeId)(null==n?void 0:n[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=null==n?void 0:n.$async,this.refs={}}}function u(e){const t=d.call(this,e);if(t)return t;const n=(0,s.getFullPath)(this.opts.uriResolver,e.root.baseId),{es5:a,lines:l}=this.opts.code,{ownProperties:u}=this.opts,p=new r.CodeGen(this.scope,{es5:a,lines:l,ownProperties:u});let h;e.$async&&(h=p.scopeValue("Error",{ref:i.default,code:r._`require("ajv/dist/runtime/validation_error").default`}));const f=p.scopeName("validate");e.validateName=f;const m={gen:p,allErrors:this.opts.allErrors,data:o.default.data,parentData:o.default.parentData,parentDataProperty:o.default.parentDataProperty,dataNames:[o.default.data],dataPathArr:[r.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:p.scopeValue("schema",!0===this.opts.code.source?{ref:e.schema,code:(0,r.stringify)(e.schema)}:{ref:e.schema}),validateName:f,ValidationError:h,schema:e.schema,schemaEnv:e,rootId:n,baseId:e.baseId||n,schemaPath:r.nil,errSchemaPath:e.schemaPath||(this.opts.jtd?"":"#"),errorPath:r._`""`,opts:this.opts,self:this};let g;try{this._compilations.add(e),(0,c.validateFunctionCode)(m),p.optimize(this.opts.code.optimize);const t=p.toString();g=`${p.scopeRefs(o.default.scope)}return ${t}`,this.opts.code.process&&(g=this.opts.code.process(g,e));const n=new Function(`${o.default.self}`,`${o.default.scope}`,g)(this,this.scope.get());if(this.scope.value(f,{ref:n}),n.errors=null,n.schema=e.schema,n.schemaEnv=e,e.$async&&(n.$async=!0),!0===this.opts.code.source&&(n.source={validateName:f,validateCode:t,scopeValues:p._values}),this.opts.unevaluated){const{props:e,items:t}=m;n.evaluated={props:e instanceof r.Name?void 0:e,items:t instanceof r.Name?void 0:t,dynamicProps:e instanceof r.Name,dynamicItems:t instanceof r.Name},n.source&&(n.source.evaluated=(0,r.stringify)(n.evaluated))}return e.validate=n,e}catch(t){throw delete e.validate,delete e.validateName,g&&this.logger.error("Error compiling schema, function code:",g),t}finally{this._compilations.delete(e)}}function p(e){return(0,s.inlineRef)(e.schema,this.opts.inlineRefs)?e.schema:e.validate?e:u.call(this,e)}function d(e){for(const r of this._compilations)if(n=e,(t=r).schema===n.schema&&t.root===n.root&&t.baseId===n.baseId)return r;var t,n}function h(e,t){let n;for(;"string"==typeof(n=this.refs[t]);)t=n;return n||this.schemas[t]||f.call(this,e,t)}function f(e,t){const n=this.opts.uriResolver.parse(t),r=(0,s._getFullPath)(this.opts.uriResolver,n);let i=(0,s.getFullPath)(this.opts.uriResolver,e.baseId,void 0);if(Object.keys(e.schema).length>0&&r===i)return g.call(this,n,e);const o=(0,s.normalizeId)(r),a=this.refs[o]||this.schemas[o];if("string"==typeof a){const t=f.call(this,e,a);if("object"!=typeof(null==t?void 0:t.schema))return;return g.call(this,n,t)}if("object"==typeof(null==a?void 0:a.schema)){if(a.validate||u.call(this,a),o===(0,s.normalizeId)(t)){const{schema:t}=a,{schemaId:n}=this.opts,r=t[n];return r&&(i=(0,s.resolveUrl)(this.opts.uriResolver,i,r)),new l({schema:t,schemaId:n,root:e,baseId:i})}return g.call(this,n,a)}}t.SchemaEnv=l,t.compileSchema=u,t.resolveRef=function(e,t,n){var r;n=(0,s.resolveUrl)(this.opts.uriResolver,t,n);const i=e.refs[n];if(i)return i;let o=h.call(this,e,n);if(void 0===o){const i=null===(r=e.localRefs)||void 0===r?void 0:r[n],{schemaId:s}=this.opts;i&&(o=new l({schema:i,schemaId:s,root:e,baseId:t}))}return void 0!==o?e.refs[n]=p.call(this,o):void 0},t.getCompilingSchema=d,t.resolveSchema=f;const m=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function g(e,{baseId:t,schema:n,root:r}){var i;if("/"!==(null===(i=e.fragment)||void 0===i?void 0:i[0]))return;for(const r of e.fragment.slice(1).split("/")){if("boolean"==typeof n)return;const e=n[(0,a.unescapeFragment)(r)];if(void 0===e)return;const i="object"==typeof(n=e)&&n[this.opts.schemaId];!m.has(r)&&i&&(t=(0,s.resolveUrl)(this.opts.uriResolver,t,i))}let o;if("boolean"!=typeof n&&n.$ref&&!(0,a.schemaHasRulesButRef)(n,this.RULES)){const e=(0,s.resolveUrl)(this.opts.uriResolver,t,n.$ref);o=f.call(this,r,e)}const{schemaId:c}=this.opts;return o=o||new l({schema:n,schemaId:c,root:r,baseId:t}),o.schema!==o.root.schema?o:void 0}},17250:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i={data:new r.Name("data"),valCxt:new r.Name("valCxt"),instancePath:new r.Name("instancePath"),parentData:new r.Name("parentData"),parentDataProperty:new r.Name("parentDataProperty"),rootData:new r.Name("rootData"),dynamicAnchors:new r.Name("dynamicAnchors"),vErrors:new r.Name("vErrors"),errors:new r.Name("errors"),this:new r.Name("this"),self:new r.Name("self"),scope:new r.Name("scope"),json:new r.Name("json"),jsonPos:new r.Name("jsonPos"),jsonLen:new r.Name("jsonLen"),jsonPart:new r.Name("jsonPart")};t.default=i},91578:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(96696);class i extends Error{constructor(e,t,n,i){super(i||`can't resolve reference ${n} from id ${t}`),this.missingRef=(0,r.resolveUrl)(e,t,n),this.missingSchema=(0,r.normalizeId)((0,r.getFullPath)(e,this.missingRef))}}t.default=i},96696:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getSchemaRefs=t.resolveUrl=t.normalizeId=t._getFullPath=t.getFullPath=t.inlineRef=void 0;const r=n(88936),i=n(66471),o=n(25127),s=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);t.inlineRef=function(e,t=!0){return"boolean"==typeof e||(!0===t?!c(e):!!t&&l(e)<=t)};const a=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function c(e){for(const t in e){if(a.has(t))return!0;const n=e[t];if(Array.isArray(n)&&n.some(c))return!0;if("object"==typeof n&&c(n))return!0}return!1}function l(e){let t=0;for(const n in e){if("$ref"===n)return 1/0;if(t++,!s.has(n)&&("object"==typeof e[n]&&(0,r.eachItem)(e[n],(e=>t+=l(e))),t===1/0))return 1/0}return t}function u(e,t="",n){!1!==n&&(t=h(t));const r=e.parse(t);return p(e,r)}function p(e,t){return e.serialize(t).split("#")[0]+"#"}t.getFullPath=u,t._getFullPath=p;const d=/#\/?$/;function h(e){return e?e.replace(d,""):""}t.normalizeId=h,t.resolveUrl=function(e,t,n){return n=h(n),e.resolve(t,n)};const f=/^[a-z_][-a-z0-9._]*$/i;t.getSchemaRefs=function(e,t){if("boolean"==typeof e)return{};const{schemaId:n,uriResolver:r}=this.opts,s=h(e[n]||t),a={"":s},c=u(r,s,!1),l={},p=new Set;return o(e,{allKeys:!0},((e,t,r,i)=>{if(void 0===i)return;const o=c+t;let s=a[i];function u(t){const n=this.opts.uriResolver.resolve;if(t=h(s?n(s,t):t),p.has(t))throw m(t);p.add(t);let r=this.refs[t];return"string"==typeof r&&(r=this.refs[r]),"object"==typeof r?d(e,r.schema,t):t!==h(o)&&("#"===t[0]?(d(e,l[t],t),l[t]=e):this.refs[t]=o),t}function g(e){if("string"==typeof e){if(!f.test(e))throw new Error(`invalid anchor "${e}"`);u.call(this,`#${e}`)}}"string"==typeof e[n]&&(s=u.call(this,e[n])),g.call(this,e.$anchor),g.call(this,e.$dynamicAnchor),a[t]=s})),l;function d(e,t,n){if(void 0!==t&&!i(e,t))throw m(n)}function m(e){return new Error(`reference "${e}" resolves to more than one schema`)}}},82881:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getRules=t.isJSONType=void 0;const n=new Set(["string","number","integer","boolean","null","object","array"]);t.isJSONType=function(e){return"string"==typeof e&&n.has(e)},t.getRules=function(){const e={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...e,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},e.number,e.string,e.array,e.object],post:{rules:[]},all:{},keywords:{}}}},88936:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.checkStrictMode=t.getErrorPath=t.Type=t.useFunc=t.setEvaluated=t.evaluatedPropsToName=t.mergeEvaluated=t.eachItem=t.unescapeJsonPointer=t.escapeJsonPointer=t.escapeFragment=t.unescapeFragment=t.schemaRefOrVal=t.schemaHasRulesButRef=t.schemaHasRules=t.checkUnknownRules=t.alwaysValidSchema=t.toHash=void 0;const r=n(15669),i=n(66545);function o(e,t=e.schema){const{opts:n,self:r}=e;if(!n.strictSchema)return;if("boolean"==typeof t)return;const i=r.RULES.keywords;for(const n in t)i[n]||f(e,`unknown keyword: "${n}"`)}function s(e,t){if("boolean"==typeof e)return!e;for(const n in e)if(t[n])return!0;return!1}function a(e){return"number"==typeof e?`${e}`:e.replace(/~/g,"~0").replace(/\//g,"~1")}function c(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function l({mergeNames:e,mergeToName:t,mergeValues:n,resultToName:i}){return(o,s,a,c)=>{const l=void 0===a?s:a instanceof r.Name?(s instanceof r.Name?e(o,s,a):t(o,s,a),a):s instanceof r.Name?(t(o,a,s),s):n(s,a);return c!==r.Name||l instanceof r.Name?l:i(o,l)}}function u(e,t){if(!0===t)return e.var("props",!0);const n=e.var("props",r._`{}`);return void 0!==t&&p(e,n,t),n}function p(e,t,n){Object.keys(n).forEach((n=>e.assign(r._`${t}${(0,r.getProperty)(n)}`,!0)))}t.toHash=function(e){const t={};for(const n of e)t[n]=!0;return t},t.alwaysValidSchema=function(e,t){return"boolean"==typeof t?t:0===Object.keys(t).length||(o(e,t),!s(t,e.self.RULES.all))},t.checkUnknownRules=o,t.schemaHasRules=s,t.schemaHasRulesButRef=function(e,t){if("boolean"==typeof e)return!e;for(const n in e)if("$ref"!==n&&t.all[n])return!0;return!1},t.schemaRefOrVal=function({topSchemaRef:e,schemaPath:t},n,i,o){if(!o){if("number"==typeof n||"boolean"==typeof n)return n;if("string"==typeof n)return r._`${n}`}return r._`${e}${t}${(0,r.getProperty)(i)}`},t.unescapeFragment=function(e){return c(decodeURIComponent(e))},t.escapeFragment=function(e){return encodeURIComponent(a(e))},t.escapeJsonPointer=a,t.unescapeJsonPointer=c,t.eachItem=function(e,t){if(Array.isArray(e))for(const n of e)t(n);else t(e)},t.mergeEvaluated={props:l({mergeNames:(e,t,n)=>e.if(r._`${n} !== true && ${t} !== undefined`,(()=>{e.if(r._`${t} === true`,(()=>e.assign(n,!0)),(()=>e.assign(n,r._`${n} || {}`).code(r._`Object.assign(${n}, ${t})`)))})),mergeToName:(e,t,n)=>e.if(r._`${n} !== true`,(()=>{!0===t?e.assign(n,!0):(e.assign(n,r._`${n} || {}`),p(e,n,t))})),mergeValues:(e,t)=>!0===e||{...e,...t},resultToName:u}),items:l({mergeNames:(e,t,n)=>e.if(r._`${n} !== true && ${t} !== undefined`,(()=>e.assign(n,r._`${t} === true ? true : ${n} > ${t} ? ${n} : ${t}`))),mergeToName:(e,t,n)=>e.if(r._`${n} !== true`,(()=>e.assign(n,!0===t||r._`${n} > ${t} ? ${n} : ${t}`))),mergeValues:(e,t)=>!0===e||Math.max(e,t),resultToName:(e,t)=>e.var("items",t)})},t.evaluatedPropsToName=u,t.setEvaluated=p;const d={};var h;function f(e,t,n=e.opts.strictSchema){if(n){if(t=`strict mode: ${t}`,!0===n)throw new Error(t);e.self.logger.warn(t)}}t.useFunc=function(e,t){return e.scopeValue("func",{ref:t,code:d[t.code]||(d[t.code]=new i._Code(t.code))})},function(e){e[e.Num=0]="Num",e[e.Str=1]="Str"}(h=t.Type||(t.Type={})),t.getErrorPath=function(e,t,n){if(e instanceof r.Name){const i=t===h.Num;return n?i?r._`"[" + ${e} + "]"`:r._`"['" + ${e} + "']"`:i?r._`"/" + ${e}`:r._`"/" + ${e}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return n?(0,r.getProperty)(e).toString():"/"+a(e)},t.checkStrictMode=f},89073:(e,t)=>{"use strict";function n(e,t){return t.rules.some((t=>r(e,t)))}function r(e,t){var n;return void 0!==e[t.keyword]||(null===(n=t.definition.implements)||void 0===n?void 0:n.some((t=>void 0!==e[t])))}Object.defineProperty(t,"__esModule",{value:!0}),t.shouldUseRule=t.shouldUseGroup=t.schemaHasRulesForType=void 0,t.schemaHasRulesForType=function({schema:e,self:t},r){const i=t.RULES.types[r];return i&&!0!==i&&n(e,i)},t.shouldUseGroup=n,t.shouldUseRule=r},12171:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.boolOrEmptySchema=t.topBoolOrEmptySchema=void 0;const r=n(6930),i=n(15669),o=n(17250),s={message:"boolean schema is false"};function a(e,t){const{gen:n,data:i}=e,o={gen:n,keyword:"false schema",data:i,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:e};(0,r.reportError)(o,s,void 0,t)}t.topBoolOrEmptySchema=function(e){const{gen:t,schema:n,validateName:r}=e;!1===n?a(e,!1):"object"==typeof n&&!0===n.$async?t.return(o.default.data):(t.assign(i._`${r}.errors`,null),t.return(!0))},t.boolOrEmptySchema=function(e,t){const{gen:n,schema:r}=e;!1===r?(n.var(t,!1),a(e)):n.var(t,!0)}},97332:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reportTypeError=t.checkDataTypes=t.checkDataType=t.coerceAndCheckDataType=t.getJSONTypes=t.getSchemaTypes=t.DataType=void 0;const r=n(82881),i=n(89073),o=n(6930),s=n(15669),a=n(88936);var c;function l(e){const t=Array.isArray(e)?e:e?[e]:[];if(t.every(r.isJSONType))return t;throw new Error("type must be JSONType or JSONType[]: "+t.join(","))}!function(e){e[e.Correct=0]="Correct",e[e.Wrong=1]="Wrong"}(c=t.DataType||(t.DataType={})),t.getSchemaTypes=function(e){const t=l(e.type);if(t.includes("null")){if(!1===e.nullable)throw new Error("type: null contradicts nullable: false")}else{if(!t.length&&void 0!==e.nullable)throw new Error('"nullable" cannot be used without "type"');!0===e.nullable&&t.push("null")}return t},t.getJSONTypes=l,t.coerceAndCheckDataType=function(e,t){const{gen:n,data:r,opts:o}=e,a=function(e,t){return t?e.filter((e=>u.has(e)||"array"===t&&"array"===e)):[]}(t,o.coerceTypes),l=t.length>0&&!(0===a.length&&1===t.length&&(0,i.schemaHasRulesForType)(e,t[0]));if(l){const i=d(t,r,o.strictNumbers,c.Wrong);n.if(i,(()=>{a.length?function(e,t,n){const{gen:r,data:i,opts:o}=e,a=r.let("dataType",s._`typeof ${i}`),c=r.let("coerced",s._`undefined`);"array"===o.coerceTypes&&r.if(s._`${a} == 'object' && Array.isArray(${i}) && ${i}.length == 1`,(()=>r.assign(i,s._`${i}[0]`).assign(a,s._`typeof ${i}`).if(d(t,i,o.strictNumbers),(()=>r.assign(c,i))))),r.if(s._`${c} !== undefined`);for(const e of n)(u.has(e)||"array"===e&&"array"===o.coerceTypes)&&l(e);function l(e){switch(e){case"string":return void r.elseIf(s._`${a} == "number" || ${a} == "boolean"`).assign(c,s._`"" + ${i}`).elseIf(s._`${i} === null`).assign(c,s._`""`);case"number":return void r.elseIf(s._`${a} == "boolean" || ${i} === null - || (${a} == "string" && ${i} && ${i} == +${i})`).assign(c,s._`+${i}`);case"integer":return void r.elseIf(s._`${a} === "boolean" || ${i} === null - || (${a} === "string" && ${i} && ${i} == +${i} && !(${i} % 1))`).assign(c,s._`+${i}`);case"boolean":return void r.elseIf(s._`${i} === "false" || ${i} === 0 || ${i} === null`).assign(c,!1).elseIf(s._`${i} === "true" || ${i} === 1`).assign(c,!0);case"null":return r.elseIf(s._`${i} === "" || ${i} === 0 || ${i} === false`),void r.assign(c,null);case"array":r.elseIf(s._`${a} === "string" || ${a} === "number" - || ${a} === "boolean" || ${i} === null`).assign(c,s._`[${i}]`)}}r.else(),f(e),r.endIf(),r.if(s._`${c} !== undefined`,(()=>{r.assign(i,c),function({gen:e,parentData:t,parentDataProperty:n},r){e.if(s._`${t} !== undefined`,(()=>e.assign(s._`${t}[${n}]`,r)))}(e,c)}))}(e,t,a):f(e)}))}return l};const u=new Set(["string","number","integer","boolean","null"]);function p(e,t,n,r=c.Correct){const i=r===c.Correct?s.operators.EQ:s.operators.NEQ;let o;switch(e){case"null":return s._`${t} ${i} null`;case"array":o=s._`Array.isArray(${t})`;break;case"object":o=s._`${t} && typeof ${t} == "object" && !Array.isArray(${t})`;break;case"integer":o=a(s._`!(${t} % 1) && !isNaN(${t})`);break;case"number":o=a();break;default:return s._`typeof ${t} ${i} ${e}`}return r===c.Correct?o:(0,s.not)(o);function a(e=s.nil){return(0,s.and)(s._`typeof ${t} == "number"`,e,n?s._`isFinite(${t})`:s.nil)}}function d(e,t,n,r){if(1===e.length)return p(e[0],t,n,r);let i;const o=(0,a.toHash)(e);if(o.array&&o.object){const e=s._`typeof ${t} != "object"`;i=o.null?e:s._`!${t} || ${e}`,delete o.null,delete o.array,delete o.object}else i=s.nil;o.number&&delete o.integer;for(const e in o)i=(0,s.and)(i,p(e,t,n,r));return i}t.checkDataType=p,t.checkDataTypes=d;const h={message:({schema:e})=>`must be ${e}`,params:({schema:e,schemaValue:t})=>"string"==typeof e?s._`{type: ${e}}`:s._`{type: ${t}}`};function f(e){const t=function(e){const{gen:t,data:n,schema:r}=e,i=(0,a.schemaRefOrVal)(e,r,"type");return{gen:t,keyword:"type",data:n,schema:r.type,schemaCode:i,schemaValue:i,parentSchema:r,params:{},it:e}}(e);(0,o.reportError)(t,h)}t.reportTypeError=f},91481:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.assignDefaults=void 0;const r=n(15669),i=n(88936);function o(e,t,n){const{gen:o,compositeRule:s,data:a,opts:c}=e;if(void 0===n)return;const l=r._`${a}${(0,r.getProperty)(t)}`;if(s)return void(0,i.checkStrictMode)(e,`default is ignored for: ${l}`);let u=r._`${l} === undefined`;"empty"===c.useDefaults&&(u=r._`${u} || ${l} === null || ${l} === ""`),o.if(u,r._`${l} = ${(0,r.stringify)(n)}`)}t.assignDefaults=function(e,t){const{properties:n,items:r}=e.schema;if("object"===t&&n)for(const t in n)o(e,t,n[t].default);else"array"===t&&Array.isArray(r)&&r.forEach(((t,n)=>o(e,n,t.default)))}},91686:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getData=t.KeywordCxt=t.validateFunctionCode=void 0;const r=n(12171),i=n(97332),o=n(89073),s=n(97332),a=n(91481),c=n(95782),l=n(38878),u=n(15669),p=n(17250),d=n(96696),h=n(88936),f=n(6930);function m({gen:e,validateName:t,schema:n,schemaEnv:r,opts:i},o){i.code.es5?e.func(t,u._`${p.default.data}, ${p.default.valCxt}`,r.$async,(()=>{e.code(u._`"use strict"; ${g(n,i)}`),function(e,t){e.if(p.default.valCxt,(()=>{e.var(p.default.instancePath,u._`${p.default.valCxt}.${p.default.instancePath}`),e.var(p.default.parentData,u._`${p.default.valCxt}.${p.default.parentData}`),e.var(p.default.parentDataProperty,u._`${p.default.valCxt}.${p.default.parentDataProperty}`),e.var(p.default.rootData,u._`${p.default.valCxt}.${p.default.rootData}`),t.dynamicRef&&e.var(p.default.dynamicAnchors,u._`${p.default.valCxt}.${p.default.dynamicAnchors}`)}),(()=>{e.var(p.default.instancePath,u._`""`),e.var(p.default.parentData,u._`undefined`),e.var(p.default.parentDataProperty,u._`undefined`),e.var(p.default.rootData,p.default.data),t.dynamicRef&&e.var(p.default.dynamicAnchors,u._`{}`)}))}(e,i),e.code(o)})):e.func(t,u._`${p.default.data}, ${function(e){return u._`{${p.default.instancePath}="", ${p.default.parentData}, ${p.default.parentDataProperty}, ${p.default.rootData}=${p.default.data}${e.dynamicRef?u._`, ${p.default.dynamicAnchors}={}`:u.nil}}={}`}(i)}`,r.$async,(()=>e.code(g(n,i)).code(o)))}function g(e,t){const n="object"==typeof e&&e[t.schemaId];return n&&(t.code.source||t.code.process)?u._`/*# sourceURL=${n} */`:u.nil}function y({schema:e,self:t}){if("boolean"==typeof e)return!e;for(const n in e)if(t.RULES.all[n])return!0;return!1}function _(e){return"boolean"!=typeof e.schema}function v(e){(0,h.checkUnknownRules)(e),function(e){const{schema:t,errSchemaPath:n,opts:r,self:i}=e;t.$ref&&r.ignoreKeywordsWithRef&&(0,h.schemaHasRulesButRef)(t,i.RULES)&&i.logger.warn(`$ref: keywords ignored in schema at path "${n}"`)}(e)}function b(e,t){if(e.opts.jtd)return T(e,[],!1,t);const n=(0,i.getSchemaTypes)(e.schema);T(e,n,!(0,i.coerceAndCheckDataType)(e,n),t)}function E({gen:e,schemaEnv:t,schema:n,errSchemaPath:r,opts:i}){const o=n.$comment;if(!0===i.$comment)e.code(u._`${p.default.self}.logger.log(${o})`);else if("function"==typeof i.$comment){const n=u.str`${r}/$comment`,i=e.scopeValue("root",{ref:t.root});e.code(u._`${p.default.self}.opts.$comment(${o}, ${n}, ${i}.schema)`)}}function T(e,t,n,r){const{gen:i,schema:a,data:c,allErrors:l,opts:d,self:f}=e,{RULES:m}=f;function g(h){(0,o.shouldUseGroup)(a,h)&&(h.type?(i.if((0,s.checkDataType)(h.type,c,d.strictNumbers)),w(e,h),1===t.length&&t[0]===h.type&&n&&(i.else(),(0,s.reportTypeError)(e)),i.endIf()):w(e,h),l||i.if(u._`${p.default.errors} === ${r||0}`))}!a.$ref||!d.ignoreKeywordsWithRef&&(0,h.schemaHasRulesButRef)(a,m)?(d.jtd||function(e,t){!e.schemaEnv.meta&&e.opts.strictTypes&&(function(e,t){t.length&&(e.dataTypes.length?(t.forEach((t=>{S(e.dataTypes,t)||x(e,`type "${t}" not allowed by context "${e.dataTypes.join(",")}"`)})),function(e,t){const n=[];for(const r of e.dataTypes)S(t,r)?n.push(r):t.includes("integer")&&"number"===r&&n.push("integer");e.dataTypes=n}(e,t)):e.dataTypes=t)}(e,t),e.opts.allowUnionTypes||function(e,t){t.length>1&&(2!==t.length||!t.includes("null"))&&x(e,"use allowUnionTypes to allow union type keyword")}(e,t),function(e,t){const n=e.self.RULES.all;for(const r in n){const i=n[r];if("object"==typeof i&&(0,o.shouldUseRule)(e.schema,i)){const{type:n}=i.definition;n.length&&!n.some((e=>{return r=e,(n=t).includes(r)||"number"===r&&n.includes("integer");var n,r}))&&x(e,`missing type "${n.join(",")}" for keyword "${r}"`)}}}(e,e.dataTypes))}(e,t),i.block((()=>{for(const e of m.rules)g(e);g(m.post)}))):i.block((()=>I(e,"$ref",m.all.$ref.definition)))}function w(e,t){const{gen:n,schema:r,opts:{useDefaults:i}}=e;i&&(0,a.assignDefaults)(e,t.type),n.block((()=>{for(const n of t.rules)(0,o.shouldUseRule)(r,n)&&I(e,n.keyword,n.definition,t.type)}))}function S(e,t){return e.includes(t)||"integer"===t&&e.includes("number")}function x(e,t){t+=` at "${e.schemaEnv.baseId+e.errSchemaPath}" (strictTypes)`,(0,h.checkStrictMode)(e,t,e.opts.strictTypes)}t.validateFunctionCode=function(e){_(e)&&(v(e),y(e))?function(e){const{schema:t,opts:n,gen:r}=e;m(e,(()=>{n.$comment&&t.$comment&&E(e),function(e){const{schema:t,opts:n}=e;void 0!==t.default&&n.useDefaults&&n.strictSchema&&(0,h.checkStrictMode)(e,"default is ignored in the schema root")}(e),r.let(p.default.vErrors,null),r.let(p.default.errors,0),n.unevaluated&&function(e){const{gen:t,validateName:n}=e;e.evaluated=t.const("evaluated",u._`${n}.evaluated`),t.if(u._`${e.evaluated}.dynamicProps`,(()=>t.assign(u._`${e.evaluated}.props`,u._`undefined`))),t.if(u._`${e.evaluated}.dynamicItems`,(()=>t.assign(u._`${e.evaluated}.items`,u._`undefined`)))}(e),b(e),function(e){const{gen:t,schemaEnv:n,validateName:r,ValidationError:i,opts:o}=e;n.$async?t.if(u._`${p.default.errors} === 0`,(()=>t.return(p.default.data)),(()=>t.throw(u._`new ${i}(${p.default.vErrors})`))):(t.assign(u._`${r}.errors`,p.default.vErrors),o.unevaluated&&function({gen:e,evaluated:t,props:n,items:r}){n instanceof u.Name&&e.assign(u._`${t}.props`,n),r instanceof u.Name&&e.assign(u._`${t}.items`,r)}(e),t.return(u._`${p.default.errors} === 0`))}(e)}))}(e):m(e,(()=>(0,r.topBoolOrEmptySchema)(e)))};class C{constructor(e,t,n){if((0,c.validateKeywordUsage)(e,t,n),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=n,this.data=e.data,this.schema=e.schema[n],this.$data=t.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,h.schemaRefOrVal)(e,this.schema,n,this.$data),this.schemaType=t.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=t,this.$data)this.schemaCode=e.gen.const("vSchema",R(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,c.validSchemaType)(this.schema,t.schemaType,t.allowUndefined))throw new Error(`${n} value must be ${JSON.stringify(t.schemaType)}`);("code"in t?t.trackErrors:!1!==t.errors)&&(this.errsCount=e.gen.const("_errs",p.default.errors))}result(e,t,n){this.failResult((0,u.not)(e),t,n)}failResult(e,t,n){this.gen.if(e),n?n():this.error(),t?(this.gen.else(),t(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,t){this.failResult((0,u.not)(e),void 0,t)}fail(e){if(void 0===e)return this.error(),void(this.allErrors||this.gen.if(!1));this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);const{schemaCode:t}=this;this.fail(u._`${t} !== undefined && (${(0,u.or)(this.invalid$data(),e)})`)}error(e,t,n){if(t)return this.setParams(t),this._error(e,n),void this.setParams({});this._error(e,n)}_error(e,t){(e?f.reportExtraError:f.reportError)(this,this.def.error,t)}$dataError(){(0,f.reportError)(this,this.def.$dataError||f.keyword$DataError)}reset(){if(void 0===this.errsCount)throw new Error('add "trackErrors" to keyword definition');(0,f.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,t){t?Object.assign(this.params,e):this.params=e}block$data(e,t,n=u.nil){this.gen.block((()=>{this.check$data(e,n),t()}))}check$data(e=u.nil,t=u.nil){if(!this.$data)return;const{gen:n,schemaCode:r,schemaType:i,def:o}=this;n.if((0,u.or)(u._`${r} === undefined`,t)),e!==u.nil&&n.assign(e,!0),(i.length||o.validateSchema)&&(n.elseIf(this.invalid$data()),this.$dataError(),e!==u.nil&&n.assign(e,!1)),n.else()}invalid$data(){const{gen:e,schemaCode:t,schemaType:n,def:r,it:i}=this;return(0,u.or)(function(){if(n.length){if(!(t instanceof u.Name))throw new Error("ajv implementation error");const e=Array.isArray(n)?n:[n];return u._`${(0,s.checkDataTypes)(e,t,i.opts.strictNumbers,s.DataType.Wrong)}`}return u.nil}(),function(){if(r.validateSchema){const n=e.scopeValue("validate$data",{ref:r.validateSchema});return u._`!${n}(${t})`}return u.nil}())}subschema(e,t){const n=(0,l.getSubschema)(this.it,e);(0,l.extendSubschemaData)(n,this.it,e),(0,l.extendSubschemaMode)(n,e);const i={...this.it,...n,items:void 0,props:void 0};return function(e,t){_(e)&&(v(e),y(e))?function(e,t){const{schema:n,gen:r,opts:i}=e;i.$comment&&n.$comment&&E(e),function(e){const t=e.schema[e.opts.schemaId];t&&(e.baseId=(0,d.resolveUrl)(e.opts.uriResolver,e.baseId,t))}(e),function(e){if(e.schema.$async&&!e.schemaEnv.$async)throw new Error("async schema in sync schema")}(e);const o=r.const("_errs",p.default.errors);b(e,o),r.var(t,u._`${o} === ${p.default.errors}`)}(e,t):(0,r.boolOrEmptySchema)(e,t)}(i,t),i}mergeEvaluated(e,t){const{it:n,gen:r}=this;n.opts.unevaluated&&(!0!==n.props&&void 0!==e.props&&(n.props=h.mergeEvaluated.props(r,e.props,n.props,t)),!0!==n.items&&void 0!==e.items&&(n.items=h.mergeEvaluated.items(r,e.items,n.items,t)))}mergeValidEvaluated(e,t){const{it:n,gen:r}=this;if(n.opts.unevaluated&&(!0!==n.props||!0!==n.items))return r.if(t,(()=>this.mergeEvaluated(e,u.Name))),!0}}function I(e,t,n,r){const i=new C(e,n,t);"code"in n?n.code(i,r):i.$data&&n.validate?(0,c.funcKeywordCode)(i,n):"macro"in n?(0,c.macroKeywordCode)(i,n):(n.compile||n.validate)&&(0,c.funcKeywordCode)(i,n)}t.KeywordCxt=C;const A=/^\/(?:[^~]|~0|~1)*$/,k=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function R(e,{dataLevel:t,dataNames:n,dataPathArr:r}){let i,o;if(""===e)return p.default.rootData;if("/"===e[0]){if(!A.test(e))throw new Error(`Invalid JSON-pointer: ${e}`);i=e,o=p.default.rootData}else{const s=k.exec(e);if(!s)throw new Error(`Invalid JSON-pointer: ${e}`);const a=+s[1];if(i=s[2],"#"===i){if(a>=t)throw new Error(c("property/index",a));return r[t-a]}if(a>t)throw new Error(c("data",a));if(o=n[t-a],!i)return o}let s=o;const a=i.split("/");for(const e of a)e&&(o=u._`${o}${(0,u.getProperty)((0,h.unescapeJsonPointer)(e))}`,s=u._`${s} && ${o}`);return s;function c(e,n){return`Cannot access ${e} ${n} levels up, current level is ${t}`}}t.getData=R},95782:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateKeywordUsage=t.validSchemaType=t.funcKeywordCode=t.macroKeywordCode=void 0;const r=n(15669),i=n(17250),o=n(3499),s=n(6930);function a(e){const{gen:t,data:n,it:i}=e;t.if(i.parentData,(()=>t.assign(n,r._`${i.parentData}[${i.parentDataProperty}]`)))}function c(e,t,n){if(void 0===n)throw new Error(`keyword "${t}" failed to compile`);return e.scopeValue("keyword","function"==typeof n?{ref:n}:{ref:n,code:(0,r.stringify)(n)})}t.macroKeywordCode=function(e,t){const{gen:n,keyword:i,schema:o,parentSchema:s,it:a}=e,l=t.macro.call(a.self,o,s,a),u=c(n,i,l);!1!==a.opts.validateSchema&&a.self.validateSchema(l,!0);const p=n.name("valid");e.subschema({schema:l,schemaPath:r.nil,errSchemaPath:`${a.errSchemaPath}/${i}`,topSchemaRef:u,compositeRule:!0},p),e.pass(p,(()=>e.error(!0)))},t.funcKeywordCode=function(e,t){var n;const{gen:l,keyword:u,schema:p,parentSchema:d,$data:h,it:f}=e;!function({schemaEnv:e},t){if(t.async&&!e.$async)throw new Error("async keyword in sync schema")}(f,t);const m=!h&&t.compile?t.compile.call(f.self,p,d,f):t.validate,g=c(l,u,m),y=l.let("valid");function _(n=(t.async?r._`await `:r.nil)){const s=f.opts.passContext?i.default.this:i.default.self,a=!("compile"in t&&!h||!1===t.schema);l.assign(y,r._`${n}${(0,o.callValidateCode)(e,g,s,a)}`,t.modifying)}function v(e){var n;l.if((0,r.not)(null!==(n=t.valid)&&void 0!==n?n:y),e)}e.block$data(y,(function(){if(!1===t.errors)_(),t.modifying&&a(e),v((()=>e.error()));else{const n=t.async?function(){const e=l.let("ruleErrs",null);return l.try((()=>_(r._`await `)),(t=>l.assign(y,!1).if(r._`${t} instanceof ${f.ValidationError}`,(()=>l.assign(e,r._`${t}.errors`)),(()=>l.throw(t))))),e}():function(){const e=r._`${g}.errors`;return l.assign(e,null),_(r.nil),e}();t.modifying&&a(e),v((()=>function(e,t){const{gen:n}=e;n.if(r._`Array.isArray(${t})`,(()=>{n.assign(i.default.vErrors,r._`${i.default.vErrors} === null ? ${t} : ${i.default.vErrors}.concat(${t})`).assign(i.default.errors,r._`${i.default.vErrors}.length`),(0,s.extendErrors)(e)}),(()=>e.error()))}(e,n)))}})),e.ok(null!==(n=t.valid)&&void 0!==n?n:y)},t.validSchemaType=function(e,t,n=!1){return!t.length||t.some((t=>"array"===t?Array.isArray(e):"object"===t?e&&"object"==typeof e&&!Array.isArray(e):typeof e==t||n&&void 0===e))},t.validateKeywordUsage=function({schema:e,opts:t,self:n,errSchemaPath:r},i,o){if(Array.isArray(i.keyword)?!i.keyword.includes(o):i.keyword!==o)throw new Error("ajv implementation error");const s=i.dependencies;if(null==s?void 0:s.some((t=>!Object.prototype.hasOwnProperty.call(e,t))))throw new Error(`parent schema must have dependencies of ${o}: ${s.join(",")}`);if(i.validateSchema&&!i.validateSchema(e[o])){const e=`keyword "${o}" value is invalid at path "${r}": `+n.errorsText(i.validateSchema.errors);if("log"!==t.validateSchema)throw new Error(e);n.logger.error(e)}}},38878:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.extendSubschemaMode=t.extendSubschemaData=t.getSubschema=void 0;const r=n(15669),i=n(88936);t.getSubschema=function(e,{keyword:t,schemaProp:n,schema:o,schemaPath:s,errSchemaPath:a,topSchemaRef:c}){if(void 0!==t&&void 0!==o)throw new Error('both "keyword" and "schema" passed, only one allowed');if(void 0!==t){const o=e.schema[t];return void 0===n?{schema:o,schemaPath:r._`${e.schemaPath}${(0,r.getProperty)(t)}`,errSchemaPath:`${e.errSchemaPath}/${t}`}:{schema:o[n],schemaPath:r._`${e.schemaPath}${(0,r.getProperty)(t)}${(0,r.getProperty)(n)}`,errSchemaPath:`${e.errSchemaPath}/${t}/${(0,i.escapeFragment)(n)}`}}if(void 0!==o){if(void 0===s||void 0===a||void 0===c)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:o,schemaPath:s,topSchemaRef:c,errSchemaPath:a}}throw new Error('either "keyword" or "schema" must be passed')},t.extendSubschemaData=function(e,t,{dataProp:n,dataPropType:o,data:s,dataTypes:a,propertyName:c}){if(void 0!==s&&void 0!==n)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:l}=t;if(void 0!==n){const{errorPath:s,dataPathArr:a,opts:c}=t;u(l.let("data",r._`${t.data}${(0,r.getProperty)(n)}`,!0)),e.errorPath=r.str`${s}${(0,i.getErrorPath)(n,o,c.jsPropertySyntax)}`,e.parentDataProperty=r._`${n}`,e.dataPathArr=[...a,e.parentDataProperty]}function u(n){e.data=n,e.dataLevel=t.dataLevel+1,e.dataTypes=[],t.definedProperties=new Set,e.parentData=t.data,e.dataNames=[...t.dataNames,n]}void 0!==s&&(u(s instanceof r.Name?s:l.let("data",s,!0)),void 0!==c&&(e.propertyName=c)),a&&(e.dataTypes=a)},t.extendSubschemaMode=function(e,{jtdDiscriminator:t,jtdMetadata:n,compositeRule:r,createErrors:i,allErrors:o}){void 0!==r&&(e.compositeRule=r),void 0!==i&&(e.createErrors=i),void 0!==o&&(e.allErrors=o),e.jtdDiscriminator=t,e.jtdMetadata=n}},38355:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=void 0;var r=n(91686);Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return r.KeywordCxt}});var i=n(15669);Object.defineProperty(t,"_",{enumerable:!0,get:function(){return i._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return i.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return i.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return i.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return i.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return i.CodeGen}});const o=n(46448),s=n(91578),a=n(82881),c=n(87382),l=n(15669),u=n(96696),p=n(97332),d=n(88936),h=n(71143),f=n(10407),m=(e,t)=>new RegExp(e,t);m.code="new RegExp";const g=["removeAdditional","useDefaults","coerceTypes"],y=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),_={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},v={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'};function b(e){var t,n,r,i,o,s,a,c,l,u,p,d,h,g,y,_,v,b,E,T,w,S,x,C,I;const A=e.strict,k=null===(t=e.code)||void 0===t?void 0:t.optimize,R=!0===k||void 0===k?1:k||0,P=null!==(r=null===(n=e.code)||void 0===n?void 0:n.regExp)&&void 0!==r?r:m,N=null!==(i=e.uriResolver)&&void 0!==i?i:f.default;return{strictSchema:null===(s=null!==(o=e.strictSchema)&&void 0!==o?o:A)||void 0===s||s,strictNumbers:null===(c=null!==(a=e.strictNumbers)&&void 0!==a?a:A)||void 0===c||c,strictTypes:null!==(u=null!==(l=e.strictTypes)&&void 0!==l?l:A)&&void 0!==u?u:"log",strictTuples:null!==(d=null!==(p=e.strictTuples)&&void 0!==p?p:A)&&void 0!==d?d:"log",strictRequired:null!==(g=null!==(h=e.strictRequired)&&void 0!==h?h:A)&&void 0!==g&&g,code:e.code?{...e.code,optimize:R,regExp:P}:{optimize:R,regExp:P},loopRequired:null!==(y=e.loopRequired)&&void 0!==y?y:200,loopEnum:null!==(_=e.loopEnum)&&void 0!==_?_:200,meta:null===(v=e.meta)||void 0===v||v,messages:null===(b=e.messages)||void 0===b||b,inlineRefs:null===(E=e.inlineRefs)||void 0===E||E,schemaId:null!==(T=e.schemaId)&&void 0!==T?T:"$id",addUsedSchema:null===(w=e.addUsedSchema)||void 0===w||w,validateSchema:null===(S=e.validateSchema)||void 0===S||S,validateFormats:null===(x=e.validateFormats)||void 0===x||x,unicodeRegExp:null===(C=e.unicodeRegExp)||void 0===C||C,int32range:null===(I=e.int32range)||void 0===I||I,uriResolver:N}}class E{constructor(e={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...b(e)};const{es5:t,lines:n}=this.opts.code;this.scope=new l.ValueScope({scope:{},prefixes:y,es5:t,lines:n}),this.logger=function(e){if(!1===e)return A;if(void 0===e)return console;if(e.log&&e.warn&&e.error)return e;throw new Error("logger must implement log, warn and error methods")}(e.logger);const r=e.validateFormats;e.validateFormats=!1,this.RULES=(0,a.getRules)(),T.call(this,_,e,"NOT SUPPORTED"),T.call(this,v,e,"DEPRECATED","warn"),this._metaOpts=I.call(this),e.formats&&x.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&C.call(this,e.keywords),"object"==typeof e.meta&&this.addMetaSchema(e.meta),S.call(this),e.validateFormats=r}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:e,meta:t,schemaId:n}=this.opts;let r=h;"id"===n&&(r={...h},r.id=r.$id,delete r.$id),t&&e&&this.addMetaSchema(r,r[n],!1)}defaultMeta(){const{meta:e,schemaId:t}=this.opts;return this.opts.defaultMeta="object"==typeof e?e[t]||e:void 0}validate(e,t){let n;if("string"==typeof e){if(n=this.getSchema(e),!n)throw new Error(`no schema with key or ref "${e}"`)}else n=this.compile(e);const r=n(t);return"$async"in n||(this.errors=n.errors),r}compile(e,t){const n=this._addSchema(e,t);return n.validate||this._compileSchemaEnv(n)}compileAsync(e,t){if("function"!=typeof this.opts.loadSchema)throw new Error("options.loadSchema should be a function");const{loadSchema:n}=this.opts;return r.call(this,e,t);async function r(e,t){await i.call(this,e.$schema);const n=this._addSchema(e,t);return n.validate||o.call(this,n)}async function i(e){e&&!this.getSchema(e)&&await r.call(this,{$ref:e},!0)}async function o(e){try{return this._compileSchemaEnv(e)}catch(t){if(!(t instanceof s.default))throw t;return a.call(this,t),await c.call(this,t.missingSchema),o.call(this,e)}}function a({missingSchema:e,missingRef:t}){if(this.refs[e])throw new Error(`AnySchema ${e} is loaded but ${t} cannot be resolved`)}async function c(e){const n=await l.call(this,e);this.refs[e]||await i.call(this,n.$schema),this.refs[e]||this.addSchema(n,e,t)}async function l(e){const t=this._loading[e];if(t)return t;try{return await(this._loading[e]=n(e))}finally{delete this._loading[e]}}}addSchema(e,t,n,r=this.opts.validateSchema){if(Array.isArray(e)){for(const t of e)this.addSchema(t,void 0,n,r);return this}let i;if("object"==typeof e){const{schemaId:t}=this.opts;if(i=e[t],void 0!==i&&"string"!=typeof i)throw new Error(`schema ${t} must be string`)}return t=(0,u.normalizeId)(t||i),this._checkUnique(t),this.schemas[t]=this._addSchema(e,n,t,r,!0),this}addMetaSchema(e,t,n=this.opts.validateSchema){return this.addSchema(e,t,!0,n),this}validateSchema(e,t){if("boolean"==typeof e)return!0;let n;if(n=e.$schema,void 0!==n&&"string"!=typeof n)throw new Error("$schema must be a string");if(n=n||this.opts.defaultMeta||this.defaultMeta(),!n)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const r=this.validate(n,e);if(!r&&t){const e="schema is invalid: "+this.errorsText();if("log"!==this.opts.validateSchema)throw new Error(e);this.logger.error(e)}return r}getSchema(e){let t;for(;"string"==typeof(t=w.call(this,e));)e=t;if(void 0===t){const{schemaId:n}=this.opts,r=new c.SchemaEnv({schema:{},schemaId:n});if(t=c.resolveSchema.call(this,r,e),!t)return;this.refs[e]=t}return t.validate||this._compileSchemaEnv(t)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const t=w.call(this,e);return"object"==typeof t&&this._cache.delete(t.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{const t=e;this._cache.delete(t);let n=e[this.opts.schemaId];return n&&(n=(0,u.normalizeId)(n),delete this.schemas[n],delete this.refs[n]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(const t of e)this.addKeyword(t);return this}addKeyword(e,t){let n;if("string"==typeof e)n=e,"object"==typeof t&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),t.keyword=n);else{if("object"!=typeof e||void 0!==t)throw new Error("invalid addKeywords parameters");if(n=(t=e).keyword,Array.isArray(n)&&!n.length)throw new Error("addKeywords: keyword must be string or non-empty array")}if(R.call(this,n,t),!t)return(0,d.eachItem)(n,(e=>P.call(this,e))),this;O.call(this,t);const r={...t,type:(0,p.getJSONTypes)(t.type),schemaType:(0,p.getJSONTypes)(t.schemaType)};return(0,d.eachItem)(n,0===r.type.length?e=>P.call(this,e,r):e=>r.type.forEach((t=>P.call(this,e,r,t)))),this}getKeyword(e){const t=this.RULES.all[e];return"object"==typeof t?t.definition:!!t}removeKeyword(e){const{RULES:t}=this;delete t.keywords[e],delete t.all[e];for(const n of t.rules){const t=n.rules.findIndex((t=>t.keyword===e));t>=0&&n.rules.splice(t,1)}return this}addFormat(e,t){return"string"==typeof t&&(t=new RegExp(t)),this.formats[e]=t,this}errorsText(e=this.errors,{separator:t=", ",dataVar:n="data"}={}){return e&&0!==e.length?e.map((e=>`${n}${e.instancePath} ${e.message}`)).reduce(((e,n)=>e+t+n)):"No errors"}$dataMetaSchema(e,t){const n=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(const r of t){const t=r.split("/").slice(1);let i=e;for(const e of t)i=i[e];for(const e in n){const t=n[e];if("object"!=typeof t)continue;const{$data:r}=t.definition,o=i[e];r&&o&&(i[e]=D(o))}}return e}_removeAllSchemas(e,t){for(const n in e){const r=e[n];t&&!t.test(n)||("string"==typeof r?delete e[n]:r&&!r.meta&&(this._cache.delete(r.schema),delete e[n]))}}_addSchema(e,t,n,r=this.opts.validateSchema,i=this.opts.addUsedSchema){let o;const{schemaId:s}=this.opts;if("object"==typeof e)o=e[s];else{if(this.opts.jtd)throw new Error("schema must be object");if("boolean"!=typeof e)throw new Error("schema must be object or boolean")}let a=this._cache.get(e);if(void 0!==a)return a;n=(0,u.normalizeId)(o||n);const l=u.getSchemaRefs.call(this,e,n);return a=new c.SchemaEnv({schema:e,schemaId:s,meta:t,baseId:n,localRefs:l}),this._cache.set(a.schema,a),i&&!n.startsWith("#")&&(n&&this._checkUnique(n),this.refs[n]=a),r&&this.validateSchema(e,!0),a}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):c.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){const t=this.opts;this.opts=this._metaOpts;try{c.compileSchema.call(this,e)}finally{this.opts=t}}}function T(e,t,n,r="error"){for(const i in e){const o=i;o in t&&this.logger[r](`${n}: option ${i}. ${e[o]}`)}}function w(e){return e=(0,u.normalizeId)(e),this.schemas[e]||this.refs[e]}function S(){const e=this.opts.schemas;if(e)if(Array.isArray(e))this.addSchema(e);else for(const t in e)this.addSchema(e[t],t)}function x(){for(const e in this.opts.formats){const t=this.opts.formats[e];t&&this.addFormat(e,t)}}function C(e){if(Array.isArray(e))this.addVocabulary(e);else{this.logger.warn("keywords option as map is deprecated, pass array");for(const t in e){const n=e[t];n.keyword||(n.keyword=t),this.addKeyword(n)}}}function I(){const e={...this.opts};for(const t of g)delete e[t];return e}t.default=E,E.ValidationError=o.default,E.MissingRefError=s.default;const A={log(){},warn(){},error(){}},k=/^[a-z_$][a-z0-9_$:-]*$/i;function R(e,t){const{RULES:n}=this;if((0,d.eachItem)(e,(e=>{if(n.keywords[e])throw new Error(`Keyword ${e} is already defined`);if(!k.test(e))throw new Error(`Keyword ${e} has invalid name`)})),t&&t.$data&&!("code"in t)&&!("validate"in t))throw new Error('$data keyword must have "code" or "validate" function')}function P(e,t,n){var r;const i=null==t?void 0:t.post;if(n&&i)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:o}=this;let s=i?o.post:o.rules.find((({type:e})=>e===n));if(s||(s={type:n,rules:[]},o.rules.push(s)),o.keywords[e]=!0,!t)return;const a={keyword:e,definition:{...t,type:(0,p.getJSONTypes)(t.type),schemaType:(0,p.getJSONTypes)(t.schemaType)}};t.before?N.call(this,s,a,t.before):s.rules.push(a),o.all[e]=a,null===(r=t.implements)||void 0===r||r.forEach((e=>this.addKeyword(e)))}function N(e,t,n){const r=e.rules.findIndex((e=>e.keyword===n));r>=0?e.rules.splice(r,0,t):(e.rules.push(t),this.logger.warn(`rule ${n} is not defined`))}function O(e){let{metaSchema:t}=e;void 0!==t&&(e.$data&&this.opts.$data&&(t=D(t)),e.validateSchema=this.compile(t,!0))}const M={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function D(e){return{anyOf:[e,M]}}},94285:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(66471);r.code='require("ajv/dist/runtime/equal").default',t.default=r},49161:(e,t)=>{"use strict";function n(e){const t=e.length;let n,r=0,i=0;for(;i=55296&&n<=56319&&i{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(22371);r.code='require("ajv/dist/runtime/uri").default',t.default=r},46448:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});class n extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}}t.default=n},78891:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateAdditionalItems=void 0;const r=n(15669),i=n(88936),o={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:e}})=>r.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>r._`{limit: ${e}}`},code(e){const{parentSchema:t,it:n}=e,{items:r}=t;Array.isArray(r)?s(e,r):(0,i.checkStrictMode)(n,'"additionalItems" is ignored when "items" is not an array of schemas')}};function s(e,t){const{gen:n,schema:o,data:s,keyword:a,it:c}=e;c.items=!0;const l=n.const("len",r._`${s}.length`);if(!1===o)e.setParams({len:t.length}),e.pass(r._`${l} <= ${t.length}`);else if("object"==typeof o&&!(0,i.alwaysValidSchema)(c,o)){const o=n.var("valid",r._`${l} <= ${t.length}`);n.if((0,r.not)(o),(()=>function(o){n.forRange("i",t.length,l,(t=>{e.subschema({keyword:a,dataProp:t,dataPropType:i.Type.Num},o),c.allErrors||n.if((0,r.not)(o),(()=>n.break()))}))}(o))),e.ok(o)}}t.validateAdditionalItems=s,t.default=o},24943:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3499),i=n(15669),o=n(17250),s=n(88936),a={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:e})=>i._`{additionalProperty: ${e.additionalProperty}}`},code(e){const{gen:t,schema:n,parentSchema:a,data:c,errsCount:l,it:u}=e;if(!l)throw new Error("ajv implementation error");const{allErrors:p,opts:d}=u;if(u.props=!0,"all"!==d.removeAdditional&&(0,s.alwaysValidSchema)(u,n))return;const h=(0,r.allSchemaProperties)(a.properties),f=(0,r.allSchemaProperties)(a.patternProperties);function m(e){t.code(i._`delete ${c}[${e}]`)}function g(r){if("all"===d.removeAdditional||d.removeAdditional&&!1===n)m(r);else{if(!1===n)return e.setParams({additionalProperty:r}),e.error(),void(p||t.break());if("object"==typeof n&&!(0,s.alwaysValidSchema)(u,n)){const n=t.name("valid");"failing"===d.removeAdditional?(y(r,n,!1),t.if((0,i.not)(n),(()=>{e.reset(),m(r)}))):(y(r,n),p||t.if((0,i.not)(n),(()=>t.break())))}}}function y(t,n,r){const i={keyword:"additionalProperties",dataProp:t,dataPropType:s.Type.Str};!1===r&&Object.assign(i,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(i,n)}t.forIn("key",c,(n=>{h.length||f.length?t.if(function(n){let o;if(h.length>8){const e=(0,s.schemaRefOrVal)(u,a.properties,"properties");o=(0,r.isOwnProperty)(t,e,n)}else o=h.length?(0,i.or)(...h.map((e=>i._`${n} === ${e}`))):i.nil;return f.length&&(o=(0,i.or)(o,...f.map((t=>i._`${(0,r.usePattern)(e,t)}.test(${n})`)))),(0,i.not)(o)}(n),(()=>g(n))):g(n)})),e.ok(i._`${l} === ${o.default.errors}`)}};t.default=a},22609:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(88936),i={keyword:"allOf",schemaType:"array",code(e){const{gen:t,schema:n,it:i}=e;if(!Array.isArray(n))throw new Error("ajv implementation error");const o=t.name("valid");n.forEach(((t,n)=>{if((0,r.alwaysValidSchema)(i,t))return;const s=e.subschema({keyword:"allOf",schemaProp:n},o);e.ok(o),e.mergeEvaluated(s)}))}};t.default=i},54279:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:n(3499).validateUnion,error:{message:"must match a schema in anyOf"}};t.default=r},95609:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:e,max:t}})=>void 0===t?r.str`must contain at least ${e} valid item(s)`:r.str`must contain at least ${e} and no more than ${t} valid item(s)`,params:({params:{min:e,max:t}})=>void 0===t?r._`{minContains: ${e}}`:r._`{minContains: ${e}, maxContains: ${t}}`},code(e){const{gen:t,schema:n,parentSchema:o,data:s,it:a}=e;let c,l;const{minContains:u,maxContains:p}=o;a.opts.next?(c=void 0===u?1:u,l=p):c=1;const d=t.const("len",r._`${s}.length`);if(e.setParams({min:c,max:l}),void 0===l&&0===c)return void(0,i.checkStrictMode)(a,'"minContains" == 0 without "maxContains": "contains" keyword ignored');if(void 0!==l&&c>l)return(0,i.checkStrictMode)(a,'"minContains" > "maxContains" is always invalid'),void e.fail();if((0,i.alwaysValidSchema)(a,n)){let t=r._`${d} >= ${c}`;return void 0!==l&&(t=r._`${t} && ${d} <= ${l}`),void e.pass(t)}a.items=!0;const h=t.name("valid");function f(){const e=t.name("_valid"),n=t.let("count",0);m(e,(()=>t.if(e,(()=>function(e){t.code(r._`${e}++`),void 0===l?t.if(r._`${e} >= ${c}`,(()=>t.assign(h,!0).break())):(t.if(r._`${e} > ${l}`,(()=>t.assign(h,!1).break())),1===c?t.assign(h,!0):t.if(r._`${e} >= ${c}`,(()=>t.assign(h,!0))))}(n)))))}function m(n,r){t.forRange("i",0,d,(t=>{e.subschema({keyword:"contains",dataProp:t,dataPropType:i.Type.Num,compositeRule:!0},n),r()}))}void 0===l&&1===c?m(h,(()=>t.if(h,(()=>t.break())))):0===c?(t.let(h,!0),void 0!==l&&t.if(r._`${s}.length > 0`,f)):(t.let(h,!1),f()),e.result(h,(()=>e.reset()))}};t.default=o},5463:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateSchemaDeps=t.validatePropertyDeps=t.error=void 0;const r=n(15669),i=n(88936),o=n(3499);t.error={message:({params:{property:e,depsCount:t,deps:n}})=>{const i=1===t?"property":"properties";return r.str`must have ${i} ${n} when property ${e} is present`},params:({params:{property:e,depsCount:t,deps:n,missingProperty:i}})=>r._`{property: ${e}, - missingProperty: ${i}, - depsCount: ${t}, - deps: ${n}}`};const s={keyword:"dependencies",type:"object",schemaType:"object",error:t.error,code(e){const[t,n]=function({schema:e}){const t={},n={};for(const r in e)"__proto__"!==r&&((Array.isArray(e[r])?t:n)[r]=e[r]);return[t,n]}(e);a(e,t),c(e,n)}};function a(e,t=e.schema){const{gen:n,data:i,it:s}=e;if(0===Object.keys(t).length)return;const a=n.let("missing");for(const c in t){const l=t[c];if(0===l.length)continue;const u=(0,o.propertyInData)(n,i,c,s.opts.ownProperties);e.setParams({property:c,depsCount:l.length,deps:l.join(", ")}),s.allErrors?n.if(u,(()=>{for(const t of l)(0,o.checkReportMissingProp)(e,t)})):(n.if(r._`${u} && (${(0,o.checkMissingProp)(e,l,a)})`),(0,o.reportMissingProp)(e,a),n.else())}}function c(e,t=e.schema){const{gen:n,data:r,keyword:s,it:a}=e,c=n.name("valid");for(const l in t)(0,i.alwaysValidSchema)(a,t[l])||(n.if((0,o.propertyInData)(n,r,l,a.opts.ownProperties),(()=>{const t=e.subschema({keyword:s,schemaProp:l},c);e.mergeValidEvaluated(t,c)}),(()=>n.var(c,!0))),e.ok(c))}t.validatePropertyDeps=a,t.validateSchemaDeps=c,t.default=s},50076:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:e})=>r.str`must match "${e.ifClause}" schema`,params:({params:e})=>r._`{failingKeyword: ${e.ifClause}}`},code(e){const{gen:t,parentSchema:n,it:o}=e;void 0===n.then&&void 0===n.else&&(0,i.checkStrictMode)(o,'"if" without "then" and "else" is ignored');const a=s(o,"then"),c=s(o,"else");if(!a&&!c)return;const l=t.let("valid",!0),u=t.name("_valid");if(function(){const t=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},u);e.mergeEvaluated(t)}(),e.reset(),a&&c){const n=t.let("ifClause");e.setParams({ifClause:n}),t.if(u,p("then",n),p("else",n))}else a?t.if(u,p("then")):t.if((0,r.not)(u),p("else"));function p(n,i){return()=>{const o=e.subschema({keyword:n},u);t.assign(l,u),e.mergeValidEvaluated(o,l),i?t.assign(i,r._`${n}`):e.setParams({ifClause:n})}}e.pass(l,(()=>e.error(!0)))}};function s(e,t){const n=e.schema[t];return void 0!==n&&!(0,i.alwaysValidSchema)(e,n)}t.default=o},46951:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(78891),i=n(21162),o=n(98634),s=n(65151),a=n(95609),c=n(5463),l=n(53021),u=n(24943),p=n(34243),d=n(98103),h=n(72869),f=n(54279),m=n(14880),g=n(22609),y=n(50076),_=n(25316);t.default=function(e=!1){const t=[h.default,f.default,m.default,g.default,y.default,_.default,l.default,u.default,c.default,p.default,d.default];return e?t.push(i.default,s.default):t.push(r.default,o.default),t.push(a.default),t}},98634:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateTuple=void 0;const r=n(15669),i=n(88936),o=n(3499),s={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(e){const{schema:t,it:n}=e;if(Array.isArray(t))return a(e,"additionalItems",t);n.items=!0,(0,i.alwaysValidSchema)(n,t)||e.ok((0,o.validateArray)(e))}};function a(e,t,n=e.schema){const{gen:o,parentSchema:s,data:a,keyword:c,it:l}=e;!function(e){const{opts:r,errSchemaPath:o}=l,s=n.length,a=s===e.minItems&&(s===e.maxItems||!1===e[t]);if(r.strictTuples&&!a){const e=`"${c}" is ${s}-tuple, but minItems or maxItems/${t} are not specified or different at path "${o}"`;(0,i.checkStrictMode)(l,e,r.strictTuples)}}(s),l.opts.unevaluated&&n.length&&!0!==l.items&&(l.items=i.mergeEvaluated.items(o,n.length,l.items));const u=o.name("valid"),p=o.const("len",r._`${a}.length`);n.forEach(((t,n)=>{(0,i.alwaysValidSchema)(l,t)||(o.if(r._`${p} > ${n}`,(()=>e.subschema({keyword:c,schemaProp:n,dataProp:n},u))),e.ok(u))}))}t.validateTuple=a,t.default=s},65151:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o=n(3499),s=n(78891),a={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:e}})=>r.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>r._`{limit: ${e}}`},code(e){const{schema:t,parentSchema:n,it:r}=e,{prefixItems:a}=n;r.items=!0,(0,i.alwaysValidSchema)(r,t)||(a?(0,s.validateAdditionalItems)(e,a):e.ok((0,o.validateArray)(e)))}};t.default=a},72869:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(88936),i={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){const{gen:t,schema:n,it:i}=e;if((0,r.alwaysValidSchema)(i,n))return void e.fail();const o=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},o),e.failResult(o,(()=>e.reset()),(()=>e.error()))},error:{message:"must NOT be valid"}};t.default=i},14880:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:e})=>r._`{passingSchemas: ${e.passing}}`},code(e){const{gen:t,schema:n,parentSchema:o,it:s}=e;if(!Array.isArray(n))throw new Error("ajv implementation error");if(s.opts.discriminator&&o.discriminator)return;const a=n,c=t.let("valid",!1),l=t.let("passing",null),u=t.name("_valid");e.setParams({passing:l}),t.block((function(){a.forEach(((n,o)=>{let a;(0,i.alwaysValidSchema)(s,n)?t.var(u,!0):a=e.subschema({keyword:"oneOf",schemaProp:o,compositeRule:!0},u),o>0&&t.if(r._`${u} && ${c}`).assign(c,!1).assign(l,r._`[${l}, ${o}]`).else(),t.if(u,(()=>{t.assign(c,!0),t.assign(l,o),a&&e.mergeEvaluated(a,r.Name)}))}))})),e.result(c,(()=>e.reset()),(()=>e.error(!0)))}};t.default=o},98103:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3499),i=n(15669),o=n(88936),s=n(88936),a={keyword:"patternProperties",type:"object",schemaType:"object",code(e){const{gen:t,schema:n,data:a,parentSchema:c,it:l}=e,{opts:u}=l,p=(0,r.allSchemaProperties)(n),d=p.filter((e=>(0,o.alwaysValidSchema)(l,n[e])));if(0===p.length||d.length===p.length&&(!l.opts.unevaluated||!0===l.props))return;const h=u.strictSchema&&!u.allowMatchingProperties&&c.properties,f=t.name("valid");!0===l.props||l.props instanceof i.Name||(l.props=(0,s.evaluatedPropsToName)(t,l.props));const{props:m}=l;function g(e){for(const t in h)new RegExp(e).test(t)&&(0,o.checkStrictMode)(l,`property ${t} matches pattern ${e} (use allowMatchingProperties)`)}function y(n){t.forIn("key",a,(o=>{t.if(i._`${(0,r.usePattern)(e,n)}.test(${o})`,(()=>{const r=d.includes(n);r||e.subschema({keyword:"patternProperties",schemaProp:n,dataProp:o,dataPropType:s.Type.Str},f),l.opts.unevaluated&&!0!==m?t.assign(i._`${m}[${o}]`,!0):r||l.allErrors||t.if((0,i.not)(f),(()=>t.break()))}))}))}!function(){for(const e of p)h&&g(e),l.allErrors?y(e):(t.var(f,!0),y(e),t.if(f))}()}};t.default=a},21162:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(98634),i={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:e=>(0,r.validateTuple)(e,"items")};t.default=i},34243:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(91686),i=n(3499),o=n(88936),s=n(24943),a={keyword:"properties",type:"object",schemaType:"object",code(e){const{gen:t,schema:n,parentSchema:a,data:c,it:l}=e;"all"===l.opts.removeAdditional&&void 0===a.additionalProperties&&s.default.code(new r.KeywordCxt(l,s.default,"additionalProperties"));const u=(0,i.allSchemaProperties)(n);for(const e of u)l.definedProperties.add(e);l.opts.unevaluated&&u.length&&!0!==l.props&&(l.props=o.mergeEvaluated.props(t,(0,o.toHash)(u),l.props));const p=u.filter((e=>!(0,o.alwaysValidSchema)(l,n[e])));if(0===p.length)return;const d=t.name("valid");for(const n of p)h(n)?f(n):(t.if((0,i.propertyInData)(t,c,n,l.opts.ownProperties)),f(n),l.allErrors||t.else().var(d,!0),t.endIf()),e.it.definedProperties.add(n),e.ok(d);function h(e){return l.opts.useDefaults&&!l.compositeRule&&void 0!==n[e].default}function f(t){e.subschema({keyword:"properties",schemaProp:t,dataProp:t},d)}}};t.default=a},53021:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:e})=>r._`{propertyName: ${e.propertyName}}`},code(e){const{gen:t,schema:n,data:o,it:s}=e;if((0,i.alwaysValidSchema)(s,n))return;const a=t.name("valid");t.forIn("key",o,(n=>{e.setParams({propertyName:n}),e.subschema({keyword:"propertyNames",data:n,dataTypes:["string"],propertyName:n,compositeRule:!0},a),t.if((0,r.not)(a),(()=>{e.error(!0),s.allErrors||t.break()}))})),e.ok(a)}};t.default=o},25316:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(88936),i={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:n}){void 0===t.if&&(0,r.checkStrictMode)(n,`"${e}" without "if" is ignored`)}};t.default=i},3499:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.validateUnion=t.validateArray=t.usePattern=t.callValidateCode=t.schemaProperties=t.allSchemaProperties=t.noPropertyInData=t.propertyInData=t.isOwnProperty=t.hasPropFunc=t.reportMissingProp=t.checkMissingProp=t.checkReportMissingProp=void 0;const r=n(15669),i=n(88936),o=n(17250),s=n(88936);function a(e){return e.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:r._`Object.prototype.hasOwnProperty`})}function c(e,t,n){return r._`${a(e)}.call(${t}, ${n})`}function l(e,t,n,i){const o=r._`${t}${(0,r.getProperty)(n)} === undefined`;return i?(0,r.or)(o,(0,r.not)(c(e,t,n))):o}function u(e){return e?Object.keys(e).filter((e=>"__proto__"!==e)):[]}t.checkReportMissingProp=function(e,t){const{gen:n,data:i,it:o}=e;n.if(l(n,i,t,o.opts.ownProperties),(()=>{e.setParams({missingProperty:r._`${t}`},!0),e.error()}))},t.checkMissingProp=function({gen:e,data:t,it:{opts:n}},i,o){return(0,r.or)(...i.map((i=>(0,r.and)(l(e,t,i,n.ownProperties),r._`${o} = ${i}`))))},t.reportMissingProp=function(e,t){e.setParams({missingProperty:t},!0),e.error()},t.hasPropFunc=a,t.isOwnProperty=c,t.propertyInData=function(e,t,n,i){const o=r._`${t}${(0,r.getProperty)(n)} !== undefined`;return i?r._`${o} && ${c(e,t,n)}`:o},t.noPropertyInData=l,t.allSchemaProperties=u,t.schemaProperties=function(e,t){return u(t).filter((n=>!(0,i.alwaysValidSchema)(e,t[n])))},t.callValidateCode=function({schemaCode:e,data:t,it:{gen:n,topSchemaRef:i,schemaPath:s,errorPath:a},it:c},l,u,p){const d=p?r._`${e}, ${t}, ${i}${s}`:t,h=[[o.default.instancePath,(0,r.strConcat)(o.default.instancePath,a)],[o.default.parentData,c.parentData],[o.default.parentDataProperty,c.parentDataProperty],[o.default.rootData,o.default.rootData]];c.opts.dynamicRef&&h.push([o.default.dynamicAnchors,o.default.dynamicAnchors]);const f=r._`${d}, ${n.object(...h)}`;return u!==r.nil?r._`${l}.call(${u}, ${f})`:r._`${l}(${f})`};const p=r._`new RegExp`;t.usePattern=function({gen:e,it:{opts:t}},n){const i=t.unicodeRegExp?"u":"",{regExp:o}=t.code,a=o(n,i);return e.scopeValue("pattern",{key:a.toString(),ref:a,code:r._`${"new RegExp"===o.code?p:(0,s.useFunc)(e,o)}(${n}, ${i})`})},t.validateArray=function(e){const{gen:t,data:n,keyword:o,it:s}=e,a=t.name("valid");if(s.allErrors){const e=t.let("valid",!0);return c((()=>t.assign(e,!1))),e}return t.var(a,!0),c((()=>t.break())),a;function c(s){const c=t.const("len",r._`${n}.length`);t.forRange("i",0,c,(n=>{e.subschema({keyword:o,dataProp:n,dataPropType:i.Type.Num},a),t.if((0,r.not)(a),s)}))}},t.validateUnion=function(e){const{gen:t,schema:n,keyword:o,it:s}=e;if(!Array.isArray(n))throw new Error("ajv implementation error");if(n.some((e=>(0,i.alwaysValidSchema)(s,e)))&&!s.opts.unevaluated)return;const a=t.let("valid",!1),c=t.name("_valid");t.block((()=>n.forEach(((n,i)=>{const s=e.subschema({keyword:o,schemaProp:i,compositeRule:!0},c);t.assign(a,r._`${a} || ${c}`),e.mergeValidEvaluated(s,c)||t.if((0,r.not)(a))})))),e.result(a,(()=>e.reset()),(()=>e.error(!0)))}},71018:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};t.default=n},32101:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(71018),i=n(41939),o=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",r.default,i.default];t.default=o},41939:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.callRef=t.getValidate=void 0;const r=n(91578),i=n(3499),o=n(15669),s=n(17250),a=n(87382),c=n(88936),l={keyword:"$ref",schemaType:"string",code(e){const{gen:t,schema:n,it:i}=e,{baseId:s,schemaEnv:c,validateName:l,opts:d,self:h}=i,{root:f}=c;if(("#"===n||"#/"===n)&&s===f.baseId)return function(){if(c===f)return p(e,l,c,c.$async);const n=t.scopeValue("root",{ref:f});return p(e,o._`${n}.validate`,f,f.$async)}();const m=a.resolveRef.call(h,f,s,n);if(void 0===m)throw new r.default(i.opts.uriResolver,s,n);return m instanceof a.SchemaEnv?function(t){const n=u(e,t);p(e,n,t,t.$async)}(m):function(r){const i=t.scopeValue("schema",!0===d.code.source?{ref:r,code:(0,o.stringify)(r)}:{ref:r}),s=t.name("valid"),a=e.subschema({schema:r,dataTypes:[],schemaPath:o.nil,topSchemaRef:i,errSchemaPath:n},s);e.mergeEvaluated(a),e.ok(s)}(m)}};function u(e,t){const{gen:n}=e;return t.validate?n.scopeValue("validate",{ref:t.validate}):o._`${n.scopeValue("wrapper",{ref:t})}.validate`}function p(e,t,n,r){const{gen:a,it:l}=e,{allErrors:u,schemaEnv:p,opts:d}=l,h=d.passContext?s.default.this:o.nil;function f(e){const t=o._`${e}.errors`;a.assign(s.default.vErrors,o._`${s.default.vErrors} === null ? ${t} : ${s.default.vErrors}.concat(${t})`),a.assign(s.default.errors,o._`${s.default.vErrors}.length`)}function m(e){var t;if(!l.opts.unevaluated)return;const r=null===(t=null==n?void 0:n.validate)||void 0===t?void 0:t.evaluated;if(!0!==l.props)if(r&&!r.dynamicProps)void 0!==r.props&&(l.props=c.mergeEvaluated.props(a,r.props,l.props));else{const t=a.var("props",o._`${e}.evaluated.props`);l.props=c.mergeEvaluated.props(a,t,l.props,o.Name)}if(!0!==l.items)if(r&&!r.dynamicItems)void 0!==r.items&&(l.items=c.mergeEvaluated.items(a,r.items,l.items));else{const t=a.var("items",o._`${e}.evaluated.items`);l.items=c.mergeEvaluated.items(a,t,l.items,o.Name)}}r?function(){if(!p.$async)throw new Error("async schema referenced by sync schema");const n=a.let("valid");a.try((()=>{a.code(o._`await ${(0,i.callValidateCode)(e,t,h)}`),m(t),u||a.assign(n,!0)}),(e=>{a.if(o._`!(${e} instanceof ${l.ValidationError})`,(()=>a.throw(e))),f(e),u||a.assign(n,!1)})),e.ok(n)}():e.result((0,i.callValidateCode)(e,t,h),(()=>m(t)),(()=>f(t)))}t.getValidate=u,t.callRef=p,t.default=l},30002:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(77421),o=n(87382),s=n(88936),a={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:e,tagName:t}})=>e===i.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:n}})=>r._`{error: ${e}, tag: ${n}, tagValue: ${t}}`},code(e){const{gen:t,data:n,schema:a,parentSchema:c,it:l}=e,{oneOf:u}=c;if(!l.opts.discriminator)throw new Error("discriminator: requires discriminator option");const p=a.propertyName;if("string"!=typeof p)throw new Error("discriminator: requires propertyName");if(a.mapping)throw new Error("discriminator: mapping is not supported");if(!u)throw new Error("discriminator: requires oneOf keyword");const d=t.let("valid",!1),h=t.const("tag",r._`${n}${(0,r.getProperty)(p)}`);function f(n){const i=t.name("valid"),o=e.subschema({keyword:"oneOf",schemaProp:n},i);return e.mergeEvaluated(o,r.Name),i}t.if(r._`typeof ${h} == "string"`,(()=>function(){const n=function(){var e;const t={},n=i(c);let r=!0;for(let t=0;te.error(!1,{discrError:i.DiscrError.Tag,tag:h,tagName:p}))),e.ok(d)}};t.default=a},77421:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.DiscrError=void 0,(n=t.DiscrError||(t.DiscrError={})).Tag="tag",n.Mapping="mapping"},35671:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(32101),i=n(37499),o=n(46951),s=n(4480),a=n(32480),c=[r.default,i.default,(0,o.default)(),s.default,a.metadataVocabulary,a.contentVocabulary];t.default=c},73599:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>r.str`must match format "${e}"`,params:({schemaCode:e})=>r._`{format: ${e}}`},code(e,t){const{gen:n,data:i,$data:o,schema:s,schemaCode:a,it:c}=e,{opts:l,errSchemaPath:u,schemaEnv:p,self:d}=c;l.validateFormats&&(o?function(){const o=n.scopeValue("formats",{ref:d.formats,code:l.code.formats}),s=n.const("fDef",r._`${o}[${a}]`),c=n.let("fType"),u=n.let("format");n.if(r._`typeof ${s} == "object" && !(${s} instanceof RegExp)`,(()=>n.assign(c,r._`${s}.type || "string"`).assign(u,r._`${s}.validate`)),(()=>n.assign(c,r._`"string"`).assign(u,s))),e.fail$data((0,r.or)(!1===l.strictSchema?r.nil:r._`${a} && !${u}`,function(){const e=p.$async?r._`(${s}.async ? await ${u}(${i}) : ${u}(${i}))`:r._`${u}(${i})`,n=r._`(typeof ${u} == "function" ? ${e} : ${u}.test(${i}))`;return r._`${u} && ${u} !== true && ${c} === ${t} && !${n}`}()))}():function(){const o=d.formats[s];if(!o)return void function(){if(!1!==l.strictSchema)throw new Error(e());function e(){return`unknown format "${s}" ignored in schema at path "${u}"`}d.logger.warn(e())}();if(!0===o)return;const[a,c,h]=function(e){const t=e instanceof RegExp?(0,r.regexpCode)(e):l.code.formats?r._`${l.code.formats}${(0,r.getProperty)(s)}`:void 0,i=n.scopeValue("formats",{key:s,ref:e,code:t});return"object"!=typeof e||e instanceof RegExp?["string",e,i]:[e.type||"string",e.validate,r._`${i}.validate`]}(o);a===t&&e.pass(function(){if("object"==typeof o&&!(o instanceof RegExp)&&o.async){if(!p.$async)throw new Error("async format in sync schema");return r._`await ${h}(${i})`}return"function"==typeof c?r._`${h}(${i})`:r._`${h}.test(${i})`}())}())}};t.default=i},4480:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=[n(73599).default];t.default=r},32480:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.contentVocabulary=t.metadataVocabulary=void 0,t.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],t.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]},36577:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o=n(94285),s={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:e})=>r._`{allowedValue: ${e}}`},code(e){const{gen:t,data:n,$data:s,schemaCode:a,schema:c}=e;s||c&&"object"==typeof c?e.fail$data(r._`!${(0,i.useFunc)(t,o.default)}(${n}, ${a})`):e.fail(r._`${c} !== ${n}`)}};t.default=s},59450:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o=n(94285),s={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:e})=>r._`{allowedValues: ${e}}`},code(e){const{gen:t,data:n,$data:s,schema:a,schemaCode:c,it:l}=e;if(!s&&0===a.length)throw new Error("enum must have non-empty array");const u=a.length>=l.opts.loopEnum;let p;const d=()=>null!=p?p:p=(0,i.useFunc)(t,o.default);let h;if(u||s)h=t.let("valid"),e.block$data(h,(function(){t.assign(h,!1),t.forOf("v",c,(e=>t.if(r._`${d()}(${n}, ${e})`,(()=>t.assign(h,!0).break()))))}));else{if(!Array.isArray(a))throw new Error("ajv implementation error");const e=t.const("vSchema",c);h=(0,r.or)(...a.map(((t,i)=>function(e,t){const i=a[t];return"object"==typeof i&&null!==i?r._`${d()}(${n}, ${e}[${t}])`:r._`${n} === ${i}`}(e,i))))}e.pass(h)}};t.default=s},37499:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(31337),i=n(59706),o=n(99507),s=n(51216),a=n(70034),c=n(96962),l=n(61135),u=n(10194),p=n(36577),d=n(59450),h=[r.default,i.default,o.default,s.default,a.default,c.default,l.default,u.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},p.default,d.default];t.default=h},61135:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const n="maxItems"===e?"more":"fewer";return r.str`must NOT have ${n} than ${t} items`},params:({schemaCode:e})=>r._`{limit: ${e}}`},code(e){const{keyword:t,data:n,schemaCode:i}=e,o="maxItems"===t?r.operators.GT:r.operators.LT;e.fail$data(r._`${n}.length ${o} ${i}`)}};t.default=i},99507:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=n(88936),o=n(49161),s={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const n="maxLength"===e?"more":"fewer";return r.str`must NOT have ${n} than ${t} characters`},params:({schemaCode:e})=>r._`{limit: ${e}}`},code(e){const{keyword:t,data:n,schemaCode:s,it:a}=e,c="maxLength"===t?r.operators.GT:r.operators.LT,l=!1===a.opts.unicode?r._`${n}.length`:r._`${(0,i.useFunc)(e.gen,o.default)}(${n})`;e.fail$data(r._`${l} ${c} ${s}`)}};t.default=s},31337:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i=r.operators,o={maximum:{okStr:"<=",ok:i.LTE,fail:i.GT},minimum:{okStr:">=",ok:i.GTE,fail:i.LT},exclusiveMaximum:{okStr:"<",ok:i.LT,fail:i.GTE},exclusiveMinimum:{okStr:">",ok:i.GT,fail:i.LTE}},s={message:({keyword:e,schemaCode:t})=>r.str`must be ${o[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>r._`{comparison: ${o[e].okStr}, limit: ${t}}`},a={keyword:Object.keys(o),type:"number",schemaType:"number",$data:!0,error:s,code(e){const{keyword:t,data:n,schemaCode:i}=e;e.fail$data(r._`${n} ${o[t].fail} ${i} || isNaN(${n})`)}};t.default=a},70034:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:e,schemaCode:t}){const n="maxProperties"===e?"more":"fewer";return r.str`must NOT have ${n} than ${t} properties`},params:({schemaCode:e})=>r._`{limit: ${e}}`},code(e){const{keyword:t,data:n,schemaCode:i}=e,o="maxProperties"===t?r.operators.GT:r.operators.LT;e.fail$data(r._`Object.keys(${n}).length ${o} ${i}`)}};t.default=i},59706:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(15669),i={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:e})=>r.str`must be multiple of ${e}`,params:({schemaCode:e})=>r._`{multipleOf: ${e}}`},code(e){const{gen:t,data:n,schemaCode:i,it:o}=e,s=o.opts.multipleOfPrecision,a=t.let("res"),c=s?r._`Math.abs(Math.round(${a}) - ${a}) > 1e-${s}`:r._`${a} !== parseInt(${a})`;e.fail$data(r._`(${i} === 0 || (${a} = ${n}/${i}, ${c}))`)}};t.default=i},51216:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3499),i=n(15669),o={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:e})=>i.str`must match pattern "${e}"`,params:({schemaCode:e})=>i._`{pattern: ${e}}`},code(e){const{data:t,$data:n,schema:o,schemaCode:s,it:a}=e,c=a.opts.unicodeRegExp?"u":"",l=n?i._`(new RegExp(${s}, ${c}))`:(0,r.usePattern)(e,o);e.fail$data(i._`!${l}.test(${t})`)}};t.default=o},96962:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(3499),i=n(15669),o=n(88936),s={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:e}})=>i.str`must have required property '${e}'`,params:({params:{missingProperty:e}})=>i._`{missingProperty: ${e}}`},code(e){const{gen:t,schema:n,schemaCode:s,data:a,$data:c,it:l}=e,{opts:u}=l;if(!c&&0===n.length)return;const p=n.length>=u.loopRequired;if(l.allErrors?function(){if(p||c)e.block$data(i.nil,d);else for(const t of n)(0,r.checkReportMissingProp)(e,t)}():function(){const o=t.let("missing");if(p||c){const n=t.let("valid",!0);e.block$data(n,(()=>function(n,o){e.setParams({missingProperty:n}),t.forOf(n,s,(()=>{t.assign(o,(0,r.propertyInData)(t,a,n,u.ownProperties)),t.if((0,i.not)(o),(()=>{e.error(),t.break()}))}),i.nil)}(o,n))),e.ok(n)}else t.if((0,r.checkMissingProp)(e,n,o)),(0,r.reportMissingProp)(e,o),t.else()}(),u.strictRequired){const t=e.parentSchema.properties,{definedProperties:r}=e.it;for(const e of n)if(void 0===(null==t?void 0:t[e])&&!r.has(e)){const t=`required property "${e}" is not defined at "${l.schemaEnv.baseId+l.errSchemaPath}" (strictRequired)`;(0,o.checkStrictMode)(l,t,l.opts.strictRequired)}}function d(){t.forOf("prop",s,(n=>{e.setParams({missingProperty:n}),t.if((0,r.noPropertyInData)(t,a,n,u.ownProperties),(()=>e.error()))}))}}};t.default=s},10194:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(97332),i=n(15669),o=n(88936),s=n(94285),a={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:e,j:t}})=>i.str`must NOT have duplicate items (items ## ${t} and ${e} are identical)`,params:({params:{i:e,j:t}})=>i._`{i: ${e}, j: ${t}}`},code(e){const{gen:t,data:n,$data:a,schema:c,parentSchema:l,schemaCode:u,it:p}=e;if(!a&&!c)return;const d=t.let("valid"),h=l.items?(0,r.getSchemaTypes)(l.items):[];function f(o,s){const a=t.name("item"),c=(0,r.checkDataTypes)(h,a,p.opts.strictNumbers,r.DataType.Wrong),l=t.const("indices",i._`{}`);t.for(i._`;${o}--;`,(()=>{t.let(a,i._`${n}[${o}]`),t.if(c,i._`continue`),h.length>1&&t.if(i._`typeof ${a} == "string"`,i._`${a} += "_"`),t.if(i._`typeof ${l}[${a}] == "number"`,(()=>{t.assign(s,i._`${l}[${a}]`),e.error(),t.assign(d,!1).break()})).code(i._`${l}[${a}] = ${o}`)}))}function m(r,a){const c=(0,o.useFunc)(t,s.default),l=t.name("outer");t.label(l).for(i._`;${r}--;`,(()=>t.for(i._`${a} = ${r}; ${a}--;`,(()=>t.if(i._`${c}(${n}[${r}], ${n}[${a}])`,(()=>{e.error(),t.assign(d,!1).break(l)}))))))}e.block$data(d,(function(){const r=t.let("i",i._`${n}.length`),o=t.let("j");e.setParams({i:r,j:o}),t.assign(d,!0),t.if(i._`${r} > 1`,(()=>(h.length>0&&!h.some((e=>"object"===e||"array"===e))?f:m)(r,o)))}),i._`${u} === false`),e.ok(d)}};t.default=a},97656:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]{"use strict";var r=n(1767),i=function(){function e(t){if(e.INSTANCE)throw new Error("Console logging adapter tracking should be configured from the applicationInsights object");this._client=t,e.INSTANCE=this}return e.prototype.enable=function(e,t){r.IsInitialized&&(n(72469).wp(e&&t,this._client),n(23805).wp(e,this._client),n(27916).wp(e,this._client))},e.prototype.isInitialized=function(){return this._isInitialized},e.prototype.dispose=function(){e.INSTANCE=null,this.enable(!1,!1)},e._methodNames=["debug","info","log","warn","error"],e}();e.exports=i},6751:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CorrelationContextManager=void 0;var r=n(12010),i=n(1767),o=n(23452),s=n(48410),a=n(55128),c=n(77649),l=function(){function e(){}return e.getCurrentContext=function(){if(!e.enabled)return null;var t=e.session.get(e.CONTEXT_NAME);return void 0===t?null:t},e.generateContextObject=function(e,t,n,r,i,o){return t=t||e,this.enabled?{operation:{name:n,id:e,parentId:t,traceparent:i,tracestate:o},customProperties:new u(r)}:null},e.spanToContextObject=function(t,n,r){var i=new o;return i.traceId=t.traceId,i.spanId=t.spanId,i.traceFlag=o.formatOpenTelemetryTraceFlags(t.traceFlags)||o.DEFAULT_TRACE_FLAG,i.parentId=n,e.generateContextObject(i.traceId,i.parentId,r,null,i)},e.runWithContext=function(t,n){var i;if(e.enabled)try{return e.session.bind(n,((i={})[e.CONTEXT_NAME]=t,i))()}catch(e){r.warn("Error binding to session context",c.dumpObj(e))}return n()},e.wrapEmitter=function(t){if(e.enabled)try{e.session.bindEmitter(t)}catch(e){r.warn("Error binding to session context",c.dumpObj(e))}},e.wrapCallback=function(t,n){var i;if(e.enabled)try{return e.session.bind(t,n?((i={})[e.CONTEXT_NAME]=n,i):void 0)}catch(e){r.warn("Error binding to session context",c.dumpObj(e))}return t},e.enable=function(t){this.enabled||(this.isNodeVersionCompatible()?(e.hasEverEnabled||(this.forceClsHooked=t,this.hasEverEnabled=!0,void 0===this.cls&&(!0===e.forceClsHooked||void 0===e.forceClsHooked&&e.shouldUseClsHooked()?this.cls=n(19172):this.cls=n(92611)),e.session=this.cls.createNamespace("AI-CLS-Session"),i.registerContextPreservation((function(t){try{return e.session.bind(t)}catch(e){r.warn("Error binding to session context",c.dumpObj(e))}}))),this.enabled=!0):this.enabled=!1)},e.startOperation=function(t,n){var i=t&&t.traceContext||null,c=t&&t.spanContext?t:null,l=t&&t.traceId?t:null,u=t&&t.headers;if(c)return this.spanToContextObject(c.spanContext(),c.parentSpanId,c.name);if(l)return this.spanToContextObject(l,"|"+l.traceId+"."+l.spanId+".","string"==typeof n?n:"");var p="string"==typeof n?n:"";if(i){var d=null,h=null;if(p=i.attributes.OperationName||p,n){var f=n;f.headers&&(f.headers.traceparent?d=new o(f.headers.traceparent):f.headers["request-id"]&&(d=new o(null,f.headers["request-id"])),f.headers.tracestate&&(h=new s(f.headers.tracestate)))}d||(d=new o(i.traceparent)),h||(h=new s(i.tracestate));var m=void 0;return"object"==typeof n&&(m=(g=new a(n)).getCorrelationContextHeader(),p=g.getOperationName({})),e.generateContextObject(d.traceId,d.parentId,p,m,d,h)}if(u){d=new o(u.traceparent?u.traceparent.toString():null),h=new s(u.tracestate?u.tracestate.toString():null);var g=new a(t);return e.generateContextObject(d.traceId,d.parentId,g.getOperationName({}),g.getCorrelationContextHeader(),d,h)}return r.warn("startOperation was called with invalid arguments",arguments),null},e.disable=function(){this.enabled=!1},e.reset=function(){e.hasEverEnabled&&(e.session=null,e.session=this.cls.createNamespace("AI-CLS-Session"))},e.isNodeVersionCompatible=function(){var e=process.versions.node.split(".");return parseInt(e[0])>3||parseInt(e[0])>2&&parseInt(e[1])>2},e.shouldUseClsHooked=function(){var e=process.versions.node.split(".");return parseInt(e[0])>8||parseInt(e[0])>=8&&parseInt(e[1])>=2},e.canUseClsHooked=function(){var e=process.versions.node.split("."),t=parseInt(e[0])>8||parseInt(e[0])>=8&&parseInt(e[1])>=0,n=parseInt(e[0])<8||parseInt(e[0])<=8&&parseInt(e[1])<2,r=parseInt(e[0])>4||parseInt(e[0])>=4&&parseInt(e[1])>=7;return!(t&&n)&&r},e.enabled=!1,e.hasEverEnabled=!1,e.forceClsHooked=void 0,e.CONTEXT_NAME="ApplicationInsights-Context",e}();t.CorrelationContextManager=l;var u=function(){function e(e){this.props=[],this.addHeaderData(e)}return e.prototype.addHeaderData=function(e){var t=e?e.split(", "):[];this.props=t.map((function(e){var t=e.split("=");return{key:t[0],value:t[1]}})).concat(this.props)},e.prototype.serializeToHeader=function(){return this.props.map((function(e){return e.key+"="+e.value})).join(", ")},e.prototype.getProperty=function(e){for(var t=0;t0&&e.forEach((function(e){var n=e.name;if(void 0!==n){var r=e.value;switch(typeof r){case"function":case"object":break;case"string":t+=" "+n+': "'+r+'",\r\n';break;default:t+=" "+n+": "+r+",\r\n"}}}))}catch(e){this._isEnabled=!1,s.info("Parse client web instrumentation error. Web Instrumentation is disabled")}return t},e.prototype._initialize=function(){this._isInitialized=!0;var t=r.createServer,n=i.createServer,o=this._isEnabled;r.createServer=function(n){var r=n;return r&&(n=function(t,n){var i=n.write,c="GET"==t.method;n.write=function(t,r,l){try{if(o&&c){var u=a.getContentEncodingFromHeaders(n),p=void 0;if("string"==typeof r&&(p=r),null==u)e.INSTANCE.ValidateInjection(n,t)&&(arguments[0]=e.INSTANCE.InjectWebSnippet(n,t,void 0,p));else if(u.length){var d=u[0];arguments[0]=e.INSTANCE.InjectWebSnippet(n,t,d)}}}catch(e){s.warn("Inject snippet error: "+e)}return i.apply(n,arguments)};var l=n.end;return n.end=function(t,r,i){if(o&&c)try{if(o&&c){var u=a.getContentEncodingFromHeaders(n),p=void 0;if("string"==typeof r&&(p=r),null==u)e.INSTANCE.ValidateInjection(n,t)&&(arguments[0]=e.INSTANCE.InjectWebSnippet(n,t,void 0,p));else if(u.length){var d=u[0];arguments[0]=e.INSTANCE.InjectWebSnippet(n,t,d)}}}catch(e){s.warn("Inject snipet error: "+e)}return l.apply(n,arguments)},r(t,n)}),t(n)},i.createServer=function(t,r){var i=r;if(i)return r=function(t,n){var r="GET"==t.method,c=n.write,l=n.end;return n.write=function(t,i,l){try{if(o&&r){var u=a.getContentEncodingFromHeaders(n),p=void 0;if("string"==typeof i&&(p=i),null==u)e.INSTANCE.ValidateInjection(n,t)&&(arguments[0]=this.InjectWebSnippet(n,t,void 0,p));else if(u.length){var d=u[0];arguments[0]=e.INSTANCE.InjectWebSnippet(n,t,d)}}}catch(e){s.warn("Inject snippet error: "+e)}return c.apply(n,arguments)},n.end=function(t,i,c){try{if(o&&r){var u=a.getContentEncodingFromHeaders(n),p=void 0;if("string"==typeof i&&(p=i),null==u)e.INSTANCE.ValidateInjection(n,t)&&(arguments[0]=e.INSTANCE.InjectWebSnippet(n,t,void 0,p));else if(u.length){var d=u[0];arguments[0]=e.INSTANCE.InjectWebSnippet(n,t,d)}}}catch(e){s.warn("Inject snippet error: "+e)}return l.apply(n,arguments)},i(t,n)},n(t,r)}},e.prototype.ValidateInjection=function(t,n){try{if(!t||!n||200!=t.statusCode)return!1;if(!a.isContentTypeHeaderHtml(t))return!1;var r=n.slice().toString();if(r.indexOf("")>=0&&r.indexOf("")>=0&&r.indexOf(e._aiUrl)<0&&r.indexOf(e._aiDeprecatedUrl)<0)return!0}catch(e){s.info("validate injections error: "+e)}return!1},e.prototype.InjectWebSnippet=function(t,n,r,i){try{if(r)t.removeHeader("Content-Length"),n=this._getInjectedCompressBuffer(t,n,r),t.setHeader("Content-Length",n.length);else{var o=n.toString(),c=o.indexOf("");if(c<0)return n;var l=a.insertSnippetByIndex(c,o,e._snippet);if("string"==typeof n)t.removeHeader("Content-Length"),n=l,t.setHeader("Content-Length",Buffer.byteLength(n));else if(Buffer.isBuffer(n)){var u=i||"utf8";if(a.isBufferType(n,u)){t.removeHeader("Content-Length");var p=Buffer.from(l).toString(u);n=Buffer.from(p,u),t.setHeader("Content-Length",n.length)}}}}catch(e){s.warn("Failed to inject web snippet and change content-lenght headers. Exception:"+e)}return n},e.prototype._getInjectedCompressBuffer=function(e,t,n){try{switch(n){case a.contentEncodingMethod.GZIP:var r=o.gunzipSync(t);if(this.ValidateInjection(e,r)){var i=this.InjectWebSnippet(e,r);t=o.gzipSync(i)}break;case a.contentEncodingMethod.DEFLATE:var c=o.inflateSync(t);if(this.ValidateInjection(e,c)){var l=this.InjectWebSnippet(e,c);t=o.deflateSync(l)}break;case a.contentEncodingMethod.BR:var u=a.getBrotliDecompressSync(o),p=a.getBrotliCompressSync(o);if(u&&p){var d=u(t);this.ValidateInjection(e,d)&&(t=p(this.InjectWebSnippet(e,d)));break}}}catch(e){s.info("get web injection compress buffer error: "+e)}return t},e.prototype.dispose=function(){e.INSTANCE=null,this.enable(!1),this._isInitialized=!1},e}();e.exports=d},51148:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.spanToTelemetryContract=void 0;var r=n(57310),i=n(60311),o=n(82204),s=n(85315),a=n(51148),c=n(77649);function l(e){if(e.attributes[o.SemanticAttributes.HTTP_METHOD]){var t=e.attributes[o.SemanticAttributes.HTTP_URL];if(t)return String(t);var n=e.attributes[o.SemanticAttributes.HTTP_SCHEME],r=e.attributes[o.SemanticAttributes.HTTP_TARGET];if(n&&r){var i=e.attributes[o.SemanticAttributes.HTTP_HOST];if(i)return n+"://"+i+r;var s=e.attributes[o.SemanticAttributes.NET_PEER_PORT];if(s){var a=e.attributes[o.SemanticAttributes.NET_PEER_NAME];if(a)return n+"://"+a+":"+s+r;var c=e.attributes[o.SemanticAttributes.NET_PEER_IP];if(c)return n+"://"+c+":"+s+r}}}return""}function u(e){var t=e.attributes[o.SemanticAttributes.PEER_SERVICE],n=e.attributes[o.SemanticAttributes.HTTP_HOST],r=e.attributes[o.SemanticAttributes.HTTP_URL],i=e.attributes[o.SemanticAttributes.NET_PEER_NAME],s=e.attributes[o.SemanticAttributes.NET_PEER_IP];return t?String(t):n?String(n):r?String(r):i?String(i):s?String(s):""}t.spanToTelemetryContract=function(e){var t;switch(e.kind){case i.SpanKind.CLIENT:case i.SpanKind.PRODUCER:case i.SpanKind.INTERNAL:t=function(e){var t={name:e.name,success:e.status.code!=i.SpanStatusCode.ERROR,resultCode:"0",duration:0,data:"",dependencyTypeName:""};e.kind===i.SpanKind.PRODUCER&&(t.dependencyTypeName=s.DependencyTypeName.QueueMessage),e.kind===i.SpanKind.INTERNAL&&e.parentSpanId&&(t.dependencyTypeName=s.DependencyTypeName.InProc);var n=e.attributes[o.SemanticAttributes.HTTP_METHOD],a=e.attributes[o.SemanticAttributes.DB_SYSTEM],c=e.attributes[o.SemanticAttributes.RPC_SYSTEM];if(n){t.dependencyTypeName=s.DependencyTypeName.Http;var p=e.attributes[o.SemanticAttributes.HTTP_URL];if(p){var d="";try{d=new r.URL(String(p)).pathname}catch(e){}t.name=n+" "+d}t.data=l(e);var h=e.attributes[o.SemanticAttributes.HTTP_STATUS_CODE];if(h&&(t.resultCode=String(h)),v=u(e)){try{var f=new RegExp(/(https?)(:\/\/.*)(:\d+)(\S*)/).exec(v);if(null!=f){var m=f[1],g=f[3];("https"==m&&":443"==g||"http"==m&&":80"==g)&&(v=f[1]+f[2]+f[4])}}catch(e){}t.target=""+v}}else if(a){String(a)===o.DbSystemValues.MYSQL?t.dependencyTypeName="mysql":String(a)===o.DbSystemValues.POSTGRESQL?t.dependencyTypeName="postgresql":String(a)===o.DbSystemValues.MONGODB?t.dependencyTypeName="mongodb":String(a)===o.DbSystemValues.REDIS?t.dependencyTypeName="redis":function(e){return e===o.DbSystemValues.DB2||e===o.DbSystemValues.DERBY||e===o.DbSystemValues.MARIADB||e===o.DbSystemValues.MSSQL||e===o.DbSystemValues.ORACLE||e===o.DbSystemValues.SQLITE||e===o.DbSystemValues.OTHER_SQL||e===o.DbSystemValues.HSQLDB||e===o.DbSystemValues.H2}(String(a))?t.dependencyTypeName="SQL":t.dependencyTypeName=String(a);var y=e.attributes[o.SemanticAttributes.DB_STATEMENT],_=e.attributes[o.SemanticAttributes.DB_OPERATION];y?t.data=String(y):_&&(t.data=String(_));var v=u(e),b=e.attributes[o.SemanticAttributes.DB_NAME];t.target=v?b?v+"|"+b:""+v:b?""+b:""+a}else if(c){t.dependencyTypeName=s.DependencyTypeName.Grpc;var E=e.attributes[o.SemanticAttributes.RPC_GRPC_STATUS_CODE];E&&(t.resultCode=String(E)),(v=u(e))?t.target=""+v:c&&(t.target=String(c))}return t}(e);break;case i.SpanKind.SERVER:case i.SpanKind.CONSUMER:t=function(e){var t={name:e.name,success:e.status.code!=i.SpanStatusCode.ERROR,resultCode:"0",duration:0,url:"",source:void 0},n=e.attributes[o.SemanticAttributes.HTTP_METHOD],s=e.attributes[o.SemanticAttributes.RPC_GRPC_STATUS_CODE];if(n){if(e.kind==i.SpanKind.SERVER){var a=e.attributes[o.SemanticAttributes.HTTP_ROUTE],c=e.attributes[o.SemanticAttributes.HTTP_URL];if(a)t.name=n+" "+a;else if(c)try{var u=new r.URL(String(c));t.name=n+" "+u.pathname}catch(e){}}t.url=l(e);var p=e.attributes[o.SemanticAttributes.HTTP_STATUS_CODE];p&&(t.resultCode=String(p))}else s&&(t.resultCode=String(s));return t}(e)}var n=""+(e.spanContext?e.spanContext():e.context()).spanId,p=Math.round(1e3*e.duration[0]+e.duration[1]/1e6);return t.id=n,t.duration=p,t.properties=function(e){for(var t={},n=0,r=Object.keys(e.attributes);n0&&(t["_MS.links"]=c.stringify(o)),t}(e),e.attributes[s.AzNamespace]&&(e.kind===i.SpanKind.INTERNAL&&(t.dependencyTypeName=s.DependencyTypeName.InProc+" | "+e.attributes[s.AzNamespace]),e.attributes[s.AzNamespace]===s.MicrosoftEventHub&&a.parseEventHubSpan(e,t)),t}},24364:(e,t,n)=>{"use strict";t.wp=t.qP=void 0;var r=n(60311),i=n(85315),o=n(66932),s=n(62450),a=n(97656),c=[];t.qP=function(e){try{var t=e.data,n=s.spanToTelemetryContract(t);a.AsyncScopeManager.with(t,(function(){c.forEach((function(e){t.kind===r.SpanKind.SERVER||t.kind===r.SpanKind.CONSUMER?e.trackRequest(n):t.kind!==r.SpanKind.CLIENT&&t.kind!==r.SpanKind.INTERNAL&&t.kind!==r.SpanKind.PRODUCER||e.trackDependency(n)}))}))}catch(e){}},t.wp=function(e,n){if(e){if(c.find((function(e){return e==n})))return;0===c.length&&o.channel.subscribe("azure-coretracing",t.qP,o.trueFilter,(function(e,t){var r=n.getStatsbeat();r&&r.addInstrumentation(i.StatsbeatInstrumentation.AZURE_CORE_TRACING)})),c.push(n)}else 0===(c=c.filter((function(e){return e!=n}))).length&&o.channel.unsubscribe("azure-coretracing",t.qP)}},23805:(e,t,n)=>{"use strict";t.wp=void 0;var r=n(85512),i=n(85315),o=n(66932),s=[],a={10:r.SeverityLevel.Verbose,20:r.SeverityLevel.Verbose,30:r.SeverityLevel.Information,40:r.SeverityLevel.Warning,50:r.SeverityLevel.Error,60:r.SeverityLevel.Critical},c=function(e){var t=e.data.result,n=a[e.data.level];s.forEach((function(e){try{var r=JSON.parse(t);if(r.err){var i=new Error(r.err.message);return i.name=r.err.name,i.stack=r.err.stack,e.config.enableLoggerErrorToTrace?void e.trackTrace({message:t,severity:n}):void e.trackException({exception:i})}}catch(e){}e.trackTrace({message:t,severity:n})}))};t.wp=function(e,t){if(e){if(s.find((function(e){return e==t})))return;0===s.length&&o.channel.subscribe("bunyan",c,o.trueFilter,(function(e,n){var r=t.getStatsbeat();r&&r.addInstrumentation(i.StatsbeatInstrumentation.BUNYAN)})),s.push(t)}else 0===(s=s.filter((function(e){return e!=t}))).length&&o.channel.unsubscribe("bunyan",c)}},72469:(e,t,n)=>{"use strict";t.wp=void 0;var r=n(85512),i=n(85315),o=n(66932),s=[],a=function(e){var t=e.data.message;s.forEach((function(n){t instanceof Error&&!n.config.enableLoggerErrorToTrace?n.trackException({exception:t}):t instanceof Error?n.trackTrace({message:t.toString(),severity:e.data.stderr?r.SeverityLevel.Error:r.SeverityLevel.Information}):(t.lastIndexOf("\n")==t.length-1&&(t=t.substring(0,t.length-1)),n.trackTrace({message:t,severity:e.data.stderr?r.SeverityLevel.Warning:r.SeverityLevel.Information}))}))};t.wp=function(e,t){if(e){if(s.find((function(e){return e==t})))return;0===s.length&&o.channel.subscribe("console",a,o.trueFilter,(function(e,n){var r=t.getStatsbeat();r&&r.addInstrumentation(i.StatsbeatInstrumentation.CONSOLE)})),s.push(t)}else 0===(s=s.filter((function(e){return e!=t}))).length&&o.channel.unsubscribe("console",a)}},1767:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.registerContextPreservation=t.IsInitialized=void 0;var r=n(12010),i=n(38286);t.IsInitialized=!i.JsonConfig.getInstance().noDiagnosticChannel;var o="DiagnosticChannel";if(t.IsInitialized){var s=n(6315),a=i.JsonConfig.getInstance().noPatchModules.split(","),c={bunyan:s.bunyan,console:s.console,mongodb:s.mongodb,mongodbCore:s.mongodbCore,mysql:s.mysql,redis:s.redis,pg:s.pg,pgPool:s.pgPool,winston:s.winston,azuresdk:s.azuresdk};for(var l in c)-1===a.indexOf(l)&&(c[l].enable(),r.info(o,"Subscribed to "+l+" events"));a.length>0&&r.info(o,"Some modules will not be patched",a)}else r.info(o,"Not subscribing to dependency autocollection because APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL was set");t.registerContextPreservation=function(e){t.IsInitialized&&n(66932).channel.addContextPreservation(e)}},45452:(e,t,n)=>{"use strict";t.wp=t.qP=void 0;var r=n(85315),i=n(66932),o=[];t.qP=function(e){"ismaster"!==e.data.event.commandName&&o.forEach((function(t){var n=e.data.startedData&&e.data.startedData.databaseName||"Unknown database";t.trackDependency({target:n,data:e.data.event.commandName,name:e.data.event.commandName,duration:e.data.event.duration,success:e.data.succeeded,resultCode:e.data.succeeded?"0":"1",time:e.data.startedData.time,dependencyTypeName:"mongodb"})}))},t.wp=function(e,n){if(e){if(o.find((function(e){return e==n})))return;0===o.length&&i.channel.subscribe("mongodb",t.qP,i.trueFilter,(function(e,t){var i=n.getStatsbeat();i&&i.addInstrumentation(r.StatsbeatInstrumentation.MONGODB)})),o.push(n)}else 0===(o=o.filter((function(e){return e!=n}))).length&&i.channel.unsubscribe("mongodb",t.qP)}},62953:(e,t,n)=>{"use strict";t.wp=t.qP=void 0;var r=n(85315),i=n(66932),o=[];t.qP=function(e){o.forEach((function(t){var n=e.data.query||{},r=n.sql||"Unknown query",i=!e.data.err,o=(n._connection||{}).config||{},s=o.socketPath?o.socketPath:(o.host||"localhost")+":"+o.port;t.trackDependency({target:s,data:r,name:r,duration:e.data.duration,success:i,resultCode:i?"0":"1",time:e.data.time,dependencyTypeName:"mysql"})}))},t.wp=function(e,n){if(e){if(o.find((function(e){return e==n})))return;0===o.length&&i.channel.subscribe("mysql",t.qP,i.trueFilter,(function(e,t){var i=n.getStatsbeat();i&&i.addInstrumentation(r.StatsbeatInstrumentation.MYSQL)})),o.push(n)}else 0===(o=o.filter((function(e){return e!=n}))).length&&i.channel.unsubscribe("mysql",t.qP)}},18998:(e,t,n)=>{"use strict";t.wp=t.qP=void 0;var r=n(85315),i=n(66932),o=[];t.qP=function(e){o.forEach((function(t){var n=e.data.query,r=n.preparable&&n.preparable.text||n.plan||n.text||"unknown query",i=!e.data.error,o=e.data.database.host+":"+e.data.database.port;t.trackDependency({target:o,data:r,name:r,duration:e.data.duration,success:i,resultCode:i?"0":"1",time:e.data.time,dependencyTypeName:"postgres"})}))},t.wp=function(e,n){if(e){if(o.find((function(e){return e==n})))return;0===o.length&&i.channel.subscribe("postgres",t.qP,i.trueFilter,(function(e,t){var i=n.getStatsbeat();i&&i.addInstrumentation(r.StatsbeatInstrumentation.POSTGRES)})),o.push(n)}else 0===(o=o.filter((function(e){return e!=n}))).length&&i.channel.unsubscribe("postgres",t.qP)}},39215:(e,t,n)=>{"use strict";t.wp=t.qP=void 0;var r=n(85315),i=n(66932),o=[];t.qP=function(e){o.forEach((function(t){"info"!==e.data.commandObj.command&&t.trackDependency({target:e.data.address,name:e.data.commandObj.command,data:e.data.commandObj.command,duration:e.data.duration,success:!e.data.err,resultCode:e.data.err?"1":"0",time:e.data.time,dependencyTypeName:"redis"})}))},t.wp=function(e,n){if(e){if(o.find((function(e){return e==n})))return;0===o.length&&i.channel.subscribe("redis",t.qP,i.trueFilter,(function(e,t){var i=n.getStatsbeat();i&&i.addInstrumentation(r.StatsbeatInstrumentation.REDIS)})),o.push(n)}else 0===(o=o.filter((function(e){return e!=n}))).length&&i.channel.unsubscribe("redis",t.qP)}},27916:(e,t,n)=>{"use strict";t.wp=void 0;var r=n(85315),i=n(85512),o=n(66932),s=[],a={syslog:function(e){var t={emerg:i.SeverityLevel.Critical,alert:i.SeverityLevel.Critical,crit:i.SeverityLevel.Critical,error:i.SeverityLevel.Error,warning:i.SeverityLevel.Warning,notice:i.SeverityLevel.Information,info:i.SeverityLevel.Information,debug:i.SeverityLevel.Verbose};return void 0===t[e]?i.SeverityLevel.Information:t[e]},npm:function(e){var t={error:i.SeverityLevel.Error,warn:i.SeverityLevel.Warning,info:i.SeverityLevel.Information,verbose:i.SeverityLevel.Verbose,debug:i.SeverityLevel.Verbose,silly:i.SeverityLevel.Verbose};return void 0===t[e]?i.SeverityLevel.Information:t[e]},unknown:function(e){return i.SeverityLevel.Information}},c=function(e){var t=e.data.message,n=a[e.data.levelKind](e.data.level);s.forEach((function(r){t instanceof Error&&!r.config.enableLoggerErrorToTrace?r.trackException({exception:t,properties:e.data.meta}):t instanceof Error?r.trackTrace({message:t.toString(),severity:n,properties:e.data.meta}):r.trackTrace({message:t,severity:n,properties:e.data.meta})}))};t.wp=function(e,t){if(e){if(s.find((function(e){return e==t})))return;0===s.length&&o.channel.subscribe("winston",c,o.trueFilter,(function(e,n){var i=t.getStatsbeat();i&&i.addInstrumentation(r.StatsbeatInstrumentation.WINSTON)})),s.push(t)}else 0===(s=s.filter((function(e){return e!=t}))).length&&o.channel.unsubscribe("winston",c)}},85315:(e,t)=>{"use strict";var n,r,i,o,s,a,c,l;Object.defineProperty(t,"__esModule",{value:!0}),t.WEB_INSTRUMENTATION_DEPRECATED_SOURCE=t.WEB_INSTRUMENTATION_DEFAULT_SOURCE=t.TIME_SINCE_ENQUEUED=t.ENQUEUED_TIME=t.MessageBusDestination=t.MicrosoftEventHub=t.AzNamespace=t.StatsbeatNetworkCategory=t.StatsbeatFeatureType=t.StatsbeatInstrumentation=t.StatsbeatFeature=t.StatsbeatCounter=t.StatsbeatAttach=t.StatsbeatResourceProvider=t.StatsbeatTelemetryName=t.HeartBeatMetricName=t.DependencyTypeName=t.TelemetryTypeStringToQuickPulseDocumentType=t.TelemetryTypeStringToQuickPulseType=t.QuickPulseType=t.QuickPulseDocumentType=t.PerformanceToQuickPulseCounter=t.MetricId=t.PerformanceCounter=t.QuickPulseCounter=t.DEFAULT_LIVEMETRICS_HOST=t.DEFAULT_LIVEMETRICS_ENDPOINT=t.DEFAULT_BREEZE_ENDPOINT=t.APPLICATION_INSIGHTS_SDK_VERSION=void 0,t.APPLICATION_INSIGHTS_SDK_VERSION="2.6.0",t.DEFAULT_BREEZE_ENDPOINT="https://dc.services.visualstudio.com",t.DEFAULT_LIVEMETRICS_ENDPOINT="https://rt.services.visualstudio.com",t.DEFAULT_LIVEMETRICS_HOST="rt.services.visualstudio.com",function(e){e.COMMITTED_BYTES="\\Memory\\Committed Bytes",e.PROCESSOR_TIME="\\Processor(_Total)\\% Processor Time",e.REQUEST_RATE="\\ApplicationInsights\\Requests/Sec",e.REQUEST_FAILURE_RATE="\\ApplicationInsights\\Requests Failed/Sec",e.REQUEST_DURATION="\\ApplicationInsights\\Request Duration",e.DEPENDENCY_RATE="\\ApplicationInsights\\Dependency Calls/Sec",e.DEPENDENCY_FAILURE_RATE="\\ApplicationInsights\\Dependency Calls Failed/Sec",e.DEPENDENCY_DURATION="\\ApplicationInsights\\Dependency Call Duration",e.EXCEPTION_RATE="\\ApplicationInsights\\Exceptions/Sec"}(r=t.QuickPulseCounter||(t.QuickPulseCounter={})),function(e){e.PRIVATE_BYTES="\\Process(??APP_WIN32_PROC??)\\Private Bytes",e.AVAILABLE_BYTES="\\Memory\\Available Bytes",e.PROCESSOR_TIME="\\Processor(_Total)\\% Processor Time",e.PROCESS_TIME="\\Process(??APP_WIN32_PROC??)\\% Processor Time",e.REQUEST_RATE="\\ASP.NET Applications(??APP_W3SVC_PROC??)\\Requests/Sec",e.REQUEST_DURATION="\\ASP.NET Applications(??APP_W3SVC_PROC??)\\Request Execution Time"}(i=t.PerformanceCounter||(t.PerformanceCounter={})),(l=t.MetricId||(t.MetricId={})).REQUESTS_DURATION="requests/duration",l.DEPENDENCIES_DURATION="dependencies/duration",l.EXCEPTIONS_COUNT="exceptions/count",l.TRACES_COUNT="traces/count",t.PerformanceToQuickPulseCounter=((n={})[i.PROCESSOR_TIME]=r.PROCESSOR_TIME,n[i.REQUEST_RATE]=r.REQUEST_RATE,n[i.REQUEST_DURATION]=r.REQUEST_DURATION,n[r.COMMITTED_BYTES]=r.COMMITTED_BYTES,n[r.REQUEST_FAILURE_RATE]=r.REQUEST_FAILURE_RATE,n[r.DEPENDENCY_RATE]=r.DEPENDENCY_RATE,n[r.DEPENDENCY_FAILURE_RATE]=r.DEPENDENCY_FAILURE_RATE,n[r.DEPENDENCY_DURATION]=r.DEPENDENCY_DURATION,n[r.EXCEPTION_RATE]=r.EXCEPTION_RATE,n),t.QuickPulseDocumentType={Event:"Event",Exception:"Exception",Trace:"Trace",Metric:"Metric",Request:"Request",Dependency:"RemoteDependency",Availability:"Availability",PageView:"PageView"},t.QuickPulseType={Event:"EventTelemetryDocument",Exception:"ExceptionTelemetryDocument",Trace:"TraceTelemetryDocument",Metric:"MetricTelemetryDocument",Request:"RequestTelemetryDocument",Dependency:"DependencyTelemetryDocument",Availability:"AvailabilityTelemetryDocument",PageView:"PageViewTelemetryDocument"},t.TelemetryTypeStringToQuickPulseType={EventData:t.QuickPulseType.Event,ExceptionData:t.QuickPulseType.Exception,MessageData:t.QuickPulseType.Trace,MetricData:t.QuickPulseType.Metric,RequestData:t.QuickPulseType.Request,RemoteDependencyData:t.QuickPulseType.Dependency,AvailabilityData:t.QuickPulseType.Availability,PageViewData:t.QuickPulseType.PageView},t.TelemetryTypeStringToQuickPulseDocumentType={EventData:t.QuickPulseDocumentType.Event,ExceptionData:t.QuickPulseDocumentType.Exception,MessageData:t.QuickPulseDocumentType.Trace,MetricData:t.QuickPulseDocumentType.Metric,RequestData:t.QuickPulseDocumentType.Request,RemoteDependencyData:t.QuickPulseDocumentType.Dependency,AvailabilityData:t.QuickPulseDocumentType.Availability,PageViewData:t.QuickPulseDocumentType.PageView},t.DependencyTypeName={Grpc:"GRPC",Http:"HTTP",InProc:"InProc",Sql:"SQL",QueueMessage:"Queue Message"},t.HeartBeatMetricName="HeartbeatState",t.StatsbeatTelemetryName="Statsbeat",t.StatsbeatResourceProvider={appsvc:"appsvc",functions:"functions",vm:"vm",unknown:"unknown"},t.StatsbeatAttach={codeless:"codeless",sdk:"sdk"},t.StatsbeatCounter={REQUEST_SUCCESS:"Request Success Count",REQUEST_FAILURE:"Request Failure Count",REQUEST_DURATION:"Request Duration",RETRY_COUNT:"Retry Count",THROTTLE_COUNT:"Throttle Count",EXCEPTION_COUNT:"Exception Count",ATTACH:"Attach",FEATURE:"Feature"},(c=t.StatsbeatFeature||(t.StatsbeatFeature={}))[c.NONE=0]="NONE",c[c.DISK_RETRY=1]="DISK_RETRY",c[c.AAD_HANDLING=2]="AAD_HANDLING",c[c.WEB_SNIPPET=4]="WEB_SNIPPET",(a=t.StatsbeatInstrumentation||(t.StatsbeatInstrumentation={}))[a.NONE=0]="NONE",a[a.AZURE_CORE_TRACING=1]="AZURE_CORE_TRACING",a[a.MONGODB=2]="MONGODB",a[a.MYSQL=4]="MYSQL",a[a.REDIS=8]="REDIS",a[a.POSTGRES=16]="POSTGRES",a[a.BUNYAN=32]="BUNYAN",a[a.WINSTON=64]="WINSTON",a[a.CONSOLE=128]="CONSOLE",(s=t.StatsbeatFeatureType||(t.StatsbeatFeatureType={}))[s.Feature=0]="Feature",s[s.Instrumentation=1]="Instrumentation",(o=t.StatsbeatNetworkCategory||(t.StatsbeatNetworkCategory={}))[o.Breeze=0]="Breeze",o[o.Quickpulse=1]="Quickpulse",t.AzNamespace="az.namespace",t.MicrosoftEventHub="Microsoft.EventHub",t.MessageBusDestination="message_bus.destination",t.ENQUEUED_TIME="enqueuedTime",t.TIME_SINCE_ENQUEUED="timeSinceEnqueued",t.WEB_INSTRUMENTATION_DEFAULT_SOURCE="https://js.monitor.azure.com/scripts/b/ai",t.WEB_INSTRUMENTATION_DEPRECATED_SOURCE="https://az416426.vo.msecnd.net/scripts/b/ai"},12436:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.domainSupportsProperties=t.RemoteDependencyDataConstants=void 0;var r=n(93809),i=function(){function e(){}return e.TYPE_HTTP="Http",e.TYPE_AI="Http (tracked component)",e}();t.RemoteDependencyDataConstants=i,t.domainSupportsProperties=function(e){return"properties"in e||e instanceof r.EventData||e instanceof r.ExceptionData||e instanceof r.MessageData||e instanceof r.MetricData||e instanceof r.PageViewData||e instanceof r.RemoteDependencyData||e instanceof r.RequestData}},48517:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.properties={},t.measurements={},t}return i(t,e),t}(n(48707));e.exports=o},88915:e=>{"use strict";e.exports=function(){}},61886:e=>{"use strict";e.exports=function(){this.applicationVersion="ai.application.ver",this.deviceId="ai.device.id",this.deviceLocale="ai.device.locale",this.deviceModel="ai.device.model",this.deviceOEMName="ai.device.oemName",this.deviceOSVersion="ai.device.osVersion",this.deviceType="ai.device.type",this.locationIp="ai.location.ip",this.operationId="ai.operation.id",this.operationName="ai.operation.name",this.operationParentId="ai.operation.parentId",this.operationSyntheticSource="ai.operation.syntheticSource",this.operationCorrelationVector="ai.operation.correlationVector",this.sessionId="ai.session.id",this.sessionIsFirst="ai.session.isFirst",this.userAccountId="ai.user.accountId",this.userId="ai.user.id",this.userAuthUserId="ai.user.authUserId",this.cloudRole="ai.cloud.role",this.cloudRoleInstance="ai.cloud.roleInstance",this.internalSdkVersion="ai.internal.sdkVersion",this.internalAgentVersion="ai.internal.agentVersion",this.internalNodeName="ai.internal.nodeName"}},97878:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){return e.call(this)||this}return i(t,e),t}(n(88915));e.exports=o},946:(e,t,n)=>{"use strict";var r=n(14964);e.exports=function(){this.kind=r.Measurement}},14964:e=>{"use strict";var t;!function(e){e[e.Measurement=0]="Measurement",e[e.Aggregation=1]="Aggregation"}(t||(t={})),e.exports=t},48707:e=>{"use strict";e.exports=function(){}},6441:e=>{"use strict";e.exports=function(){this.ver=1,this.sampleRate=100,this.tags={}}},43139:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.properties={},t.measurements={},t}return i(t,e),t}(n(48707));e.exports=o},46157:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.exceptions=[],t.properties={},t.measurements={},t}return i(t,e),t}(n(48707));e.exports=o},49668:e=>{"use strict";e.exports=function(){this.hasFullStack=!0,this.parsedStack=[]}},85397:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.properties={},t}return i(t,e),t}(n(48707));e.exports=o},17059:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.metrics=[],t.properties={},t}return i(t,e),t}(n(48707));e.exports=o},39731:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.properties={},t.measurements={},t}return i(t,e),t}(n(43139));e.exports=o},5520:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.success=!0,t.properties={},t.measurements={},t}return i(t,e),t}(n(48707));e.exports=o},43739:function(e,t,n){"use strict";var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=function(e){function t(){var t=e.call(this)||this;return t.ver=2,t.properties={},t.measurements={},t}return i(t,e),t}(n(48707));e.exports=o},70595:e=>{"use strict";var t;!function(e){e[e.Verbose=0]="Verbose",e[e.Information=1]="Information",e[e.Warning=2]="Warning",e[e.Error=3]="Error",e[e.Critical=4]="Critical"}(t||(t={})),e.exports=t},33076:e=>{"use strict";e.exports=function(){}},93809:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvailabilityData=n(48517),t.Base=n(88915),t.ContextTagKeys=n(61886),t.Data=n(97878),t.DataPoint=n(946),t.DataPointType=n(14964),t.Domain=n(48707),t.Envelope=n(6441),t.EventData=n(43139),t.ExceptionData=n(46157),t.ExceptionDetails=n(49668),t.MessageData=n(85397),t.MetricData=n(17059),t.PageViewData=n(39731),t.RemoteDependencyData=n(5520),t.RequestData=n(43739),t.SeverityLevel=n(70595),t.StackFrame=n(33076)},22494:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},12139:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},21036:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1830:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},95610:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},15327:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},38983:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},60476:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},59390:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(38983),t),i(n(21036),t),i(n(12139),t),i(n(95610),t),i(n(15327),t),i(n(22494),t),i(n(60476),t),i(n(1830),t)},43025:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},20132:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},37772:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},81505:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},83103:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},40421:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},83454:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},53991:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},47586:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},99571:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},24806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},95263:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.TelemetryType=t.TelemetryTypeString=t.baseTypeToTelemetryType=t.telemetryTypeToBaseType=void 0,t.telemetryTypeToBaseType=function(e){switch(e){case n.Event:return"EventData";case n.Exception:return"ExceptionData";case n.Trace:return"MessageData";case n.Metric:return"MetricData";case n.Request:return"RequestData";case n.Dependency:return"RemoteDependencyData";case n.Availability:return"AvailabilityData";case n.PageView:return"PageViewData"}},t.baseTypeToTelemetryType=function(e){switch(e){case"EventData":return n.Event;case"ExceptionData":return n.Exception;case"MessageData":return n.Trace;case"MetricData":return n.Metric;case"RequestData":return n.Request;case"RemoteDependencyData":return n.Dependency;case"AvailabilityData":return n.Availability;case"PageViewData":return n.PageView}},t.TelemetryTypeString={Event:"EventData",Exception:"ExceptionData",Trace:"MessageData",Metric:"MetricData",Request:"RequestData",Dependency:"RemoteDependencyData",Availability:"AvailabilityData",PageView:"PageViewData"},function(e){e[e.Event=0]="Event",e[e.Exception=1]="Exception",e[e.Trace=2]="Trace",e[e.Metric=3]="Metric",e[e.Request=4]="Request",e[e.Dependency=5]="Dependency",e[e.Availability=6]="Availability",e[e.PageView=7]="PageView"}(n=t.TelemetryType||(t.TelemetryType={}))},14269:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},10234:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(20132),t),i(n(81505),t),i(n(83103),t),i(n(40421),t),i(n(99571),t),i(n(14269),t),i(n(24806),t),i(n(83454),t),i(n(53991),t),i(n(43025),t),i(n(47586),t),i(n(37772),t),i(n(95263),t)},85512:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(12436),t),i(n(93809),t),i(n(10234),t),i(n(59390),t)},71204:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AggregatedMetricCounter=void 0;t.AggregatedMetricCounter=function(e){this.dimensions=e,this.totalCount=0,this.lastTotalCount=0,this.intervalExecutionTime=0,this.lastTime=+new Date,this.lastIntervalExecutionTime=0}},32339:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.PreaggregatedMetricPropertyNames=void 0,t.PreaggregatedMetricPropertyNames={cloudRoleInstance:"cloud/roleInstance",cloudRoleName:"cloud/roleName",operationSynthetic:"operation/synthetic",requestSuccess:"Request.Success",requestResultCode:"request/resultCode",dependencyType:"Dependency.Type",dependencyTarget:"dependency/target",dependencySuccess:"Dependency.Success",dependencyResultCode:"dependency/resultCode",traceSeverityLevel:"trace/severityLevel"}},58731:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,r=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AzureVirtualMachine=void 0;var r=n(12010),i=n(77649),o=n(29816),s=function(){function e(){}return e.getAzureComputeMetadata=function(t,n){var s,a=this,c={},l=((s={method:"GET"})[o.disableCollectionRequestOption]=!0,s.headers={Metadata:"True"},s),u=i.makeRequest(t,"http://169.254.169.254/metadata/instance/compute?api-version=2017-12-01&format=json",l,(function(t){if(200===t.statusCode){c.isVM=!0;var i="";t.on("data",(function(e){i+=e})),t.on("end",(function(){try{var t=JSON.parse(i);c.id=t.vmId||"",c.subscriptionId=t.subscriptionId||"",c.osType=t.osType||""}catch(t){r.info(e.TAG,t)}n(c)}))}else n(c)}),!1,!1);u&&(setTimeout((function(){a._requestTimedOut=!0,u.abort()}),e.HTTP_TIMEOUT),u.on("error",(function(t){a._requestTimedOut&&t&&(t.name="telemetry timeout",t.message="telemetry request timed out"),t&&t.message&&t.message.indexOf("UNREACH")>-1?c.isVM=!1:r.info(e.TAG,t),n(c)})),u.end())},e.HTTP_TIMEOUT=2500,e.TAG="AzureVirtualMachine",e}();t.AzureVirtualMachine=s},4240:(e,t,n)=>{"use strict";var r=n(12010),i=n(77649),o=function(){function e(e,t,n,r){this._buffer=[],this._lastSend=0,this._isDisabled=e,this._getBatchSize=t,this._getBatchIntervalMs=n,this._sender=r}return e.prototype.setUseDiskRetryCaching=function(e,t,n){this._sender.setDiskRetryMode(e,t,n)},e.prototype.send=function(e){var t=this;this._isDisabled()||(e?(this._buffer.push(e),this._buffer.length>=this._getBatchSize()?this.triggerSend(!1):!this._timeoutHandle&&this._buffer.length>0&&(this._timeoutHandle=setTimeout((function(){t._timeoutHandle=null,t.triggerSend(!1)}),this._getBatchIntervalMs()))):r.warn("Cannot send null/undefined telemetry"))},e.prototype.triggerSend=function(e,t){var n=this._buffer.length<1;n||(e||i.isNodeExit?(this._sender.saveOnCrash(this._buffer),"function"==typeof t&&t("data saved on crash")):this._sender.send(this._buffer,t)),this._lastSend=+new Date,this._buffer=[],clearTimeout(this._timeoutHandle),this._timeoutHandle=null,n&&"function"==typeof t&&t("no data to send")},e}();e.exports=o},12049:(e,t,n)=>{"use strict";var r=n(26590),i=n(42495),o=n(12010),s=n(85315),a=n(57310),c=n(38286),l=function(){function e(t){this._endpointBase=s.DEFAULT_BREEZE_ENDPOINT,this._mergeConfig();var n=this._connectionString,r=i.parse(t),o=i.parse(n),c=!r.instrumentationkey&&Object.keys(r).length>0?null:t,l=this._instrumentationKey;this.instrumentationKey=r.instrumentationkey||c||o.instrumentationkey||l;var u=""+(this.endpointUrl||r.ingestionendpoint||o.ingestionendpoint||this._endpointBase);u.endsWith("/")&&(u=u.slice(0,-1)),this.endpointUrl=u+"/v2.1/track",this.maxBatchSize=this.maxBatchSize||250,this.maxBatchIntervalMs=this.maxBatchIntervalMs||15e3,this.disableAppInsights=this.disableAppInsights||!1,this.samplingPercentage=this.samplingPercentage||100,this.correlationIdRetryIntervalMs=this.correlationIdRetryIntervalMs||3e4,this.enableWebInstrumentation=this.enableWebInstrumentation||this.enableAutoWebSnippetInjection||!1,this.webInstrumentationConfig=this.webInstrumentationConfig||null,this.enableAutoWebSnippetInjection=this.enableWebInstrumentation,this.correlationHeaderExcludedDomains=this.correlationHeaderExcludedDomains||["*.core.windows.net","*.core.chinacloudapi.cn","*.core.cloudapi.de","*.core.usgovcloudapi.net","*.core.microsoft.scloud","*.core.eaglex.ic.gov"],this.ignoreLegacyHeaders=this.ignoreLegacyHeaders||!1,this.profileQueryEndpoint=r.ingestionendpoint||o.ingestionendpoint||process.env[e.ENV_profileQueryEndpoint]||this._endpointBase,this.quickPulseHost=this.quickPulseHost||r.liveendpoint||o.liveendpoint||process.env[e.ENV_quickPulseHost]||s.DEFAULT_LIVEMETRICS_HOST,this.webInstrumentationConnectionString=this.webInstrumentationConnectionString||this._webInstrumentationConnectionString||"",this.webSnippetConnectionString=this.webInstrumentationConnectionString,this.quickPulseHost.match(/^https?:\/\//)&&(this.quickPulseHost=new a.URL(this.quickPulseHost).host)}return Object.defineProperty(e.prototype,"profileQueryEndpoint",{get:function(){return this._profileQueryEndpoint},set:function(e){this._profileQueryEndpoint=e,this.correlationId=r.correlationIdPrefix},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"instrumentationKey",{get:function(){return this._instrumentationKey},set:function(t){e._validateInstrumentationKey(t)||o.warn("An invalid instrumentation key was provided. There may be resulting telemetry loss",this.instrumentationKey),this._instrumentationKey=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"webSnippetConnectionString",{get:function(){return this._webInstrumentationConnectionString},set:function(e){this._webInstrumentationConnectionString=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"webInstrumentationConnectionString",{get:function(){return this._webInstrumentationConnectionString},set:function(e){this._webInstrumentationConnectionString=e},enumerable:!1,configurable:!0}),e.prototype._mergeConfig=function(){var e=c.JsonConfig.getInstance();this._connectionString=e.connectionString,this._instrumentationKey=e.instrumentationKey,this.correlationHeaderExcludedDomains=e.correlationHeaderExcludedDomains,this.correlationIdRetryIntervalMs=e.correlationIdRetryIntervalMs,this.disableAllExtendedMetrics=e.disableAllExtendedMetrics,this.disableAppInsights=e.disableAppInsights,this.disableStatsbeat=e.disableStatsbeat,this.distributedTracingMode=e.distributedTracingMode,this.enableAutoCollectConsole=e.enableAutoCollectConsole,this.enableLoggerErrorToTrace=e.enableLoggerErrorToTrace,this.enableAutoCollectDependencies=e.enableAutoCollectDependencies,this.enableAutoCollectIncomingRequestAzureFunctions=e.enableAutoCollectIncomingRequestAzureFunctions,this.enableAutoCollectExceptions=e.enableAutoCollectExceptions,this.enableAutoCollectExtendedMetrics=e.enableAutoCollectExtendedMetrics,this.enableAutoCollectExternalLoggers=e.enableAutoCollectExternalLoggers,this.enableAutoCollectHeartbeat=e.enableAutoCollectHeartbeat,this.enableAutoCollectPerformance=e.enableAutoCollectPerformance,this.enableAutoCollectPreAggregatedMetrics=e.enableAutoCollectPreAggregatedMetrics,this.enableAutoCollectRequests=e.enableAutoCollectRequests,this.enableAutoDependencyCorrelation=e.enableAutoDependencyCorrelation,this.enableInternalDebugLogging=e.enableInternalDebugLogging,this.enableInternalWarningLogging=e.enableInternalWarningLogging,this.enableResendInterval=e.enableResendInterval,this.enableMaxBytesOnDisk=e.enableMaxBytesOnDisk,this.enableSendLiveMetrics=e.enableSendLiveMetrics,this.enableUseAsyncHooks=e.enableUseAsyncHooks,this.enableUseDiskRetryCaching=e.enableUseDiskRetryCaching,this.endpointUrl=e.endpointUrl,this.extendedMetricDisablers=e.extendedMetricDisablers,this.ignoreLegacyHeaders=e.ignoreLegacyHeaders,this.maxBatchIntervalMs=e.maxBatchIntervalMs,this.maxBatchSize=e.maxBatchSize,this.proxyHttpUrl=e.proxyHttpUrl,this.proxyHttpsUrl=e.proxyHttpsUrl,this.quickPulseHost=e.quickPulseHost,this.samplingPercentage=e.samplingPercentage,this.enableWebInstrumentation=e.enableWebInstrumentation,this._webInstrumentationConnectionString=e.webInstrumentationConnectionString,this.webInstrumentationConfig=e.webInstrumentationConfig,this.webInstrumentationSrc=e.webInstrumentationSrc},e._validateInstrumentationKey=function(e){return new RegExp("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$").test(e)},e.ENV_azurePrefix="APPSETTING_",e.ENV_iKey="APPINSIGHTS_INSTRUMENTATIONKEY",e.legacy_ENV_iKey="APPINSIGHTS_INSTRUMENTATION_KEY",e.ENV_profileQueryEndpoint="APPINSIGHTS_PROFILE_QUERY_ENDPOINT",e.ENV_quickPulseHost="APPINSIGHTS_QUICKPULSE_HOST",e}();e.exports=l},42495:(e,t,n)=>{"use strict";var r=n(85315),i=function(){function e(){}return e.parse=function(t){if(!t)return{};var n=t.split(e._FIELDS_SEPARATOR).reduce((function(t,n){var r=n.split(e._FIELD_KEY_VALUE_SEPARATOR);if(2===r.length){var i=r[0].toLowerCase(),o=r[1];t[i]=o}return t}),{});if(Object.keys(n).length>0){if(n.endpointsuffix){var i=n.location?n.location+".":"";n.ingestionendpoint=n.ingestionendpoint||"https://"+i+"dc."+n.endpointsuffix,n.liveendpoint=n.liveendpoint||"https://"+i+"live."+n.endpointsuffix}n.ingestionendpoint=n.ingestionendpoint||r.DEFAULT_BREEZE_ENDPOINT,n.liveendpoint=n.liveendpoint||r.DEFAULT_LIVEMETRICS_ENDPOINT}return n},e.isIkeyValid=function(e){return!(!e||""==e)&&new RegExp("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$").test(e)},e._FIELDS_SEPARATOR=";",e._FIELD_KEY_VALUE_SEPARATOR="=",e}();e.exports=i},82028:(e,t,n)=>{"use strict";var r=n(22037),i=n(57147),o=n(71017),s=n(85512),a=n(85315),c=n(12010),l=function(){function e(e){this.keys=new s.ContextTagKeys,this.tags={},this._loadApplicationContext(e),this._loadDeviceContext(),this._loadInternalContext()}return e.prototype._loadApplicationContext=function(t){if(t=t||o.resolve(__dirname,"../../../../package.json"),!e.appVersion[t]){e.appVersion[t]="unknown";try{var n=JSON.parse(i.readFileSync(t,"utf8"));n&&"string"==typeof n.version&&(e.appVersion[t]=n.version)}catch(e){c.info("unable to read app version: ",e)}}this.tags[this.keys.applicationVersion]=e.appVersion[t]},e.prototype._loadDeviceContext=function(){var t=r&&r.hostname(),n=e.DefaultRoleName;process.env.WEBSITE_SITE_NAME&&(n=process.env.WEBSITE_SITE_NAME),process.env.WEBSITE_INSTANCE_ID&&(t=process.env.WEBSITE_INSTANCE_ID),this.tags[this.keys.deviceId]="",this.tags[this.keys.cloudRoleInstance]=t,this.tags[this.keys.deviceOSVersion]=r&&r.type()+" "+r.release(),this.tags[this.keys.cloudRole]=n,this.tags["ai.device.osArchitecture"]=r&&r.arch(),this.tags["ai.device.osPlatform"]=r&&r.platform()},e.prototype._loadInternalContext=function(){e.sdkVersion=a.APPLICATION_INSIGHTS_SDK_VERSION,this.tags[this.keys.internalSdkVersion]="node:"+e.sdkVersion},e.DefaultRoleName="Web",e.appVersion={},e.sdkVersion=null,e}();e.exports=l},26590:(e,t,n)=>{"use strict";var r=n(77649),i=function(){function e(){}return e.queryCorrelationId=function(e,t){},e.cancelCorrelationIdQuery=function(e,t){},e.generateRequestId=function(t){if(t){"."!==(t="|"==t[0]?t:"|"+t)[t.length-1]&&(t+=".");var n=(e.currentRootId++).toString(16);return e.appendSuffix(t,n,"_")}return e.generateRootId()},e.getRootId=function(e){var t=e.indexOf(".");t<0&&(t=e.length);var n="|"===e[0]?1:0;return e.substring(n,t)},e.generateRootId=function(){return"|"+r.w3cTraceId()+"."},e.appendSuffix=function(t,n,i){if(t.length+n.lengtho)for(;o>1;--o){var s=t[o-1];if("."===s||"_"===s)break}if(o<=1)return e.generateRootId();for(n=r.randomu32().toString(16);n.length<8;)n="0"+n;return t.substring(0,o)+n+"#"},e.correlationIdPrefix="cid-v1:",e.w3cEnabled=!0,e.HTTP_TIMEOUT=2500,e.requestIdMaxLength=1024,e.currentRootId=r.randomu32(),e}();e.exports=i},74532:(e,t,n)=>{"use strict";var r=n(85512),i=n(77649),o=n(6751),s=n(12010),a=function(){function e(){}return e.createEnvelope=function(t,n,o,s,a){var c=null;switch(n){case r.TelemetryType.Trace:c=e.createTraceData(t);break;case r.TelemetryType.Dependency:c=e.createDependencyData(t);break;case r.TelemetryType.Event:c=e.createEventData(t);break;case r.TelemetryType.Exception:c=e.createExceptionData(t);break;case r.TelemetryType.Request:c=e.createRequestData(t);break;case r.TelemetryType.Metric:c=e.createMetricData(t);break;case r.TelemetryType.Availability:c=e.createAvailabilityData(t);break;case r.TelemetryType.PageView:c=e.createPageViewData(t)}if(c&&c.baseData&&r.domainSupportsProperties(c.baseData)){if(o)if(c.baseData.properties)for(var l in o)c.baseData.properties[l]||(c.baseData.properties[l]=o[l]);else c.baseData.properties=o;e.addAzureFunctionsCorrelationProperties(c.baseData.properties),c.baseData.properties&&(c.baseData.properties=i.validateStringMap(c.baseData.properties))}var u=a&&a.instrumentationKey||"",p=new r.Envelope;return p.data=c,p.iKey=u,p.name="Microsoft.ApplicationInsights."+u.replace(/-/g,"")+"."+c.baseType.substr(0,c.baseType.length-4),p.tags=this.getTags(s,t.tagOverrides),p.time=(new Date).toISOString(),p.ver=1,p.sampleRate=a?a.samplingPercentage:100,n===r.TelemetryType.Metric&&(p.sampleRate=100),p},e.addAzureFunctionsCorrelationProperties=function(e){var t=o.CorrelationContextManager.getCurrentContext();if(t&&t.customProperties&&t.customProperties.getProperty instanceof Function){e=e||{};var n=t.customProperties.getProperty("InvocationId");n&&(e.InvocationId=n),(n=t.customProperties.getProperty("ProcessId"))&&(e.ProcessId=n),(n=t.customProperties.getProperty("LogLevel"))&&(e.LogLevel=n),(n=t.customProperties.getProperty("Category"))&&(e.Category=n),(n=t.customProperties.getProperty("HostInstanceId"))&&(e.HostInstanceId=n),(n=t.customProperties.getProperty("AzFuncLiveLogsSessionId"))&&(e.AzFuncLiveLogsSessionId=n)}},e.truncateProperties=function(e){if(e.properties)try{for(var t={},n=Object.keys(e.properties),r=Object.values(e.properties),o=0;o0,o.exceptions.push(a);var c=new r.Data;return c.baseType=r.telemetryTypeToBaseType(r.TelemetryType.Exception),c.baseData=o,c},e.createRequestData=function(e){var t,n,o,s,a=new r.RequestData;e.id?a.id=e.id:a.id=i.w3cTraceId(),a.name=null===(t=e.name)||void 0===t?void 0:t.substring(0,1024),a.url=null===(n=e.url)||void 0===n?void 0:n.substring(0,2048),a.source=null===(o=e.source)||void 0===o?void 0:o.substring(0,1024),a.duration=i.msToTimeSpan(e.duration),a.responseCode=null===(s=e.resultCode?e.resultCode.toString():"0")||void 0===s?void 0:s.substring(0,1024),a.success=e.success,a.properties=this.truncateProperties(e),a.measurements=e.measurements;var c=new r.Data;return c.baseType=r.telemetryTypeToBaseType(r.TelemetryType.Request),c.baseData=a,c},e.createMetricData=function(e){var t,n=new r.MetricData;n.metrics=[];var i=new r.DataPoint;i.count=isNaN(e.count)?1:e.count,i.kind=r.DataPointType.Aggregation,i.max=isNaN(e.max)?e.value:e.max,i.min=isNaN(e.min)?e.value:e.min,i.name=null===(t=e.name)||void 0===t?void 0:t.substring(0,1024),i.stdDev=isNaN(e.stdDev)?0:e.stdDev,i.value=e.value,i.ns=e.namespace,n.metrics.push(i),n.properties=this.truncateProperties(e);var o=new r.Data;return o.baseType=r.telemetryTypeToBaseType(r.TelemetryType.Metric),o.baseData=n,o},e.createAvailabilityData=function(e){var t,n,o=new r.AvailabilityData;e.id?o.id=e.id:o.id=i.w3cTraceId(),o.name=null===(t=e.name)||void 0===t?void 0:t.substring(0,1024),o.duration=i.msToTimeSpan(e.duration),o.success=e.success,o.runLocation=e.runLocation,o.message=null===(n=e.message)||void 0===n?void 0:n.substring(0,8192),o.measurements=e.measurements,o.properties=this.truncateProperties(e);var s=new r.Data;return s.baseType=r.telemetryTypeToBaseType(r.TelemetryType.Availability),s.baseData=o,s},e.createPageViewData=function(e){var t,n,o=new r.PageViewData;o.name=null===(t=e.name)||void 0===t?void 0:t.substring(0,1024),o.duration=i.msToTimeSpan(e.duration),o.url=null===(n=e.url)||void 0===n?void 0:n.substring(0,2048),o.measurements=e.measurements,o.properties=this.truncateProperties(e);var s=new r.Data;return s.baseType=r.telemetryTypeToBaseType(r.TelemetryType.PageView),s.baseData=o,s},e.getTags=function(e,t){var n=o.CorrelationContextManager.getCurrentContext(),r={};if(e&&e.tags)for(var i in e.tags)r[i]=e.tags[i];if(t)for(var i in t)r[i]=t[i];return n&&(r[e.keys.operationId]=r[e.keys.operationId]||n.operation.id,r[e.keys.operationName]=r[e.keys.operationName]||n.operation.name,r[e.keys.operationParentId]=r[e.keys.operationParentId]||n.operation.parentId),r},e.parseStack=function(e){var t=void 0;if("string"==typeof e){var n=e.split("\n");t=[];for(var r=0,i=0,o=0;o<=n.length;o++){var s=n[o];if(c.regex.test(s)){var a=new c(n[o],r++);i+=a.sizeInBytes,t.push(a)}}if(i>32768)for(var l=0,u=t.length-1,p=0,d=l,h=u;l32768){var f=h-d+1;t.splice(d,f);break}d=l,h=u,l++,u--}}return t},e}(),c=function(){function e(t,n){this.sizeInBytes=0,this.level=n,this.method="",this.assembly=i.trim(t);var r=t.match(e.regex);r&&r.length>=5&&(this.method=i.trim(r[2])||this.method,this.fileName=i.trim(r[4])||"",this.line=parseInt(r[5])||0),this.sizeInBytes+=this.method.length,this.sizeInBytes+=this.fileName.length,this.sizeInBytes+=this.assembly.length,this.sizeInBytes+=e.baseSize,this.sizeInBytes+=this.level.toString().length,this.sizeInBytes+=this.line.toString().length}return e.regex=/^(\s+at)?(.*?)(\@|\s\(|\s)([^\(\n]+):(\d+):(\d+)(\)?)$/,e.baseSize=58,e}();e.exports=a},4147:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,r=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},55052:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,r=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]this.maxSizeBytes?[4,this._createBackupFile(t)]:[3,14];case 13:return i.sent(),[3,16];case 14:return[4,l.appendFileAsync(this._fileFullPath,t)];case 15:i.sent(),i.label=16;case 16:return[3,18];case 17:return o=i.sent(),console.log(this.TAG,"Failed to create backup file: "+(o&&o.message)),[3,18];case 18:return[2]}}))}))},e.prototype._createBackupFile=function(e){return r(this,void 0,void 0,(function(){var t,n,r;return i(this,(function(i){switch(i.label){case 0:return i.trys.push([0,3,4,5]),[4,l.readFileAsync(this._fileFullPath)];case 1:return t=i.sent(),n=c.join(this._tempDir,(new Date).getTime()+"."+this._logFileName),[4,l.writeFileAsync(n,t)];case 2:return i.sent(),[3,5];case 3:return r=i.sent(),console.log("Failed to generate backup log file",r),[3,5];case 4:return l.writeFileAsync(this._fileFullPath,e),[7];case 5:return[2]}}))}))},e.prototype._fileCleanupTask=function(){return r(this,void 0,void 0,(function(){var e,t,n,r,o,s=this;return i(this,(function(i){switch(i.label){case 0:return i.trys.push([0,6,,7]),[4,l.readdirAsync(this._tempDir)];case 1:(e=(e=i.sent()).filter((function(e){return c.basename(e).indexOf(s._backUpNameFormat)>-1}))).sort((function(e,t){var n=new Date(parseInt(e.split(s._backUpNameFormat)[0])),r=new Date(parseInt(t.split(s._backUpNameFormat)[0]));return n=r?1:void 0})),t=e.length,n=0,i.label=2;case 2:return n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JsonConfig=void 0;var r=n(57147),i=n(71017),o=n(12010),s="APPSETTING_",a="APPINSIGHTS_INSTRUMENTATIONKEY",c="APPINSIGHTS_INSTRUMENTATION_KEY",l=function(){function e(){this.connectionString=process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,this.instrumentationKey=process.env[a]||process.env[s+a]||process.env[c]||process.env[s+c],!this.connectionString&&this.instrumentationKey&&o.warn("APPINSIGHTS_INSTRUMENTATIONKEY is in path of deprecation, please use APPLICATIONINSIGHTS_CONNECTION_STRING env variable to setup the SDK."),this.disableAllExtendedMetrics=!!process.env.APPLICATION_INSIGHTS_DISABLE_ALL_EXTENDED_METRICS,this.extendedMetricDisablers=process.env.APPLICATION_INSIGHTS_DISABLE_EXTENDED_METRIC,this.proxyHttpUrl=process.env.http_proxy,this.proxyHttpsUrl=process.env.https_proxy,this.noDiagnosticChannel=!!process.env.APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL,this.disableStatsbeat=!!process.env.APPLICATION_INSIGHTS_NO_STATSBEAT,this.noHttpAgentKeepAlive=!!process.env.APPLICATION_INSIGHTS_NO_HTTP_AGENT_KEEP_ALIVE,this.noPatchModules=process.env.APPLICATION_INSIGHTS_NO_PATCH_MODULES||"",this.enableWebInstrumentation=!!process.env.APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_ENABLED||!!process.env.APPLICATIONINSIGHTS_WEB_SNIPPET_ENABLED,this.webInstrumentationSrc=process.env.APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_SOURCE||"",this.webInstrumentationConnectionString=process.env.APPLICATIONINSIGHTS_WEB_INSTRUMENTATION_CONNECTION_STRING||process.env.APPLICATIONINSIGHTS_WEB_SNIPPET_CONNECTION_STRING||"",this.enableAutoWebSnippetInjection=this.enableWebInstrumentation,this.webSnippetConnectionString=this.webInstrumentationConnectionString,this._loadJsonFile()}return e.getInstance=function(){return e._instance||(e._instance=new e),e._instance},e.prototype._loadJsonFile=function(){var e=i.join(__dirname,"../../"),t=i.join(e,"applicationinsights.json"),n=process.env.APPLICATIONINSIGHTS_CONFIGURATION_FILE;n&&(t=i.isAbsolute(n)?n:i.join(e,n));try{var s=JSON.parse(r.readFileSync(t,"utf8"));null!=s.disableStatsbeat&&(this.disableStatsbeat=s.disableStatsbeat),null!=s.disableAllExtendedMetrics&&(this.disableAllExtendedMetrics=s.disableStatsbeat),null!=s.noDiagnosticChannel&&(this.noDiagnosticChannel=s.noDiagnosticChannel),null!=s.noHttpAgentKeepAlive&&(this.noHttpAgentKeepAlive=s.noHttpAgentKeepAlive),null!=s.connectionString&&(this.connectionString=s.connectionString),null!=s.extendedMetricDisablers&&(this.extendedMetricDisablers=s.extendedMetricDisablers),null!=s.noDiagnosticChannel&&(this.noDiagnosticChannel=s.noDiagnosticChannel),null!=s.proxyHttpUrl&&(this.proxyHttpUrl=s.proxyHttpUrl),null!=s.proxyHttpsUrl&&(this.proxyHttpsUrl=s.proxyHttpsUrl),null!=s.proxyHttpsUrl&&(this.proxyHttpsUrl=s.proxyHttpsUrl),null!=s.noPatchModules&&(this.noPatchModules=s.noPatchModules),null!=s.enableAutoWebSnippetInjection&&(this.enableWebInstrumentation=s.enableAutoWebSnippetInjection,this.enableAutoWebSnippetInjection=this.enableWebInstrumentation),null!=s.enableWebInstrumentation&&(this.enableWebInstrumentation=s.enableWebInstrumentation,this.enableAutoWebSnippetInjection=this.enableWebInstrumentation),null!=s.webSnippetConnectionString&&(this.webInstrumentationConnectionString=s.webSnippetConnectionString,this.webSnippetConnectionString=this.webInstrumentationConnectionString),null!=s.webInstrumentationConnectionString&&(this.webInstrumentationConnectionString=s.webInstrumentationConnectionString,this.webSnippetConnectionString=this.webInstrumentationConnectionString),null!=s.webInstrumentationConfig&&(this.webInstrumentationConfig=s.webInstrumentationConfig),null!=s.webInstrumentationSrc&&(this.webInstrumentationSrc=s.webInstrumentationSrc),null!=s.enableLoggerErrorToTrace&&(this.enableLoggerErrorToTrace=s.enableLoggerErrorToTrace),this.endpointUrl=s.endpointUrl,this.maxBatchSize=s.maxBatchSize,this.maxBatchIntervalMs=s.maxBatchIntervalMs,this.disableAppInsights=s.disableAppInsights,this.samplingPercentage=s.samplingPercentage,this.correlationIdRetryIntervalMs=s.correlationIdRetryIntervalMs,this.correlationHeaderExcludedDomains=s.correlationHeaderExcludedDomains,this.ignoreLegacyHeaders=s.ignoreLegacyHeaders,this.distributedTracingMode=s.distributedTracingMode,this.enableAutoCollectExternalLoggers=s.enableAutoCollectExternalLoggers,this.enableAutoCollectConsole=s.enableAutoCollectConsole,this.enableLoggerErrorToTrace=s.enableLoggerErrorToTrace,this.enableAutoCollectExceptions=s.enableAutoCollectExceptions,this.enableAutoCollectPerformance=s.enableAutoCollectPerformance,this.enableAutoCollectExtendedMetrics=s.enableAutoCollectExtendedMetrics,this.enableAutoCollectPreAggregatedMetrics=s.enableAutoCollectPreAggregatedMetrics,this.enableAutoCollectHeartbeat=s.enableAutoCollectHeartbeat,this.enableAutoCollectRequests=s.enableAutoCollectRequests,this.enableAutoCollectDependencies=s.enableAutoCollectDependencies,this.enableAutoDependencyCorrelation=s.enableAutoDependencyCorrelation,this.enableAutoCollectIncomingRequestAzureFunctions=s.enableAutoCollectIncomingRequestAzureFunctions,this.enableUseAsyncHooks=s.enableUseAsyncHooks,this.enableUseDiskRetryCaching=s.enableUseDiskRetryCaching,this.enableResendInterval=s.enableResendInterval,this.enableMaxBytesOnDisk=s.enableMaxBytesOnDisk,this.enableInternalDebugLogging=s.enableInternalDebugLogging,this.enableInternalWarningLogging=s.enableInternalWarningLogging,this.enableSendLiveMetrics=s.enableSendLiveMetrics,this.quickPulseHost=s.quickPulseHost}catch(e){o.info("Missing or invalid JSON config file: ",e)}},e}();t.JsonConfig=l},12010:(e,t,n)=>{"use strict";var r=n(55052),i=function(){function e(){}return e.info=function(e){for(var t=[],n=1;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getResourceProvider=t.getOsPrefix=t.isFunctionApp=t.isWebApp=t.isLinux=t.isWindows=void 0,t.isWindows=function(){return"win32"===process.platform},t.isLinux=function(){return"linux"===process.platform},t.isWebApp=function(){return!!process.env.WEBSITE_SITE_NAME},t.isFunctionApp=function(){return!!process.env.FUNCTIONS_WORKER_RUNTIME},t.getOsPrefix=function(){return t.isWindows()?"w":t.isLinux()?"l":"u"},t.getResourceProvider=function(){return t.isWebApp()?"a":t.isFunctionApp()?"f":"u"}},56405:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0?t:null,InstrumentationKey:n.instrumentationKey||"",Metrics:e.length>0?e:null,InvariantVersion:1,Timestamp:"/Date("+Date.now()+")/",Version:r.tags[r.keys.internalSdkVersion],StreamId:l,MachineName:o,Instance:s,RoleName:a}},e.createQuickPulseMetric=function(e){return{Name:e.name,Value:e.value,Weight:e.count||1}},e.telemetryEnvelopeToQuickPulseDocument=function(t){switch(t.data.baseType){case o.TelemetryTypeString.Event:return e.createQuickPulseEventDocument(t);case o.TelemetryTypeString.Exception:return e.createQuickPulseExceptionDocument(t);case o.TelemetryTypeString.Trace:return e.createQuickPulseTraceDocument(t);case o.TelemetryTypeString.Dependency:return e.createQuickPulseDependencyDocument(t);case o.TelemetryTypeString.Request:return e.createQuickPulseRequestDocument(t)}return null},e.createQuickPulseEventDocument=function(t){var n=e.createQuickPulseDocument(t),i=t.data.baseData.name;return r(r({},n),{Name:i})},e.createQuickPulseTraceDocument=function(t){var n=e.createQuickPulseDocument(t),i=t.data.baseData.severityLevel||0;return r(r({},n),{Message:t.data.baseData.message,SeverityLevel:o.SeverityLevel[i]})},e.createQuickPulseExceptionDocument=function(t){var n=e.createQuickPulseDocument(t),i=t.data.baseData.exceptions,o="",s="",a="";return i&&i.length>0&&(i[0].parsedStack&&i[0].parsedStack.length>0?i[0].parsedStack.forEach((function(e){o+=e.assembly+"\n"})):i[0].stack&&i[0].stack.length>0&&(o=i[0].stack),s=i[0].message,a=i[0].typeName),r(r({},n),{Exception:o,ExceptionMessage:s,ExceptionType:a})},e.createQuickPulseRequestDocument=function(t){var n=e.createQuickPulseDocument(t),i=t.data.baseData;return r(r({},n),{Name:i.name,Success:i.success,Duration:i.duration,ResponseCode:i.responseCode,OperationName:i.name})},e.createQuickPulseDependencyDocument=function(t){var n=e.createQuickPulseDocument(t),i=t.data.baseData;return r(r({},n),{Name:i.name,Target:i.target,Success:i.success,Duration:i.duration,ResultCode:i.resultCode,CommandName:i.data,OperationName:n.OperationId,DependencyTypeName:i.type})},e.createQuickPulseDocument=function(t){var n,r;return t.data.baseType?(r=s.TelemetryTypeStringToQuickPulseType[t.data.baseType],n=s.TelemetryTypeStringToQuickPulseDocumentType[t.data.baseType]):c.warn("Document type invalid; not sending live metric document",t.data.baseType),{DocumentType:n,__type:r,OperationId:t.tags[e.keys.operationId],Version:"1.0",Properties:e.aggregateProperties(t)}},e.aggregateProperties=function(e){var t=[],n=e.data.baseData.measurements||{};for(var r in n)if(n.hasOwnProperty(r)){var i={key:r,value:n[r]};t.push(i)}var o=e.data.baseData.properties||{};for(var r in o)o.hasOwnProperty(r)&&(i={key:r,value:o[r]},t.push(i));return t},e.keys=new o.ContextTagKeys,e}();e.exports=u},53629:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,r=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?n:this._config.quickPulseHost,b.method="POST",b.path="/QuickPulseService.svc/"+f+"?ikey="+this._config.instrumentationKey,b.headers=((E={Expect:"100-continue"})["x-ms-qps-transmission-time"]=c.getTransmissionTime(),E["Content-Type"]="application/json",E["Content-Length"]=Buffer.byteLength(r),E),g=b,m&&m.length>0&&m.forEach((function(e){return g.headers[e.name]=e.value})),"post"!==f)return[3,4];if(!(y=this._getAuthorizationHandler?this._getAuthorizationHandler(this._config):null))return[3,4];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,y.addAuthorizationHeader(g)];case 2:return i.sent(),[3,4];case 3:return _=i.sent(),a.info(e.TAG,"Failed to get AAD bearer token for the Application. Error:",_),[2];case 4:return this._config.httpsAgent?g.agent=this._config.httpsAgent:g.agent=l.tlsRestrictedAgent,(v=o.request(g,(function(e){if(200==e.statusCode){var t="true"===e.headers["x-ms-qps-subscribed"],n=null;try{n=e.headers[d]?new u.URL(e.headers[d].toString()).host:null}catch(e){T._onError("Failed to parse redirect header from QuickPulse: "+l.dumpObj(e))}var r=e.headers[p]?parseInt(e.headers[p].toString()):null;T._consecutiveErrors=0,h(t,e,n,r)}else T._onError("StatusCode:"+e.statusCode+" StatusMessage:"+e.statusMessage),h()}))).on("error",(function(e){T._onError(e),h()})),v.write(r),v.end(),[2]}}))}))},e.prototype._onError=function(t){this._consecutiveErrors++;var n="Transient error connecting to the Live Metrics endpoint. This packet will not appear in your Live Metrics Stream. Error:";this._consecutiveErrors%e.MAX_QPS_FAILURES_BEFORE_WARN==0?(n="Live Metrics endpoint could not be reached "+this._consecutiveErrors+" consecutive times. Most recent error:",a.warn(e.TAG,n,t)):a.info(e.TAG,n,t)},e.TAG="QuickPulseSender",e.MAX_QPS_FAILURES_BEFORE_WARN=25,e}();e.exports=h},80639:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,r=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0?this._pollingIntervalHint:e.PING_INTERVAL,o=this._isCollectingData?e.POST_INTERVAL:r,this._isCollectingData&&Date.now()-this._lastSuccessTime>=e.MAX_POST_WAIT_TIME&&!this._lastSendSucceeded?(this._isCollectingData=!1,o=e.FALLBACK_INTERVAL):!this._isCollectingData&&Date.now()-this._lastSuccessTime>=e.MAX_PING_WAIT_TIME&&!this._lastSendSucceeded&&(o=e.FALLBACK_INTERVAL),this._lastSendSucceeded=null,this._handle=setTimeout(this._goQuickPulse.bind(this),o),this._handle.unref(),[2]}}))}))},e.prototype._ping=function(e){this._sender.ping(e,this._redirectedHost,this._quickPulseDone.bind(this))},e.prototype._post=function(e){return r(this,void 0,void 0,(function(){return i(this,(function(t){switch(t.label){case 0:return[4,this._sender.post(e,this._redirectedHost,this._quickPulseDone.bind(this))];case 1:return t.sent(),[2]}}))}))},e.prototype._quickPulseDone=function(e,t,n,r){null!=e?(this._isCollectingData!==e&&(o.info("Live Metrics sending data",e),this.enableCollectors(e)),this._isCollectingData=e,n&&n.length>0&&(this._redirectedHost=n,o.info("Redirecting endpoint to: ",n)),r&&r>0&&(this._pollingIntervalHint=r),t&&t.statusCode<300&&t.statusCode>=200?(this._lastSuccessTime=Date.now(),this._lastSendSucceeded=!0):this._lastSendSucceeded=!1):this._lastSendSucceeded=!1},e.MAX_POST_WAIT_TIME=2e4,e.MAX_PING_WAIT_TIME=6e4,e.FALLBACK_INTERVAL=6e4,e.PING_INTERVAL=5e3,e.POST_INTERVAL=1e3,e}();e.exports=u},68982:e=>{"use strict";e.exports={getTransmissionTime:function(){return 1e4*(Date.now()+621355968e5)}}},76357:e=>{"use strict";e.exports={requestContextHeader:"request-context",requestContextSourceKey:"appId",requestContextTargetKey:"appId",requestIdHeader:"request-id",parentIdHeader:"x-ms-request-id",rootIdHeader:"x-ms-request-root-id",correlationContextHeader:"correlation-context",traceparentHeader:"traceparent",traceStateHeader:"tracestate"}},90589:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,r,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return s.label++,{value:o[1],done:!1};case 5:s.label++,r=o[1],o=[0];continue;case 7:o=s.ops.pop(),s.trys.pop();continue;default:if(!((i=(i=s.trys).length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]=0&&(this._resendInterval=Math.floor(n)),"number"==typeof r&&r>=0&&(this._maxBytesOnDisk=Math.floor(r)),t&&!m.FileAccessControl.OS_PROVIDES_FILE_PROTECTION&&(this._enableDiskRetryMode=!1,this._logWarn("Ignoring request to enable disk retry mode. Sufficient file protection capabilities were not detected.")),this._enableDiskRetryMode?(this._statsbeat&&this._statsbeat.addFeature(l.StatsbeatFeature.DISK_RETRY),this._fileCleanupTimer||(this._fileCleanupTimer=setTimeout((function(){i._fileCleanupTask()}),e.CLEANUP_TIMEOUT),this._fileCleanupTimer.unref())):(this._statsbeat&&this._statsbeat.removeFeature(l.StatsbeatFeature.DISK_RETRY),this._fileCleanupTimer&&clearTimeout(this._fileCleanupTimer))},e.prototype.send=function(t,n){return r(this,void 0,void 0,(function(){var r,o,s,a,p,f,m,y,_=this;return i(this,(function(i){switch(i.label){case 0:if(!t)return[3,5];if(r=this._redirectedHost||this._config.endpointUrl,o=new h.URL(r).hostname,s={method:"POST",withCredentials:!1,headers:{"Content-Type":"application/x-json-stream"}},!(a=this._getAuthorizationHandler?this._getAuthorizationHandler(this._config):null))return[3,4];this._statsbeat&&this._statsbeat.addFeature(l.StatsbeatFeature.AAD_HANDLING),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,a.addAuthorizationHeader(s)];case 2:return i.sent(),[3,4];case 3:return p=i.sent(),f="Failed to get AAD bearer token for the Application.",this._enableDiskRetryMode&&(f+="This batch of telemetry items will be retried. ",this._storeToDisk(t)),f+="Error:"+p.toString(),this._logWarn(f),"function"==typeof n&&n(f),[2];case 4:m="",t.forEach((function(e){var t=d.stringify(e);"string"==typeof t&&(m+=t+"\n")})),m.length>0&&(m=m.substring(0,m.length-1)),y=Buffer.from?Buffer.from(m):new Buffer(m),c.gzip(y,(function(i,a){var c=a;i?(_._logWarn(d.dumpObj(i)),c=y,s.headers["Content-Length"]=y.length.toString()):(s.headers["Content-Encoding"]="gzip",s.headers["Content-Length"]=a.length.toString()),_._logInfo(d.dumpObj(s)),s[u.disableCollectionRequestOption]=!0;var p=+new Date,h=d.makeRequest(_._config,r,s,(function(e){e.setEncoding("utf-8");var r="";e.on("data",(function(e){r+=e})),e.on("end",(function(){var i=+new Date-p;if(_._numConsecutiveFailures=0,_._isStatsbeatSender&&!_._statsbeatHasReachedIngestionAtLeastOnce&&(g.includes(e.statusCode)?_._statsbeatHasReachedIngestionAtLeastOnce=!0:_._statsbeatFailedToIngest()),_._statsbeat&&(402==e.statusCode||439==e.statusCode?_._statsbeat.countThrottle(l.StatsbeatNetworkCategory.Breeze,o,e.statusCode):_._statsbeat.countRequest(l.StatsbeatNetworkCategory.Breeze,o,i,200===e.statusCode,e.statusCode)),_._enableDiskRetryMode)if(200===e.statusCode)_._resendTimer||(_._resendTimer=setTimeout((function(){_._resendTimer=null,_._sendFirstFileOnDisk()}),_._resendInterval),_._resendTimer.unref());else if(_._isRetriable(e.statusCode))try{_._statsbeat&&_._statsbeat.countRetry(l.StatsbeatNetworkCategory.Breeze,o,e.statusCode);var s=JSON.parse(r),a=[];s.errors&&(s.errors.forEach((function(e){429!=e.statusCode&&500!=e.statusCode&&503!=e.statusCode||a.push(t[e.index])})),a.length>0&&_._storeToDisk(a))}catch(e){_._storeToDisk(t)}if(307===e.statusCode||308===e.statusCode)if(_._numConsecutiveRedirects++,_._numConsecutiveRedirects<10){var c=e.headers.location?e.headers.location.toString():null;c&&(_._redirectedHost=c,_.send(t,n))}else _._statsbeat&&_._statsbeat.countException(l.StatsbeatNetworkCategory.Breeze,o,{name:"Circular Redirect",message:"Error sending telemetry because of circular redirects."}),"function"==typeof n&&n("Error sending telemetry because of circular redirects.");else _._numConsecutiveRedirects=0,"function"==typeof n&&n(r),_._logInfo(r),"function"==typeof _._onSuccess&&_._onSuccess(r)}))}));h.setTimeout(e.HTTP_TIMEOUT,(function(){_._requestTimedOut=!0,h.abort()})),h.on("error",(function(r){if(_._isStatsbeatSender&&!_._statsbeatHasReachedIngestionAtLeastOnce&&_._statsbeatFailedToIngest(),_._numConsecutiveFailures++,_._statsbeat&&_._statsbeat.countException(l.StatsbeatNetworkCategory.Breeze,o,r),!_._enableDiskRetryMode||_._numConsecutiveFailures>0&&_._numConsecutiveFailures%e.MAX_CONNECTION_FAILURES_BEFORE_WARN==0){var i="Ingestion endpoint could not be reached. This batch of telemetry items has been lost. Use Disk Retry Caching to enable resending of failed telemetry. Error:";_._enableDiskRetryMode&&(i="Ingestion endpoint could not be reached "+_._numConsecutiveFailures+" consecutive times. There may be resulting telemetry loss. Most recent error:"),_._logWarn(i,d.dumpObj(r))}else i="Transient failure to reach ingestion endpoint. This batch of telemetry items will be retried. Error:",_._logInfo(i,d.dumpObj(r));_._onErrorHelper(r),"function"==typeof n&&(r?(_._requestTimedOut&&(r.name="telemetry timeout",r.message="telemetry request timed out"),n(d.dumpObj(r))):n("Error sending telemetry")),_._enableDiskRetryMode&&_._storeToDisk(t)})),h.write(c),h.end()})),i.label=5;case 5:return[2]}}))}))},e.prototype.saveOnCrash=function(e){this._enableDiskRetryMode&&this._storeToDiskSync(d.stringify(e))},e.prototype._isRetriable=function(e){return 206===e||401===e||403===e||408===e||429===e||500===e||502===e||503===e||504===e},e.prototype._logInfo=function(t){for(var n=[],r=1;r=3&&this._shutdownStatsbeat())},e.prototype._storeToDisk=function(e){return r(this,void 0,void 0,(function(){var t,n,r,o,s,c,l;return i(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),this._logInfo("Checking existence of data storage directory: "+this._tempDir),[4,p.confirmDirExists(this._tempDir)];case 1:return i.sent(),[3,3];case 2:return t=i.sent(),this._logWarn("Failed to create folder to put telemetry: "+d.dumpObj(t)),this._onErrorHelper(t),[2];case 3:return i.trys.push([3,5,,6]),[4,m.FileAccessControl.applyACLRules(this._tempDir)];case 4:return i.sent(),[3,6];case 5:return n=i.sent(),this._logWarn("Failed to apply file access control to folder: "+d.dumpObj(n)),this._onErrorHelper(n),[2];case 6:return i.trys.push([6,8,,9]),[4,p.getShallowDirectorySize(this._tempDir)];case 7:return(r=i.sent())>this._maxBytesOnDisk?(this._logWarn("Not saving data due to max size limit being met. Directory size in bytes is: "+r),[2]):[3,9];case 8:return o=i.sent(),this._logWarn("Failed to read directory for retriable telemetry: "+d.dumpObj(o)),this._onErrorHelper(o),[2];case 9:return i.trys.push([9,11,,12]),s=(new Date).getTime()+".ai.json",c=a.join(this._tempDir,s),this._logInfo("saving data to disk at: "+c),[4,p.writeFileAsync(c,d.stringify(e),{mode:384})];case 10:return i.sent(),[3,12];case 11:return l=i.sent(),this._logWarn("Failed to persist telemetry to disk: "+d.dumpObj(l)),this._onErrorHelper(l),[2];case 12:return[2]}}))}))},e.prototype._storeToDiskSync=function(e){try{this._logInfo("Checking existence of data storage directory: "+this._tempDir),o.existsSync(this._tempDir)||o.mkdirSync(this._tempDir),m.FileAccessControl.applyACLRulesSync(this._tempDir);var t=p.getShallowDirectorySizeSync(this._tempDir);if(t>this._maxBytesOnDisk)return void this._logInfo("Not saving data due to max size limit being met. Directory size in bytes is: "+t);var n=(new Date).getTime()+".ai.json",r=a.join(this._tempDir,n);this._logInfo("saving data before crash to disk at: "+r),o.writeFileSync(r,e,{mode:384})}catch(e){this._logWarn("Error while saving data to disk: "+d.dumpObj(e)),this._onErrorHelper(e)}},e.prototype._sendFirstFileOnDisk=function(){return r(this,void 0,void 0,(function(){var e,t,n,r,o,s;return i(this,(function(i){switch(i.label){case 0:return i.trys.push([0,6,,7]),[4,p.readdirAsync(this._tempDir)];case 1:return(e=(e=i.sent()).filter((function(e){return a.basename(e).indexOf(".ai.json")>-1}))).length>0?(t=e[0],n=a.join(this._tempDir,t),[4,p.readFileAsync(n)]):[3,5];case 2:return r=i.sent(),[4,p.unlinkAsync(n)];case 3:return i.sent(),o=JSON.parse(r.toString()),[4,this.send(o)];case 4:i.sent(),i.label=5;case 5:return[3,7];case 6:return s=i.sent(),this._onErrorHelper(s),[3,7];case 7:return[2]}}))}))},e.prototype._onErrorHelper=function(e){"function"==typeof this._onError&&this._onError(e)},e.prototype._fileCleanupTask=function(){return r(this,void 0,void 0,(function(){var t,n,r,o,s,c=this;return i(this,(function(i){switch(i.label){case 0:return i.trys.push([0,6,,7]),[4,p.readdirAsync(this._tempDir)];case 1:if(!((t=(t=i.sent()).filter((function(e){return a.basename(e).indexOf(".ai.json")>-1}))).length>0))return[3,5];n=0,i.label=2;case 2:return nr?(o=a.join(this._tempDir,t[n]),[4,p.unlinkAsync(o).catch((function(e){c._onErrorHelper(e)}))]):[3,4]):[3,5];case 3:i.sent(),i.label=4;case 4:return n++,[3,2];case 5:return[3,7];case 6:return"ENOENT"!=(s=i.sent()).code&&this._onErrorHelper(s),[3,7];case 7:return[2]}}))}))},e.TAG="Sender",e.WAIT_BETWEEN_RESEND=6e4,e.MAX_BYTES_ON_DISK=52428800,e.MAX_CONNECTION_FAILURES_BEFORE_WARN=5,e.CLEANUP_TIMEOUT=36e5,e.FILE_RETEMPTION_PERIOD=6048e5,e.TEMPDIR_PREFIX="appInsights-node",e.HTTP_TIMEOUT=2e4,e}();e.exports=y},54814:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isContentTypeHeaderHtml=t.insertSnippetByIndex=t.getContentEncodingFromHeaders=t.isSupportedContentEncoding=t.findBufferEncodingType=t.isBufferType=t.getBrotliDecompressSync=t.getBrotliDecompressAsync=t.getBrotliCompressSync=t.getBrotliCompressAsync=t.inflateAsync=t.deflateAsync=t.gunzipAsync=t.gzipAsync=t.isBrotliSupperted=t.bufferEncodingTypes=t.contentEncodingMethod=void 0;var r,i=n(59796),o=n(73837);!function(e){e.GZIP="gzip",e.DEFLATE="deflate",e.BR="br"}(r=t.contentEncodingMethod||(t.contentEncodingMethod={})),t.bufferEncodingTypes=["utf8","utf16le","latin1","base64","hex","ascii","binary","ucs2"],t.isBrotliSupperted=function(){var e=process.versions.node.split(".")[0];return parseInt(e)>=10},t.gzipAsync=o.promisify(i.gzip),t.gunzipAsync=o.promisify(i.gunzip),t.deflateAsync=o.promisify(i.deflate),t.inflateAsync=o.promisify(i.inflate),t.getBrotliCompressAsync=function(e){return t.isBrotliSupperted()&&"function"==typeof e.brotliCompress?o.promisify(e.brotliCompress):null},t.getBrotliCompressSync=function(e){return t.isBrotliSupperted()&&"function"==typeof e.brotliCompressSync?e.brotliCompressSync:null},t.getBrotliDecompressAsync=function(e){return t.isBrotliSupperted()&&"function"==typeof e.brotliDecompress?o.promisify(e.brotliDecompress):null},t.getBrotliDecompressSync=function(e){return t.isBrotliSupperted()&&"function"==typeof e.brotliDecompressSync?e.brotliDecompressSync:null},t.isBufferType=function(e,t){var n=t||"utf8",r=!1;return Buffer.isEncoding(n)&&(r=Buffer.from(e.toString(n),n).toJSON().data.toString()===e.toJSON().data.toString()),r},t.findBufferEncodingType=function(e){var n=null;for(var r in t.bufferEncodingTypes){var i=t.bufferEncodingTypes[r];if(Buffer.isEncoding(i)&&t.isBufferType(e,i)){n=i;break}}return n},t.isSupportedContentEncoding=function(e){var t=null;switch(e){case"gzip":t=r.GZIP;break;case"br":t=r.BR;break;case"deflate":t=r.DEFLATE}return t},t.getContentEncodingFromHeaders=function(e){var n=[],r=e.getHeader("Content-Encoding");if(!r)return null;if("string"==typeof r){var i=t.isSupportedContentEncoding(r);i&&n.push(i)}return n},t.insertSnippetByIndex=function(e,t,n){return e<0?null:t.substring(0,e)+'\" + subEnd;\r\n return newHtml;\r\n};\r\nexports.insertSnippetByIndex = insertSnippetByIndex;\r\nvar isContentTypeHeaderHtml = function (response) {\r\n var isHtml = false;\r\n var contentType = response.getHeader(\"Content-Type\");\r\n if (contentType) {\r\n if (typeof contentType === \"string\") {\r\n isHtml = contentType.indexOf(\"html\") >= 0;\r\n }\r\n else {\r\n isHtml = contentType.toString().indexOf(\"html\") >= 0;\r\n }\r\n }\r\n return isHtml;\r\n};\r\nexports.isContentTypeHeaderHtml = isContentTypeHeaderHtml;\r\n//# sourceMappingURL=SnippetInjectionHelper.js.map","\"use strict\";\r\nvar url = require(\"url\");\r\nvar Config = require(\"./Config\");\r\nvar AuthorizationHandler = require(\"./AuthorizationHandler\");\r\nvar Context = require(\"./Context\");\r\nvar Contracts = require(\"../Declarations/Contracts\");\r\nvar Channel = require(\"./Channel\");\r\nvar TelemetryProcessors = require(\"../TelemetryProcessors\");\r\nvar CorrelationContextManager_1 = require(\"../AutoCollection/CorrelationContextManager\");\r\nvar Statsbeat = require(\"../AutoCollection/Statsbeat\");\r\nvar Sender = require(\"./Sender\");\r\nvar Util = require(\"./Util\");\r\nvar Logging = require(\"./Logging\");\r\nvar EnvelopeFactory = require(\"./EnvelopeFactory\");\r\n/**\r\n * Application Insights telemetry client provides interface to track telemetry items, register telemetry initializers and\r\n * and manually trigger immediate sending (flushing)\r\n */\r\nvar TelemetryClient = /** @class */ (function () {\r\n /**\r\n * Constructs a new client of the client\r\n * @param setupString the Connection String or Instrumentation Key to use (read from environment variable if not specified)\r\n */\r\n function TelemetryClient(setupString) {\r\n this._telemetryProcessors = [];\r\n var config = new Config(setupString);\r\n this.config = config;\r\n if (!this.config.instrumentationKey || this.config.instrumentationKey == \"\") {\r\n throw new Error(\"Instrumentation key not found, please provide a connection string before starting Application Insights SDK.\");\r\n }\r\n this.context = new Context();\r\n this.commonProperties = {};\r\n this.authorizationHandler = null;\r\n if (!this.config.disableStatsbeat) {\r\n this._statsbeat = new Statsbeat(this.config, this.context);\r\n this._statsbeat.enable(true);\r\n }\r\n var sender = new Sender(this.config, this.getAuthorizationHandler, null, null, this._statsbeat);\r\n this.channel = new Channel(function () { return config.disableAppInsights; }, function () { return config.maxBatchSize; }, function () { return config.maxBatchIntervalMs; }, sender);\r\n }\r\n /**\r\n * Log information about availability of an application\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n TelemetryClient.prototype.trackAvailability = function (telemetry) {\r\n this.track(telemetry, Contracts.TelemetryType.Availability);\r\n };\r\n /**\r\n * Log a page view\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n TelemetryClient.prototype.trackPageView = function (telemetry) {\r\n this.track(telemetry, Contracts.TelemetryType.PageView);\r\n };\r\n /**\r\n * Log a trace message\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n TelemetryClient.prototype.trackTrace = function (telemetry) {\r\n this.track(telemetry, Contracts.TelemetryType.Trace);\r\n };\r\n /**\r\n * Log a numeric value that is not associated with a specific event. Typically used to send regular reports of performance indicators.\r\n * To send a single measurement, use just the first two parameters. If you take measurements very frequently, you can reduce the\r\n * telemetry bandwidth by aggregating multiple measurements and sending the resulting average at intervals.\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n TelemetryClient.prototype.trackMetric = function (telemetry) {\r\n this.track(telemetry, Contracts.TelemetryType.Metric);\r\n };\r\n /**\r\n * Log an exception\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n TelemetryClient.prototype.trackException = function (telemetry) {\r\n if (telemetry && telemetry.exception && !Util.isError(telemetry.exception)) {\r\n telemetry.exception = new Error(telemetry.exception.toString());\r\n }\r\n this.track(telemetry, Contracts.TelemetryType.Exception);\r\n };\r\n /**\r\n * Log a user action or other occurrence.\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n TelemetryClient.prototype.trackEvent = function (telemetry) {\r\n this.track(telemetry, Contracts.TelemetryType.Event);\r\n };\r\n /**\r\n * Log a request. Note that the default client will attempt to collect HTTP requests automatically so only use this for requests\r\n * that aren't automatically captured or if you've disabled automatic request collection.\r\n *\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n TelemetryClient.prototype.trackRequest = function (telemetry) {\r\n this.track(telemetry, Contracts.TelemetryType.Request);\r\n };\r\n /**\r\n * Log a dependency. Note that the default client will attempt to collect dependencies automatically so only use this for dependencies\r\n * that aren't automatically captured or if you've disabled automatic dependency collection.\r\n *\r\n * @param telemetry Object encapsulating tracking option\r\n * */\r\n TelemetryClient.prototype.trackDependency = function (telemetry) {\r\n if (telemetry && !telemetry.target && telemetry.data) {\r\n // url.parse().host returns null for non-urls,\r\n // making this essentially a no-op in those cases\r\n // If this logic is moved, update jsdoc in DependencyTelemetry.target\r\n // url.parse() is deprecated, update to use WHATWG URL API instead\r\n try {\r\n telemetry.target = new url.URL(telemetry.data).host;\r\n }\r\n catch (error) {\r\n // set target as null to be compliant with previous behavior\r\n telemetry.target = null;\r\n Logging.warn(TelemetryClient.TAG, \"The URL object is failed to create.\", error);\r\n }\r\n }\r\n this.track(telemetry, Contracts.TelemetryType.Dependency);\r\n };\r\n /**\r\n * Immediately send all queued telemetry.\r\n * @param options Flush options, including indicator whether app is crashing and callback\r\n */\r\n TelemetryClient.prototype.flush = function (options) {\r\n this.channel.triggerSend(options ? !!options.isAppCrashing : false, options ? options.callback : undefined);\r\n };\r\n /**\r\n * Generic track method for all telemetry types\r\n * @param data the telemetry to send\r\n * @param telemetryType specify the type of telemetry you are tracking from the list of Contracts.DataTypes\r\n */\r\n TelemetryClient.prototype.track = function (telemetry, telemetryType) {\r\n if (telemetry && Contracts.telemetryTypeToBaseType(telemetryType)) {\r\n var envelope = EnvelopeFactory.createEnvelope(telemetry, telemetryType, this.commonProperties, this.context, this.config);\r\n // Set time on the envelope if it was set on the telemetry item\r\n if (telemetry.time) {\r\n envelope.time = telemetry.time.toISOString();\r\n }\r\n var accepted = this.runTelemetryProcessors(envelope, telemetry.contextObjects);\r\n // Ideally we would have a central place for \"internal\" telemetry processors and users can configure which ones are in use.\r\n // This will do for now. Otherwise clearTelemetryProcessors() would be problematic.\r\n accepted = accepted && TelemetryProcessors.samplingTelemetryProcessor(envelope, { correlationContext: CorrelationContextManager_1.CorrelationContextManager.getCurrentContext() });\r\n TelemetryProcessors.preAggregatedMetricsTelemetryProcessor(envelope, this.context);\r\n if (accepted) {\r\n TelemetryProcessors.performanceMetricsTelemetryProcessor(envelope, this.quickPulseClient);\r\n this.channel.send(envelope);\r\n }\r\n }\r\n else {\r\n Logging.warn(TelemetryClient.TAG, \"track() requires telemetry object and telemetryType to be specified.\");\r\n }\r\n };\r\n /**\r\n * @deprecated The method should not be called, Azure Properties will be added always when available\r\n * Automatically populate telemetry properties like RoleName when running in Azure\r\n *\r\n * @param value if true properties will be populated\r\n */\r\n TelemetryClient.prototype.setAutoPopulateAzureProperties = function (value) {\r\n // NO-OP\r\n };\r\n /**\r\n * Get Authorization handler\r\n */\r\n TelemetryClient.prototype.getAuthorizationHandler = function (config) {\r\n if (config && config.aadTokenCredential) {\r\n if (!this.authorizationHandler) {\r\n Logging.info(TelemetryClient.TAG, \"Adding authorization handler\");\r\n this.authorizationHandler = new AuthorizationHandler(config.aadTokenCredential);\r\n }\r\n return this.authorizationHandler;\r\n }\r\n return null;\r\n };\r\n /**\r\n * Adds telemetry processor to the collection. Telemetry processors will be called one by one\r\n * before telemetry item is pushed for sending and in the order they were added.\r\n *\r\n * @param telemetryProcessor function, takes Envelope, and optional context object and returns boolean\r\n */\r\n TelemetryClient.prototype.addTelemetryProcessor = function (telemetryProcessor) {\r\n this._telemetryProcessors.push(telemetryProcessor);\r\n };\r\n /*\r\n * Removes all telemetry processors\r\n */\r\n TelemetryClient.prototype.clearTelemetryProcessors = function () {\r\n this._telemetryProcessors = [];\r\n };\r\n TelemetryClient.prototype.runTelemetryProcessors = function (envelope, contextObjects) {\r\n var accepted = true;\r\n var telemetryProcessorsCount = this._telemetryProcessors.length;\r\n if (telemetryProcessorsCount === 0) {\r\n return accepted;\r\n }\r\n contextObjects = contextObjects || {};\r\n contextObjects[\"correlationContext\"] = CorrelationContextManager_1.CorrelationContextManager.getCurrentContext();\r\n for (var i = 0; i < telemetryProcessorsCount; ++i) {\r\n try {\r\n var processor = this._telemetryProcessors[i];\r\n if (processor) {\r\n if (processor.apply(null, [envelope, contextObjects]) === false) {\r\n accepted = false;\r\n break;\r\n }\r\n }\r\n }\r\n catch (error) {\r\n accepted = true;\r\n Logging.warn(TelemetryClient.TAG, \"One of telemetry processors failed, telemetry item will be sent.\", error, envelope);\r\n }\r\n }\r\n // Sanitize tags and properties after running telemetry processors\r\n if (accepted) {\r\n if (envelope && envelope.tags) {\r\n envelope.tags = Util.validateStringMap(envelope.tags);\r\n }\r\n if (envelope && envelope.data && envelope.data.baseData && envelope.data.baseData.properties) {\r\n envelope.data.baseData.properties = Util.validateStringMap(envelope.data.baseData.properties);\r\n }\r\n }\r\n return accepted;\r\n };\r\n /*\r\n * Get Statsbeat instance\r\n */\r\n TelemetryClient.prototype.getStatsbeat = function () {\r\n return this._statsbeat;\r\n };\r\n TelemetryClient.TAG = \"TelemetryClient\";\r\n return TelemetryClient;\r\n}());\r\nmodule.exports = TelemetryClient;\r\n//# sourceMappingURL=TelemetryClient.js.map","\"use strict\";\r\nvar Util = require(\"./Util\");\r\nvar CorrelationIdManager = require(\"./CorrelationIdManager\");\r\n/**\r\n * Helper class to manage parsing and validation of traceparent header. Also handles hierarchical\r\n * back-compatibility headers generated from traceparent. W3C traceparent spec is documented at\r\n * https://www.w3.org/TR/trace-context/#traceparent-field\r\n */\r\nvar Traceparent = /** @class */ (function () {\r\n function Traceparent(traceparent, parentId) {\r\n this.traceFlag = Traceparent.DEFAULT_TRACE_FLAG;\r\n this.version = Traceparent.DEFAULT_VERSION;\r\n if (traceparent && typeof traceparent === \"string\") { // traceparent constructor\r\n // If incoming request contains traceparent: parse it, set operation, parent and telemetry id accordingly. traceparent should be injected into outgoing requests. request-id should be injected in back-compat format |traceId.spanId. so that older SDKs could understand it.\r\n if (traceparent.split(\",\").length > 1) { // If more than 1 traceparent is present, discard both\r\n this.traceId = Util.w3cTraceId();\r\n this.spanId = Util.w3cTraceId().substr(0, 16);\r\n }\r\n else {\r\n var traceparentArr = traceparent.trim().split(\"-\");\r\n var len = traceparentArr.length;\r\n if (len >= 4) { // traceparent must contain at least 4 fields\r\n this.version = traceparentArr[0];\r\n this.traceId = traceparentArr[1];\r\n this.spanId = traceparentArr[2];\r\n this.traceFlag = traceparentArr[3];\r\n }\r\n else { // Discard traceparent if a field is missing\r\n this.traceId = Util.w3cTraceId();\r\n this.spanId = Util.w3cTraceId().substr(0, 16);\r\n }\r\n // Version validation\r\n if (!this.version.match(/^[0-9a-f]{2}$/g)) {\r\n this.version = Traceparent.DEFAULT_VERSION;\r\n this.traceId = Util.w3cTraceId();\r\n }\r\n if (this.version === \"00\" && len !== 4) { // 0x00 (and perhaps future versions) require exactly 4 fields. This strict check will need to be updated on each spec release\r\n this.traceId = Util.w3cTraceId();\r\n this.spanId = Util.w3cTraceId().substr(0, 16);\r\n }\r\n if (this.version === \"ff\") { // 0xff is forbidden, generate new traceparent\r\n this.version = Traceparent.DEFAULT_VERSION;\r\n this.traceId = Util.w3cTraceId();\r\n this.spanId = Util.w3cTraceId().substr(0, 16);\r\n }\r\n if (!this.version.match(/^0[0-9a-f]$/g)) {\r\n this.version = Traceparent.DEFAULT_VERSION;\r\n }\r\n // TraceFlag validation\r\n if (!this.traceFlag.match(/^[0-9a-f]{2}$/g)) {\r\n this.traceFlag = Traceparent.DEFAULT_TRACE_FLAG;\r\n this.traceId = Util.w3cTraceId();\r\n }\r\n // Validate TraceId, regenerate new traceid if invalid\r\n if (!Traceparent.isValidTraceId(this.traceId)) {\r\n this.traceId = Util.w3cTraceId();\r\n }\r\n // Validate Span Id, discard entire traceparent if invalid\r\n if (!Traceparent.isValidSpanId(this.spanId)) {\r\n this.spanId = Util.w3cTraceId().substr(0, 16);\r\n this.traceId = Util.w3cTraceId();\r\n }\r\n // Save backCompat parentId\r\n this.parentId = this.getBackCompatRequestId();\r\n }\r\n }\r\n else if (parentId) { // backcompat constructor\r\n // If incoming request contains only request-id, new traceid and spanid should be started, request-id value should be used as a parent. Root part of request-id should be stored in custom dimension on the request telemetry if root part is different from traceid. On the outgoing request side, request-id should be emitted in the |traceId.spanId. format.\r\n this.parentId = parentId.slice(); // copy\r\n var operationId = CorrelationIdManager.getRootId(parentId);\r\n if (!Traceparent.isValidTraceId(operationId)) {\r\n this.legacyRootId = operationId;\r\n operationId = Util.w3cTraceId();\r\n }\r\n if (parentId.indexOf(\"|\") !== -1) {\r\n parentId = parentId.substring(1 + parentId.substring(0, parentId.length - 1).lastIndexOf(\".\"), parentId.length - 1);\r\n }\r\n this.traceId = operationId;\r\n this.spanId = parentId;\r\n }\r\n else {\r\n // Fallback default constructor\r\n // if request does not contain any correlation headers, see case p2\r\n this.traceId = Util.w3cTraceId();\r\n this.spanId = Util.w3cTraceId().substr(0, 16);\r\n }\r\n }\r\n Traceparent.isValidTraceId = function (id) {\r\n return id.match(/^[0-9a-f]{32}$/) && id !== \"00000000000000000000000000000000\";\r\n };\r\n Traceparent.isValidSpanId = function (id) {\r\n return id.match(/^[0-9a-f]{16}$/) && id !== \"0000000000000000\";\r\n };\r\n Traceparent.formatOpenTelemetryTraceFlags = function (traceFlags) {\r\n var formattedFlags = (\"0\" + traceFlags.toString(16));\r\n return formattedFlags.substring(formattedFlags.length - 2);\r\n };\r\n Traceparent.prototype.getBackCompatRequestId = function () {\r\n return \"|\" + this.traceId + \".\" + this.spanId + \".\";\r\n };\r\n Traceparent.prototype.toString = function () {\r\n return this.version + \"-\" + this.traceId + \"-\" + this.spanId + \"-\" + this.traceFlag;\r\n };\r\n Traceparent.prototype.updateSpanId = function () {\r\n this.spanId = Util.w3cTraceId().substr(0, 16);\r\n };\r\n Traceparent.DEFAULT_TRACE_FLAG = \"01\";\r\n Traceparent.DEFAULT_VERSION = \"00\";\r\n return Traceparent;\r\n}());\r\nmodule.exports = Traceparent;\r\n//# sourceMappingURL=Traceparent.js.map","\"use strict\";\r\n/**\r\n * Helper class to manage parsing and strict-validation of tracestate header. W3C tracestate spec\r\n * is documented at https://www.w3.org/TR/trace-context/#header-value\r\n * @class Tracestate\r\n */\r\nvar Tracestate = /** @class */ (function () {\r\n // if true, performs strict tracestate header checking, else just passes it along\r\n function Tracestate(id) {\r\n this.fieldmap = [];\r\n if (!id) {\r\n return;\r\n }\r\n this.fieldmap = this.parseHeader(id);\r\n }\r\n Tracestate.prototype.toString = function () {\r\n var fieldarr = this.fieldmap;\r\n if (!fieldarr || fieldarr.length == 0) {\r\n return null;\r\n }\r\n return fieldarr.join(\", \");\r\n };\r\n Tracestate.validateKeyChars = function (key) {\r\n var keyParts = key.split(\"@\");\r\n if (keyParts.length == 2) {\r\n // Parse for tenant@vendor format\r\n var tenant = keyParts[0].trim();\r\n var vendor = keyParts[1].trim();\r\n var tenantValid = Boolean(tenant.match(/^[\\ ]?[a-z0-9\\*\\-\\_/]{1,241}$/));\r\n var vendorValid = Boolean(vendor.match(/^[\\ ]?[a-z0-9\\*\\-\\_/]{1,14}$/));\r\n return tenantValid && vendorValid;\r\n }\r\n else if (keyParts.length == 1) {\r\n // Parse for standard key format\r\n return Boolean(key.match(/^[\\ ]?[a-z0-9\\*\\-\\_/]{1,256}$/));\r\n }\r\n return false;\r\n };\r\n Tracestate.prototype.parseHeader = function (id) {\r\n var res = [];\r\n var keydeduper = {};\r\n var parts = id.split(\",\");\r\n if (parts.length > 32)\r\n return null;\r\n for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\r\n var rawPart = parts_1[_i];\r\n var part = rawPart.trim(); // trim out whitespace\r\n if (part.length === 0) {\r\n continue; // Discard empty pairs, but keep the rest of this tracestate\r\n }\r\n var pair = part.split(\"=\");\r\n // pair should contain exactly one \"=\"\r\n if (pair.length !== 2) {\r\n return null; // invalid pair: discard entire tracestate\r\n }\r\n // Validate length and charset of this key\r\n if (!Tracestate.validateKeyChars(pair[0])) {\r\n return null;\r\n }\r\n // Assert uniqueness of this key\r\n if (keydeduper[pair[0]]) {\r\n return null; // duplicate key: discard entire tracestate\r\n }\r\n else {\r\n keydeduper[pair[0]] = true;\r\n }\r\n // All checks passed -- add this part\r\n res.push(part);\r\n }\r\n return res;\r\n };\r\n Tracestate.strict = true;\r\n return Tracestate;\r\n}());\r\nmodule.exports = Tracestate;\r\n//# sourceMappingURL=Tracestate.js.map","\"use strict\";\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar http = require(\"http\");\r\nvar https = require(\"https\");\r\nvar url = require(\"url\");\r\nvar constants = require(\"constants\");\r\nvar Logging = require(\"./Logging\");\r\nvar RequestResponseHeaders = require(\"./RequestResponseHeaders\");\r\nvar JsonConfig_1 = require(\"./JsonConfig\");\r\nvar Util = /** @class */ (function () {\r\n function Util() {\r\n Util._addCloseHandler();\r\n }\r\n /**\r\n * helper method to access userId and sessionId cookie\r\n */\r\n Util.getCookie = function (name, cookie) {\r\n var value = \"\";\r\n if (name && name.length && typeof cookie === \"string\") {\r\n var cookieName = name + \"=\";\r\n var cookies = cookie.split(\";\");\r\n for (var i = 0; i < cookies.length; i++) {\r\n var cookie = cookies[i];\r\n cookie = Util.trim(cookie);\r\n if (cookie && cookie.indexOf(cookieName) === 0) {\r\n value = cookie.substring(cookieName.length, cookies[i].length);\r\n break;\r\n }\r\n }\r\n }\r\n return value;\r\n };\r\n /**\r\n * helper method to trim strings (IE8 does not implement String.prototype.trim)\r\n */\r\n Util.trim = function (str) {\r\n if (typeof str === \"string\") {\r\n return str.replace(/^\\s+|\\s+$/g, \"\");\r\n }\r\n else {\r\n return \"\";\r\n }\r\n };\r\n /**\r\n * Convert an array of int32 to Base64 (no '==' at the end).\r\n * MSB first.\r\n */\r\n Util.int32ArrayToBase64 = function (array) {\r\n var toChar = function (v, i) {\r\n return String.fromCharCode((v >> i) & 0xFF);\r\n };\r\n var int32AsString = function (v) {\r\n return toChar(v, 24) + toChar(v, 16) + toChar(v, 8) + toChar(v, 0);\r\n };\r\n var x = array.map(int32AsString).join(\"\");\r\n var b = Buffer.from ? Buffer.from(x, \"binary\") : new Buffer(x, \"binary\");\r\n var s = b.toString(\"base64\");\r\n return s.substr(0, s.indexOf(\"=\"));\r\n };\r\n /**\r\n * generate a random 32bit number (-0x80000000..0x7FFFFFFF).\r\n */\r\n Util.random32 = function () {\r\n return (0x100000000 * Math.random()) | 0;\r\n };\r\n /**\r\n * generate a random 32bit number (0x00000000..0xFFFFFFFF).\r\n */\r\n Util.randomu32 = function () {\r\n return Util.random32() + 0x80000000;\r\n };\r\n /**\r\n * generate W3C-compatible trace id\r\n * https://github.com/w3c/distributed-tracing/blob/master/trace_context/HTTP_HEADER_FORMAT.md#trace-id\r\n */\r\n Util.w3cTraceId = function () {\r\n var hexValues = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n // rfc4122 version 4 UUID without dashes and with lowercase letters\r\n var oct = \"\", tmp;\r\n for (var a = 0; a < 4; a++) {\r\n tmp = Util.random32();\r\n oct +=\r\n hexValues[tmp & 0xF] +\r\n hexValues[tmp >> 4 & 0xF] +\r\n hexValues[tmp >> 8 & 0xF] +\r\n hexValues[tmp >> 12 & 0xF] +\r\n hexValues[tmp >> 16 & 0xF] +\r\n hexValues[tmp >> 20 & 0xF] +\r\n hexValues[tmp >> 24 & 0xF] +\r\n hexValues[tmp >> 28 & 0xF];\r\n }\r\n // \"Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively\"\r\n var clockSequenceHi = hexValues[8 + (Math.random() * 4) | 0];\r\n return oct.substr(0, 8) + oct.substr(9, 4) + \"4\" + oct.substr(13, 3) + clockSequenceHi + oct.substr(16, 3) + oct.substr(19, 12);\r\n };\r\n Util.w3cSpanId = function () {\r\n return Util.w3cTraceId().substring(16);\r\n };\r\n Util.isValidW3CId = function (id) {\r\n return id.length === 32 && id !== \"00000000000000000000000000000000\";\r\n };\r\n /**\r\n * Check if an object is of type Array\r\n */\r\n Util.isArray = function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Array]\";\r\n };\r\n /**\r\n * Check if an object is of type Error\r\n */\r\n Util.isError = function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Error]\";\r\n };\r\n Util.isPrimitive = function (input) {\r\n var propType = typeof input;\r\n return propType === \"string\" || propType === \"number\" || propType === \"boolean\";\r\n };\r\n /**\r\n * Check if an object is of type Date\r\n */\r\n Util.isDate = function (obj) {\r\n return Object.prototype.toString.call(obj) === \"[object Date]\";\r\n };\r\n /**\r\n * Convert ms to c# time span format\r\n */\r\n Util.msToTimeSpan = function (totalms) {\r\n if (isNaN(totalms) || totalms < 0) {\r\n totalms = 0;\r\n }\r\n var sec = ((totalms / 1000) % 60).toFixed(7).replace(/0{0,4}$/, \"\");\r\n var min = \"\" + Math.floor(totalms / (1000 * 60)) % 60;\r\n var hour = \"\" + Math.floor(totalms / (1000 * 60 * 60)) % 24;\r\n var days = Math.floor(totalms / (1000 * 60 * 60 * 24));\r\n sec = sec.indexOf(\".\") < 2 ? \"0\" + sec : sec;\r\n min = min.length < 2 ? \"0\" + min : min;\r\n hour = hour.length < 2 ? \"0\" + hour : hour;\r\n var daysText = days > 0 ? days + \".\" : \"\";\r\n return daysText + hour + \":\" + min + \":\" + sec;\r\n };\r\n /**\r\n * Using JSON.stringify, by default Errors do not serialize to something useful:\r\n * Simplify a generic Node Error into a simpler map for customDimensions\r\n * Custom errors can still implement toJSON to override this functionality\r\n */\r\n Util.extractError = function (err) {\r\n // Error is often subclassed so may have code OR id properties:\r\n // https://nodejs.org/api/errors.html#errors_error_code\r\n var looseError = err;\r\n return {\r\n message: err.message,\r\n code: looseError.code || looseError.id || \"\"\r\n };\r\n };\r\n /**\r\n * Manually call toJSON if available to pre-convert the value.\r\n * If a primitive is returned, then the consumer of this function can skip JSON.stringify.\r\n * This avoids double escaping of quotes for Date objects, for example.\r\n */\r\n Util.extractObject = function (origProperty) {\r\n if (origProperty instanceof Error) {\r\n return Util.extractError(origProperty);\r\n }\r\n if (typeof origProperty.toJSON === \"function\") {\r\n return origProperty.toJSON();\r\n }\r\n return origProperty;\r\n };\r\n /**\r\n * Validate that an object is of type { [key: string]: string }\r\n */\r\n Util.validateStringMap = function (obj) {\r\n if (typeof obj !== \"object\") {\r\n Logging.info(\"Invalid properties dropped from payload\");\r\n return;\r\n }\r\n var map = {};\r\n for (var field in obj) {\r\n var property = \"\";\r\n var origProperty = obj[field];\r\n var propType = typeof origProperty;\r\n if (Util.isPrimitive(origProperty)) {\r\n property = origProperty.toString();\r\n }\r\n else if (origProperty === null || propType === \"undefined\") {\r\n property = \"\";\r\n }\r\n else if (propType === \"function\") {\r\n Logging.info(\"key: \" + field + \" was function; will not serialize\");\r\n continue;\r\n }\r\n else {\r\n var stringTarget = Util.isArray(origProperty) ? origProperty : Util.extractObject(origProperty);\r\n try {\r\n if (Util.isPrimitive(stringTarget)) {\r\n property = stringTarget;\r\n }\r\n else {\r\n property = JSON.stringify(stringTarget);\r\n }\r\n }\r\n catch (e) {\r\n property = origProperty.constructor.name.toString() + \" (Error: \" + e.message + \")\";\r\n Logging.info(\"key: \" + field + \", could not be serialized\");\r\n }\r\n }\r\n map[field] = property.substring(0, Util.MAX_PROPERTY_LENGTH);\r\n }\r\n return map;\r\n };\r\n /**\r\n * Checks if a request url is not on a excluded domain list\r\n * and if it is safe to add correlation headers\r\n */\r\n Util.canIncludeCorrelationHeader = function (client, requestUrl) {\r\n var excludedDomains = client && client.config && client.config.correlationHeaderExcludedDomains;\r\n if (!excludedDomains || excludedDomains.length == 0 || !requestUrl) {\r\n return true;\r\n }\r\n for (var i = 0; i < excludedDomains.length; i++) {\r\n var regex = new RegExp(excludedDomains[i].replace(/\\./g, \"\\.\").replace(/\\*/g, \".*\"));\r\n try {\r\n if (regex.test(new url.URL(requestUrl).hostname)) {\r\n return false;\r\n }\r\n }\r\n catch (ex) {\r\n // Ignore errors\r\n }\r\n }\r\n return true;\r\n };\r\n Util.getCorrelationContextTarget = function (response, key) {\r\n var contextHeaders = response.headers && response.headers[RequestResponseHeaders.requestContextHeader];\r\n if (contextHeaders) {\r\n var keyValues = contextHeaders.split(\",\");\r\n for (var i = 0; i < keyValues.length; ++i) {\r\n var keyValue = keyValues[i].split(\"=\");\r\n if (keyValue.length == 2 && keyValue[0] == key) {\r\n return keyValue[1];\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Generate request\r\n *\r\n * Proxify the request creation to handle proxy http\r\n *\r\n * @param {string} requestUrl url endpoint\r\n * @param {Object} requestOptions Request option\r\n * @param {Function} requestCallback callback on request\r\n * @param {boolean} useProxy Use proxy URL from config\r\n * @param {boolean} useAgent Set Http Agent in request\r\n * @returns {http.ClientRequest} request object\r\n */\r\n Util.makeRequest = function (config, requestUrl, requestOptions, requestCallback, useProxy, useAgent) {\r\n if (useProxy === void 0) { useProxy = true; }\r\n if (useAgent === void 0) { useAgent = true; }\r\n if (requestUrl && requestUrl.indexOf(\"//\") === 0) {\r\n requestUrl = \"https:\" + requestUrl;\r\n }\r\n var requestUrlParsed = new url.URL(requestUrl);\r\n var options = __assign(__assign({}, requestOptions), { host: requestUrlParsed.hostname, port: requestUrlParsed.port, path: requestUrlParsed.pathname });\r\n var proxyUrl = undefined;\r\n if (useProxy) {\r\n if (requestUrlParsed.protocol === \"https:\") {\r\n proxyUrl = config.proxyHttpsUrl || undefined;\r\n }\r\n if (requestUrlParsed.protocol === \"http:\") {\r\n proxyUrl = config.proxyHttpUrl || undefined;\r\n }\r\n if (proxyUrl) {\r\n if (proxyUrl.indexOf(\"//\") === 0) {\r\n proxyUrl = \"http:\" + proxyUrl;\r\n }\r\n try {\r\n var proxyUrlParsed = new url.URL(proxyUrl);\r\n // https is not supported at the moment\r\n if (proxyUrlParsed.protocol === \"https:\") {\r\n Logging.info(\"Proxies that use HTTPS are not supported\");\r\n proxyUrl = undefined;\r\n }\r\n else {\r\n options = __assign(__assign({}, options), { host: proxyUrlParsed.hostname, port: proxyUrlParsed.port || \"80\", path: requestUrl, headers: __assign(__assign({}, options.headers), { Host: requestUrlParsed.hostname }) });\r\n }\r\n }\r\n catch (err) {\r\n Logging.warn(\"Wrong proxy URL provided\");\r\n }\r\n }\r\n }\r\n var isHttps = requestUrlParsed.protocol === \"https:\" && !proxyUrl;\r\n if (useAgent) {\r\n if (isHttps && config.httpsAgent !== undefined) {\r\n options.agent = config.httpsAgent;\r\n }\r\n else if (!isHttps && config.httpAgent !== undefined) {\r\n options.agent = config.httpAgent;\r\n }\r\n else if (isHttps) {\r\n // HTTPS without a passed in agent. Use one that enforces our TLS rules\r\n options.agent = Util._useKeepAlive ? Util.keepAliveAgent : Util.tlsRestrictedAgent;\r\n }\r\n }\r\n if (isHttps) {\r\n return https.request(options, requestCallback);\r\n }\r\n else {\r\n return http.request(options, requestCallback);\r\n }\r\n };\r\n /**\r\n * Parse standard request-context header\r\n */\r\n Util.safeIncludeCorrelationHeader = function (client, request, correlationHeader) {\r\n var header; // attempt to cast correlationHeader to string\r\n if (typeof correlationHeader === \"string\") {\r\n header = correlationHeader;\r\n }\r\n else if (correlationHeader instanceof Array) { // string[]\r\n header = correlationHeader.join(\",\");\r\n }\r\n else if (correlationHeader && typeof correlationHeader.toString === \"function\") {\r\n // best effort attempt: requires well-defined toString\r\n try {\r\n header = correlationHeader.toString();\r\n }\r\n catch (err) {\r\n Logging.warn(\"Outgoing request-context header could not be read. Correlation of requests may be lost.\", err, correlationHeader);\r\n }\r\n }\r\n if (header) {\r\n Util.addCorrelationIdHeaderFromString(client, request, header);\r\n }\r\n else {\r\n request.setHeader(RequestResponseHeaders.requestContextHeader, RequestResponseHeaders.requestContextSourceKey + \"=\" + client.config.correlationId);\r\n }\r\n };\r\n /**\r\n * Returns string representation of an object suitable for diagnostics logging.\r\n */\r\n Util.dumpObj = function (object) {\r\n if (object) {\r\n try {\r\n var objectTypeDump = Object[\"prototype\"].toString.call(object);\r\n var propertyValueDump = \"\";\r\n if (objectTypeDump === \"[object Error]\") {\r\n propertyValueDump = \"{ stack: '\" + object.stack + \"', message: '\" + object.message + \"', name: '\" + object.name + \"'\";\r\n }\r\n else {\r\n propertyValueDump = this.stringify(object);\r\n }\r\n return objectTypeDump + propertyValueDump;\r\n }\r\n catch (ex) {\r\n return object.toString();\r\n }\r\n }\r\n };\r\n Util.stringify = function (payload) {\r\n try {\r\n return JSON.stringify(payload);\r\n }\r\n catch (error) {\r\n Logging.warn(\"Failed to serialize payload\", error, payload);\r\n }\r\n };\r\n Util.addCorrelationIdHeaderFromString = function (client, response, correlationHeader) {\r\n var components = correlationHeader.split(\",\");\r\n var key = RequestResponseHeaders.requestContextSourceKey + \"=\";\r\n var found = components.some(function (value) { return value.substring(0, key.length) === key; });\r\n if (!found) {\r\n response.setHeader(RequestResponseHeaders.requestContextHeader, correlationHeader + \",\" + RequestResponseHeaders.requestContextSourceKey + \"=\" + client.config.correlationId);\r\n }\r\n };\r\n Util._addCloseHandler = function () {\r\n if (!Util._listenerAttached) {\r\n process.on(\"exit\", function () {\r\n Util.isNodeExit = true;\r\n Util._useKeepAlive = false;\r\n });\r\n Util._listenerAttached = true;\r\n }\r\n };\r\n Util._useKeepAlive = !JsonConfig_1.JsonConfig.getInstance().noHttpAgentKeepAlive;\r\n Util._listenerAttached = false;\r\n Util.MAX_PROPERTY_LENGTH = 8192;\r\n Util.keepAliveAgent = new https.Agent({\r\n keepAlive: true,\r\n maxSockets: 25,\r\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 |\r\n constants.SSL_OP_NO_TLSv1 | constants.SSL_OP_NO_TLSv1_1\r\n });\r\n Util.tlsRestrictedAgent = new https.Agent({\r\n secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3 |\r\n constants.SSL_OP_NO_TLSv1 | constants.SSL_OP_NO_TLSv1_1\r\n });\r\n Util.isNodeExit = false;\r\n return Util;\r\n}());\r\nmodule.exports = Util;\r\n//# sourceMappingURL=Util.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.azureRoleEnvironmentTelemetryProcessor = void 0;\r\n/**\r\n * @deprecated The method should not be called, Azure Properties will be added always when available\r\n * A telemetry processor that handles Azure specific variables.\r\n */\r\nfunction azureRoleEnvironmentTelemetryProcessor(envelope, context) {\r\n // NO-OP\r\n}\r\nexports.azureRoleEnvironmentTelemetryProcessor = azureRoleEnvironmentTelemetryProcessor;\r\n//# sourceMappingURL=AzureRoleEnvironmentTelemetryInitializer.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.performanceMetricsTelemetryProcessor = void 0;\r\nvar AutoCollectPerformance = require(\"../AutoCollection/Performance\");\r\nvar TelemetryType = require(\"../Declarations/Contracts\");\r\nfunction performanceMetricsTelemetryProcessor(envelope, client) {\r\n // If live metrics is enabled, forward all telemetry there\r\n if (client) {\r\n client.addDocument(envelope);\r\n }\r\n // Increment rate counters (for standard metrics and live metrics)\r\n switch (envelope.data.baseType) {\r\n case TelemetryType.TelemetryTypeString.Exception:\r\n AutoCollectPerformance.countException();\r\n break;\r\n case TelemetryType.TelemetryTypeString.Request:\r\n var requestData = envelope.data.baseData;\r\n AutoCollectPerformance.countRequest(requestData.duration, requestData.success);\r\n break;\r\n case TelemetryType.TelemetryTypeString.Dependency:\r\n var remoteDependencyData = envelope.data.baseData;\r\n AutoCollectPerformance.countDependency(remoteDependencyData.duration, remoteDependencyData.success);\r\n break;\r\n }\r\n return true;\r\n}\r\nexports.performanceMetricsTelemetryProcessor = performanceMetricsTelemetryProcessor;\r\n//# sourceMappingURL=PerformanceMetricsTelemetryProcessor.js.map","\"use strict\";\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.preAggregatedMetricsTelemetryProcessor = void 0;\r\nvar Contracts = require(\"../Declarations/Contracts\");\r\nvar AutoCollecPreAggregatedMetrics = require(\"../AutoCollection/PreAggregatedMetrics\");\r\nvar TelemetryType = require(\"../Declarations/Contracts\");\r\nfunction preAggregatedMetricsTelemetryProcessor(envelope, context) {\r\n if (AutoCollecPreAggregatedMetrics.isEnabled()) {\r\n // Increment rate counters\r\n switch (envelope.data.baseType) {\r\n case TelemetryType.TelemetryTypeString.Exception:\r\n var exceptionData = envelope.data.baseData;\r\n exceptionData.properties = __assign(__assign({}, exceptionData.properties), { \"_MS.ProcessedByMetricExtractors\": \"(Name:'Exceptions', Ver:'1.1')\" });\r\n var exceptionDimensions = {\r\n cloudRoleInstance: envelope.tags[context.keys.cloudRoleInstance],\r\n cloudRoleName: envelope.tags[context.keys.cloudRole]\r\n };\r\n AutoCollecPreAggregatedMetrics.countException(exceptionDimensions);\r\n break;\r\n case TelemetryType.TelemetryTypeString.Trace:\r\n var traceData = envelope.data.baseData;\r\n traceData.properties = __assign(__assign({}, traceData.properties), { \"_MS.ProcessedByMetricExtractors\": \"(Name:'Traces', Ver:'1.1')\" });\r\n var traceDimensions = {\r\n cloudRoleInstance: envelope.tags[context.keys.cloudRoleInstance],\r\n cloudRoleName: envelope.tags[context.keys.cloudRole],\r\n traceSeverityLevel: Contracts.SeverityLevel[traceData.severity]\r\n };\r\n AutoCollecPreAggregatedMetrics.countTrace(traceDimensions);\r\n break;\r\n case TelemetryType.TelemetryTypeString.Request:\r\n var requestData = envelope.data.baseData;\r\n requestData.properties = __assign(__assign({}, requestData.properties), { \"_MS.ProcessedByMetricExtractors\": \"(Name:'Requests', Ver:'1.1')\" });\r\n var requestDimensions = {\r\n cloudRoleInstance: envelope.tags[context.keys.cloudRoleInstance],\r\n cloudRoleName: envelope.tags[context.keys.cloudRole],\r\n operationSynthetic: envelope.tags[context.keys.operationSyntheticSource],\r\n requestSuccess: requestData.success,\r\n requestResultCode: requestData.responseCode\r\n };\r\n AutoCollecPreAggregatedMetrics.countRequest(requestData.duration, requestDimensions);\r\n break;\r\n case TelemetryType.TelemetryTypeString.Dependency:\r\n var remoteDependencyData = envelope.data.baseData;\r\n remoteDependencyData.properties = __assign(__assign({}, remoteDependencyData.properties), { \"_MS.ProcessedByMetricExtractors\": \"(Name:'Dependencies', Ver:'1.1')\" });\r\n var dependencyDimensions = {\r\n cloudRoleInstance: envelope.tags[context.keys.cloudRoleInstance],\r\n cloudRoleName: envelope.tags[context.keys.cloudRole],\r\n operationSynthetic: envelope.tags[context.keys.operationSyntheticSource],\r\n dependencySuccess: remoteDependencyData.success,\r\n dependencyType: remoteDependencyData.type,\r\n dependencyTarget: remoteDependencyData.target,\r\n dependencyResultCode: remoteDependencyData.resultCode\r\n };\r\n AutoCollecPreAggregatedMetrics.countDependency(remoteDependencyData.duration, dependencyDimensions);\r\n break;\r\n }\r\n }\r\n return true;\r\n}\r\nexports.preAggregatedMetricsTelemetryProcessor = preAggregatedMetricsTelemetryProcessor;\r\n//# sourceMappingURL=PreAggregatedMetricsTelemetryProcessor.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.getSamplingHashCode = exports.samplingTelemetryProcessor = void 0;\r\nvar Contracts = require(\"../Declarations/Contracts\");\r\n/**\r\n * A telemetry processor that handles sampling.\r\n */\r\nfunction samplingTelemetryProcessor(envelope, contextObjects) {\r\n var samplingPercentage = envelope.sampleRate; // Set for us in Client.getEnvelope\r\n var isSampledIn = false;\r\n if (samplingPercentage === null || samplingPercentage === undefined || samplingPercentage >= 100) {\r\n return true;\r\n }\r\n else if (envelope.data && Contracts.TelemetryType.Metric === Contracts.baseTypeToTelemetryType(envelope.data.baseType)) {\r\n // Exclude MetricData telemetry from sampling\r\n return true;\r\n }\r\n else if (contextObjects.correlationContext && contextObjects.correlationContext.operation) {\r\n // If we're using dependency correlation, sampling should retain all telemetry from a given request\r\n isSampledIn = getSamplingHashCode(contextObjects.correlationContext.operation.id) < samplingPercentage;\r\n }\r\n else {\r\n // If we're not using dependency correlation, sampling should use a random distribution on each item\r\n isSampledIn = (Math.random() * 100) < samplingPercentage;\r\n }\r\n return isSampledIn;\r\n}\r\nexports.samplingTelemetryProcessor = samplingTelemetryProcessor;\r\n/** Ported from AI .NET SDK */\r\nfunction getSamplingHashCode(input) {\r\n var csharpMin = -2147483648;\r\n var csharpMax = 2147483647;\r\n var hash = 5381;\r\n if (!input) {\r\n return 0;\r\n }\r\n while (input.length < 8) {\r\n input = input + input;\r\n }\r\n for (var i = 0; i < input.length; i++) {\r\n // JS doesn't respond to integer overflow by wrapping around. Simulate it with bitwise operators ( | 0)\r\n hash = ((((hash << 5) + hash) | 0) + input.charCodeAt(i) | 0);\r\n }\r\n hash = hash <= csharpMin ? csharpMax : Math.abs(hash);\r\n return (hash / csharpMax) * 100;\r\n}\r\nexports.getSamplingHashCode = getSamplingHashCode;\r\n//# sourceMappingURL=SamplingTelemetryProcessor.js.map","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__exportStar(require(\"./AzureRoleEnvironmentTelemetryInitializer\"), exports);\r\n__exportStar(require(\"./SamplingTelemetryProcessor\"), exports);\r\n__exportStar(require(\"./PerformanceMetricsTelemetryProcessor\"), exports);\r\n__exportStar(require(\"./PreAggregatedMetricsTelemetryProcessor\"), exports);\r\n//# sourceMappingURL=index.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.dispose = exports.Configuration = exports.wrapWithCorrelationContext = exports.startOperation = exports.getCorrelationContext = exports.start = exports.setup = exports.liveMetricsClient = exports.defaultClient = exports.DistributedTracingModes = void 0;\r\nvar CorrelationContextManager = require(\"./AutoCollection/CorrelationContextManager\"); // Keep this first\r\nvar AutoCollectConsole = require(\"./AutoCollection/Console\");\r\nvar AutoCollectExceptions = require(\"./AutoCollection/Exceptions\");\r\nvar AutoCollectPerformance = require(\"./AutoCollection/Performance\");\r\nvar AutoCollecPreAggregatedMetrics = require(\"./AutoCollection/PreAggregatedMetrics\");\r\nvar HeartBeat = require(\"./AutoCollection/HeartBeat\");\r\nvar WebSnippet = require(\"./AutoCollection/WebSnippet\");\r\nvar AutoCollectHttpDependencies = require(\"./AutoCollection/HttpDependencies\");\r\nvar AutoCollectHttpRequests = require(\"./AutoCollection/HttpRequests\");\r\nvar CorrelationIdManager = require(\"./Library/CorrelationIdManager\");\r\nvar Logging = require(\"./Library/Logging\");\r\nvar QuickPulseClient = require(\"./Library/QuickPulseStateManager\");\r\nvar NativePerformance_1 = require(\"./AutoCollection/NativePerformance\");\r\nvar AzureFunctionsHook_1 = require(\"./AutoCollection/AzureFunctionsHook\");\r\n// We export these imports so that SDK users may use these classes directly.\r\n// They're exposed using \"export import\" so that types are passed along as expected\r\nexports.TelemetryClient = require(\"./Library/NodeClient\");\r\nexports.Contracts = require(\"./Declarations/Contracts\");\r\nexports.azureFunctionsTypes = require(\"./Library/Functions\");\r\nvar DistributedTracingModes;\r\n(function (DistributedTracingModes) {\r\n /**\r\n * Send Application Insights correlation headers\r\n */\r\n DistributedTracingModes[DistributedTracingModes[\"AI\"] = 0] = \"AI\";\r\n /**\r\n * (Default) Send both W3C Trace Context headers and back-compatibility Application Insights headers\r\n */\r\n DistributedTracingModes[DistributedTracingModes[\"AI_AND_W3C\"] = 1] = \"AI_AND_W3C\";\r\n})(DistributedTracingModes = exports.DistributedTracingModes || (exports.DistributedTracingModes = {}));\r\n// Default autocollection configuration\r\nvar defaultConfig = _getDefaultAutoCollectConfig();\r\nvar _isConsole = defaultConfig.isConsole();\r\nvar _isConsoleLog = defaultConfig.isConsoleLog();\r\nvar _isLoggerErrorToTrace = defaultConfig.isLoggerErrorToTrace(); // default to false\r\nvar _isExceptions = defaultConfig.isExceptions();\r\nvar _isPerformance = defaultConfig.isPerformance();\r\nvar _isPreAggregatedMetrics = defaultConfig.isPreAggregatedMetrics();\r\nvar _isHeartBeat = defaultConfig.isHeartBeat(); // off by default for now\r\nvar _isRequests = defaultConfig.isRequests();\r\nvar _isDependencies = defaultConfig.isDependencies();\r\nvar _isDiskRetry = defaultConfig.isDiskRetry();\r\nvar _isCorrelating = defaultConfig.isCorrelating();\r\nvar _forceClsHooked;\r\nvar _isSendingLiveMetrics = defaultConfig.isSendingLiveMetrics(); // Off by default\r\nvar _isNativePerformance = defaultConfig.isNativePerformance();\r\nvar _disabledExtendedMetrics;\r\nvar _isSnippetInjection = defaultConfig.isSnippetInjection(); // default to false\r\nvar _isAzureFunctions = defaultConfig.isAzureFunctions(); // default to false\r\nfunction _getDefaultAutoCollectConfig() {\r\n return {\r\n isConsole: function () { return true; },\r\n isConsoleLog: function () { return false; },\r\n isExceptions: function () { return true; },\r\n isPerformance: function () { return true; },\r\n isPreAggregatedMetrics: function () { return true; },\r\n isHeartBeat: function () { return false; },\r\n isRequests: function () { return true; },\r\n isDependencies: function () { return true; },\r\n isDiskRetry: function () { return true; },\r\n isCorrelating: function () { return true; },\r\n isSendingLiveMetrics: function () { return false; },\r\n isNativePerformance: function () { return true; },\r\n isSnippetInjection: function () { return false; },\r\n isAzureFunctions: function () { return false; },\r\n isLoggerErrorToTrace: function () { return false; },\r\n };\r\n}\r\nvar _diskRetryInterval = undefined;\r\nvar _diskRetryMaxBytes = undefined;\r\nvar _webSnippetConnectionString = undefined;\r\nvar _console;\r\nvar _exceptions;\r\nvar _performance;\r\nvar _preAggregatedMetrics;\r\nvar _heartbeat;\r\nvar _webSnippet;\r\nvar _nativePerformance;\r\nvar _serverRequests;\r\nvar _clientRequests;\r\nvar _azureFunctions;\r\nvar _isStarted = false;\r\nvar _performanceLiveMetrics;\r\n/**\r\n * Initializes the default client. Should be called after setting\r\n * configuration options.\r\n *\r\n * @param setupString the Connection String or Instrumentation Key to use. Optional, if\r\n * this is not specified, the value will be read from the environment\r\n * variable APPLICATIONINSIGHTS_CONNECTION_STRING.\r\n * @returns {Configuration} the configuration class to initialize\r\n * and start the SDK.\r\n */\r\nfunction setup(setupString) {\r\n if (!exports.defaultClient) {\r\n exports.defaultClient = new exports.TelemetryClient(setupString);\r\n _initializeConfig();\r\n _console = new AutoCollectConsole(exports.defaultClient);\r\n _exceptions = new AutoCollectExceptions(exports.defaultClient);\r\n _performance = new AutoCollectPerformance(exports.defaultClient);\r\n _preAggregatedMetrics = new AutoCollecPreAggregatedMetrics(exports.defaultClient);\r\n _heartbeat = new HeartBeat(exports.defaultClient);\r\n _webSnippet = new WebSnippet(exports.defaultClient);\r\n _serverRequests = new AutoCollectHttpRequests(exports.defaultClient);\r\n _clientRequests = new AutoCollectHttpDependencies(exports.defaultClient);\r\n if (!_nativePerformance) {\r\n _nativePerformance = new NativePerformance_1.AutoCollectNativePerformance(exports.defaultClient);\r\n }\r\n _azureFunctions = new AzureFunctionsHook_1.AzureFunctionsHook(exports.defaultClient);\r\n }\r\n else {\r\n Logging.info(\"The default client is already setup\");\r\n }\r\n if (exports.defaultClient && exports.defaultClient.channel) {\r\n exports.defaultClient.channel.setUseDiskRetryCaching(_isDiskRetry, _diskRetryInterval, _diskRetryMaxBytes);\r\n }\r\n return Configuration;\r\n}\r\nexports.setup = setup;\r\n/**\r\n * Starts automatic collection of telemetry. Prior to calling start no\r\n * telemetry will be *automatically* collected, though manual collection\r\n * is enabled.\r\n * @returns {ApplicationInsights} this class\r\n */\r\nfunction start() {\r\n if (!!exports.defaultClient) {\r\n _isStarted = true;\r\n _console.enable(_isConsole, _isConsoleLog);\r\n _exceptions.enable(_isExceptions);\r\n _performance.enable(_isPerformance);\r\n _preAggregatedMetrics.enable(_isPreAggregatedMetrics);\r\n _heartbeat.enable(_isHeartBeat);\r\n _nativePerformance.enable(_isNativePerformance, _disabledExtendedMetrics);\r\n _serverRequests.useAutoCorrelation(_isCorrelating, _forceClsHooked);\r\n _serverRequests.enable(_isRequests);\r\n _clientRequests.enable(_isDependencies);\r\n _webSnippet.enable(_isSnippetInjection, _webSnippetConnectionString);\r\n if (exports.liveMetricsClient && _isSendingLiveMetrics) {\r\n exports.liveMetricsClient.enable(_isSendingLiveMetrics);\r\n }\r\n _azureFunctions.enable(_isAzureFunctions);\r\n }\r\n else {\r\n Logging.warn(\"Start cannot be called before setup\");\r\n }\r\n return Configuration;\r\n}\r\nexports.start = start;\r\nfunction _initializeConfig() {\r\n _isConsole = exports.defaultClient.config.enableAutoCollectExternalLoggers !== undefined ? exports.defaultClient.config.enableAutoCollectExternalLoggers : _isConsole;\r\n _isConsoleLog = exports.defaultClient.config.enableAutoCollectConsole !== undefined ? exports.defaultClient.config.enableAutoCollectConsole : _isConsoleLog;\r\n _isLoggerErrorToTrace = exports.defaultClient.config.enableLoggerErrorToTrace !== undefined ? exports.defaultClient.config.enableLoggerErrorToTrace : _isLoggerErrorToTrace;\r\n _isExceptions = exports.defaultClient.config.enableAutoCollectExceptions !== undefined ? exports.defaultClient.config.enableAutoCollectExceptions : _isExceptions;\r\n _isPerformance = exports.defaultClient.config.enableAutoCollectPerformance !== undefined ? exports.defaultClient.config.enableAutoCollectPerformance : _isPerformance;\r\n _isPreAggregatedMetrics = exports.defaultClient.config.enableAutoCollectPreAggregatedMetrics !== undefined ? exports.defaultClient.config.enableAutoCollectPreAggregatedMetrics : _isPreAggregatedMetrics;\r\n _isHeartBeat = exports.defaultClient.config.enableAutoCollectHeartbeat !== undefined ? exports.defaultClient.config.enableAutoCollectHeartbeat : _isHeartBeat;\r\n _isRequests = exports.defaultClient.config.enableAutoCollectRequests !== undefined ? exports.defaultClient.config.enableAutoCollectRequests : _isRequests;\r\n _isDependencies = exports.defaultClient.config.enableAutoDependencyCorrelation !== undefined ? exports.defaultClient.config.enableAutoDependencyCorrelation : _isDependencies;\r\n _isCorrelating = exports.defaultClient.config.enableAutoDependencyCorrelation !== undefined ? exports.defaultClient.config.enableAutoDependencyCorrelation : _isCorrelating;\r\n _forceClsHooked = exports.defaultClient.config.enableUseAsyncHooks !== undefined ? exports.defaultClient.config.enableUseAsyncHooks : _forceClsHooked;\r\n _isSnippetInjection = exports.defaultClient.config.enableWebInstrumentation !== undefined ? exports.defaultClient.config.enableWebInstrumentation : _isSnippetInjection;\r\n _isSnippetInjection = exports.defaultClient.config.enableAutoWebSnippetInjection === true ? true : _isSnippetInjection;\r\n _isAzureFunctions = exports.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions !== undefined ? exports.defaultClient.config.enableAutoCollectIncomingRequestAzureFunctions : _isAzureFunctions;\r\n var extendedMetricsConfig = NativePerformance_1.AutoCollectNativePerformance.parseEnabled(exports.defaultClient.config.enableAutoCollectExtendedMetrics, exports.defaultClient.config);\r\n _isNativePerformance = extendedMetricsConfig.isEnabled;\r\n _disabledExtendedMetrics = extendedMetricsConfig.disabledMetrics;\r\n}\r\n/**\r\n * Returns an object that is shared across all code handling a given request.\r\n * This can be used similarly to thread-local storage in other languages.\r\n * Properties set on this object will be available to telemetry processors.\r\n *\r\n * Do not store sensitive information here.\r\n * Custom properties set on this object can be exposed in a future SDK\r\n * release via outgoing HTTP headers.\r\n * This is to allow for correlating data cross-component.\r\n *\r\n * This method will return null if automatic dependency correlation is disabled.\r\n * @returns A plain object for request storage or null if automatic dependency correlation is disabled.\r\n */\r\nfunction getCorrelationContext() {\r\n if (_isCorrelating) {\r\n return CorrelationContextManager.CorrelationContextManager.getCurrentContext();\r\n }\r\n return null;\r\n}\r\nexports.getCorrelationContext = getCorrelationContext;\r\nfunction startOperation(context, request) {\r\n return CorrelationContextManager.CorrelationContextManager.startOperation(context, request);\r\n}\r\nexports.startOperation = startOperation;\r\n/**\r\n * Returns a function that will get the same correlation context within its\r\n * function body as the code executing this function.\r\n * Use this method if automatic dependency correlation is not propagating\r\n * correctly to an asynchronous callback.\r\n */\r\nfunction wrapWithCorrelationContext(fn, context) {\r\n return CorrelationContextManager.CorrelationContextManager.wrapCallback(fn, context);\r\n}\r\nexports.wrapWithCorrelationContext = wrapWithCorrelationContext;\r\n/**\r\n * The active configuration for global SDK behaviors, such as autocollection.\r\n */\r\nvar Configuration = /** @class */ (function () {\r\n function Configuration() {\r\n }\r\n /**\r\n * Sets the distributed tracing modes. If W3C mode is enabled, W3C trace context\r\n * headers (traceparent/tracestate) will be parsed in all incoming requests, and included in outgoing\r\n * requests. In W3C mode, existing back-compatibility AI headers will also be parsed and included.\r\n * Enabling W3C mode will not break existing correlation with other Application Insights instrumented\r\n * services. Default=AI\r\n */\r\n Configuration.setDistributedTracingMode = function (value) {\r\n CorrelationIdManager.w3cEnabled = value === DistributedTracingModes.AI_AND_W3C;\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of console and logger tracking (enabled by default for third-party loggers only)\r\n * @param value if true logger activity will be sent to Application Insights\r\n * @param collectConsoleLog if true, logger autocollection will include console.log calls (default false)\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectConsole = function (value, collectConsoleLog) {\r\n if (collectConsoleLog === void 0) { collectConsoleLog = false; }\r\n _isConsole = value;\r\n _isConsoleLog = collectConsoleLog;\r\n if (_isStarted) {\r\n _console.enable(value, collectConsoleLog);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of exception tracking (enabled by default)\r\n * @param value if true uncaught exceptions will be sent to Application Insights\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectExceptions = function (value) {\r\n _isExceptions = value;\r\n if (_isStarted) {\r\n _exceptions.enable(value);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of performance tracking (enabled by default)\r\n * @param value if true performance counters will be collected every second and sent to Application Insights\r\n * @param collectExtendedMetrics if true, extended metrics counters will be collected every minute and sent to Application Insights\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectPerformance = function (value, collectExtendedMetrics) {\r\n if (collectExtendedMetrics === void 0) { collectExtendedMetrics = true; }\r\n _isPerformance = value;\r\n var extendedMetricsConfig = NativePerformance_1.AutoCollectNativePerformance.parseEnabled(collectExtendedMetrics, exports.defaultClient.config);\r\n _isNativePerformance = extendedMetricsConfig.isEnabled;\r\n _disabledExtendedMetrics = extendedMetricsConfig.disabledMetrics;\r\n if (_isStarted) {\r\n _performance.enable(value);\r\n _nativePerformance.enable(extendedMetricsConfig.isEnabled, extendedMetricsConfig.disabledMetrics);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of pre aggregated metrics tracking (enabled by default)\r\n * @param value if true pre aggregated metrics will be collected every minute and sent to Application Insights\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectPreAggregatedMetrics = function (value) {\r\n _isPreAggregatedMetrics = value;\r\n if (_isStarted) {\r\n _preAggregatedMetrics.enable(value);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of request tracking (enabled by default)\r\n * @param value if true HeartBeat metric data will be collected every 15 mintues and sent to Application Insights\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectHeartbeat = function (value) {\r\n _isHeartBeat = value;\r\n if (_isStarted) {\r\n _heartbeat.enable(value);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of Web snippet injection, this config is NOT exposed in documentation after version 2.3.5\r\n * @deprecated, please use enableWebInstrumentation instead.\r\n * @param value if true Web snippet will be tried to be injected in server response\r\n * @param WebSnippetConnectionString if provided, web snippet injection will use this ConnectionString. Default to use the connectionString in Node.js app initialization\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.enableAutoWebSnippetInjection = function (value, WebSnippetConnectionString) {\r\n _isSnippetInjection = value;\r\n _webSnippetConnectionString = WebSnippetConnectionString;\r\n if (_isStarted) {\r\n _webSnippet.enable(value, _webSnippetConnectionString);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of Web snippet injection\r\n * @param value if true Web snippet will be tried to be injected in server response\r\n * @param WebSnippetConnectionString if provided, web snippet injection will use this ConnectionString. Default to use the connectionString in Node.js app initialization\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.enableWebInstrumentation = function (value, WebSnippetConnectionString) {\r\n _isSnippetInjection = value;\r\n _webSnippetConnectionString = WebSnippetConnectionString;\r\n if (_isStarted) {\r\n _webSnippet.enable(value, _webSnippetConnectionString);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of request tracking (enabled by default)\r\n * @param value if true requests will be sent to Application Insights\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectRequests = function (value) {\r\n _isRequests = value;\r\n if (_isStarted) {\r\n _serverRequests.enable(value);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of dependency tracking (enabled by default)\r\n * @param value if true dependencies will be sent to Application Insights\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectDependencies = function (value) {\r\n _isDependencies = value;\r\n if (_isStarted) {\r\n _clientRequests.enable(value);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Sets the state of automatic dependency correlation (enabled by default)\r\n * @param value if true dependencies will be correlated with requests\r\n * @param useAsyncHooks if true, forces use of experimental async_hooks module to provide correlation. If false, instead uses only patching-based techniques. If left blank, the best option is chosen for you based on your version of Node.js.\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoDependencyCorrelation = function (value, useAsyncHooks) {\r\n _isCorrelating = value;\r\n _forceClsHooked = useAsyncHooks;\r\n if (_isStarted) {\r\n _serverRequests.useAutoCorrelation(value, useAsyncHooks);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Enable or disable disk-backed retry caching to cache events when client is offline (enabled by default)\r\n * Note that this method only applies to the default client. Disk-backed retry caching is disabled by default for additional clients.\r\n * For enable for additional clients, use client.channel.setUseDiskRetryCaching(true).\r\n * These cached events are stored in your system or user's temporary directory and access restricted to your user when possible.\r\n * @param value if true events that occured while client is offline will be cached on disk\r\n * @param resendInterval The wait interval for resending cached events.\r\n * @param maxBytesOnDisk The maximum size (in bytes) that the created temporary directory for cache events can grow to, before caching is disabled.\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setUseDiskRetryCaching = function (value, resendInterval, maxBytesOnDisk) {\r\n _isDiskRetry = value;\r\n _diskRetryInterval = resendInterval;\r\n _diskRetryMaxBytes = maxBytesOnDisk;\r\n if (exports.defaultClient && exports.defaultClient.channel) {\r\n exports.defaultClient.channel.setUseDiskRetryCaching(_isDiskRetry, _diskRetryInterval, _diskRetryMaxBytes);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Enables debug and warning logging for AppInsights itself.\r\n * @param enableDebugLogging if true, enables debug logging\r\n * @param enableWarningLogging if true, enables warning logging\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setInternalLogging = function (enableDebugLogging, enableWarningLogging) {\r\n if (enableDebugLogging === void 0) { enableDebugLogging = false; }\r\n if (enableWarningLogging === void 0) { enableWarningLogging = true; }\r\n Logging.enableDebug = enableDebugLogging;\r\n Logging.disableWarnings = !enableWarningLogging;\r\n return Configuration;\r\n };\r\n /**\r\n * Enable automatic incoming request tracking when using Azure Functions\r\n * @param value if true auto collection of incoming requests will be enabled\r\n * @returns {Configuration} this class\r\n */\r\n Configuration.setAutoCollectIncomingRequestAzureFunctions = function (value) {\r\n _isAzureFunctions = value;\r\n if (_isStarted) {\r\n _azureFunctions.enable(value);\r\n }\r\n return Configuration;\r\n };\r\n /**\r\n * Enables communication with Application Insights Live Metrics.\r\n * @param enable if true, enables communication with the live metrics service\r\n */\r\n Configuration.setSendLiveMetrics = function (enable) {\r\n if (enable === void 0) { enable = false; }\r\n if (!exports.defaultClient) {\r\n // Need a defaultClient so that we can add the QPS telemetry processor to it\r\n Logging.warn(\"Live metrics client cannot be setup without the default client\");\r\n return Configuration;\r\n }\r\n if (!exports.liveMetricsClient && enable) {\r\n // No qps client exists. Create one and prepare it to be enabled at .start()\r\n exports.liveMetricsClient = new QuickPulseClient(exports.defaultClient.config, exports.defaultClient.context, exports.defaultClient.getAuthorizationHandler);\r\n _performanceLiveMetrics = new AutoCollectPerformance(exports.liveMetricsClient, 1000, true);\r\n exports.liveMetricsClient.addCollector(_performanceLiveMetrics);\r\n exports.defaultClient.quickPulseClient = exports.liveMetricsClient; // Need this so we can forward all manual tracks to live metrics via PerformanceMetricsTelemetryProcessor\r\n }\r\n else if (exports.liveMetricsClient) {\r\n // qps client already exists; enable/disable it\r\n exports.liveMetricsClient.enable(enable);\r\n }\r\n _isSendingLiveMetrics = enable;\r\n return Configuration;\r\n };\r\n // Convenience shortcut to ApplicationInsights.start\r\n Configuration.start = start;\r\n return Configuration;\r\n}());\r\nexports.Configuration = Configuration;\r\n/**\r\n * Disposes the default client and all the auto collectors so they can be reinitialized with different configuration\r\n*/\r\nfunction dispose() {\r\n CorrelationIdManager.w3cEnabled = true; // reset to default\r\n exports.defaultClient = null;\r\n _isStarted = false;\r\n if (_console) {\r\n _console.dispose();\r\n }\r\n if (_exceptions) {\r\n _exceptions.dispose();\r\n }\r\n if (_performance) {\r\n _performance.dispose();\r\n }\r\n if (_preAggregatedMetrics) {\r\n _preAggregatedMetrics.dispose();\r\n }\r\n if (_heartbeat) {\r\n _heartbeat.dispose();\r\n }\r\n if (_webSnippet) {\r\n _webSnippet.dispose();\r\n }\r\n if (_nativePerformance) {\r\n _nativePerformance.dispose();\r\n }\r\n if (_serverRequests) {\r\n _serverRequests.dispose();\r\n }\r\n if (_clientRequests) {\r\n _clientRequests.dispose();\r\n }\r\n if (exports.liveMetricsClient) {\r\n exports.liveMetricsClient.enable(false);\r\n _isSendingLiveMetrics = false;\r\n exports.liveMetricsClient = undefined;\r\n }\r\n if (_azureFunctions) {\r\n _azureFunctions.dispose();\r\n }\r\n}\r\nexports.dispose = dispose;\r\n//# sourceMappingURL=applicationinsights.js.map","'use strict';\n\nconst asyncWrap = process.binding('async_wrap');\nconst TIMERWRAP = asyncWrap.Providers.TIMERWRAP;\n\nconst patchs = {\n 'nextTick': require('./patches/next-tick.js'),\n 'promise': require('./patches/promise.js'),\n 'timers': require('./patches/timers.js')\n};\n\nconst ignoreUIDs = new Set();\n\nfunction State() {\n this.enabled = false;\n this.counter = 0;\n}\n\nfunction Hooks() {\n const initFns = this.initFns = [];\n const preFns = this.preFns = [];\n const postFns = this.postFns = [];\n const destroyFns = this.destroyFns = [];\n\n this.init = function (uid, provider, parentUid, parentHandle) {\n // Ignore TIMERWRAP, since setTimeout etc. is monkey patched\n if (provider === TIMERWRAP) {\n ignoreUIDs.add(uid);\n return;\n }\n\n // call hooks\n for (const hook of initFns) {\n hook(uid, this, provider, parentUid, parentHandle);\n }\n };\n\n this.pre = function (uid) {\n if (ignoreUIDs.has(uid)) return;\n\n // call hooks\n for (const hook of preFns) {\n hook(uid, this);\n }\n };\n\n this.post = function (uid, didThrow) {\n if (ignoreUIDs.has(uid)) return;\n\n // call hooks\n for (const hook of postFns) {\n hook(uid, this, didThrow);\n }\n };\n\n this.destroy = function (uid) {\n // Cleanup the ignore list if this uid should be ignored\n if (ignoreUIDs.has(uid)) {\n ignoreUIDs.delete(uid);\n return;\n }\n\n // call hooks\n for (const hook of destroyFns) {\n hook(uid);\n }\n };\n}\n\nHooks.prototype.add = function (hooks) {\n if (hooks.init) this.initFns.push(hooks.init);\n if (hooks.pre) this.preFns.push(hooks.pre);\n if (hooks.post) this.postFns.push(hooks.post);\n if (hooks.destroy) this.destroyFns.push(hooks.destroy);\n};\n\nfunction removeElement(array, item) {\n const index = array.indexOf(item);\n if (index === -1) return;\n array.splice(index, 1);\n}\n\nHooks.prototype.remove = function (hooks) {\n if (hooks.init) removeElement(this.initFns, hooks.init);\n if (hooks.pre) removeElement(this.preFns, hooks.pre);\n if (hooks.post) removeElement(this.postFns, hooks.post);\n if (hooks.destroy) removeElement(this.destroyFns, hooks.destroy);\n};\n\nfunction AsyncHook() {\n this._state = new State();\n this._hooks = new Hooks();\n\n // expose version for conflict detection\n this.version = require('./package.json').version;\n\n // expose the Providers map\n this.providers = asyncWrap.Providers;\n\n // apply patches\n for (const key of Object.keys(patchs)) {\n patchs[key].call(this);\n }\n\n // setup async wrap\n if (process.env.hasOwnProperty('NODE_ASYNC_HOOK_WARNING')) {\n console.warn('warning: you are using async-hook-jl which is unstable.');\n }\n asyncWrap.setupHooks({\n init: this._hooks.init,\n pre: this._hooks.pre,\n post: this._hooks.post,\n destroy: this._hooks.destroy\n });\n}\nmodule.exports = AsyncHook;\n\nAsyncHook.prototype.addHooks = function (hooks) {\n this._hooks.add(hooks);\n};\n\nAsyncHook.prototype.removeHooks = function (hooks) {\n this._hooks.remove(hooks);\n};\n\nAsyncHook.prototype.enable = function () {\n this._state.enabled = true;\n asyncWrap.enable();\n};\n\nAsyncHook.prototype.disable = function () {\n this._state.enabled = false;\n asyncWrap.disable();\n};","'use strict';\n\nconst AsyncHook = require('./async-hook.js');\n\n// If a another copy (same version or not) of stack-chain exists it will result\n// in wrong stack traces (most likely dublicate callSites).\nif (global._asyncHook) {\n // In case the version match, we can simply return the first initialized copy\n if (global._asyncHook.version === require('./package.json').version) {\n module.exports = global._asyncHook;\n }\n // The version don't match, this is really bad. Lets just throw\n else {\n throw new Error('Conflicting version of async-hook-jl found');\n }\n} else {\n const stackChain = require('stack-chain');\n\n // Remove callSites from this module. AsyncWrap doesn't have any callSites\n // and the hooks are expected to be completely transparent.\n stackChain.filter.attach(function (error, frames) {\n return frames.filter(function (callSite) {\n const filename = callSite.getFileName();\n // filename is not always a string, for example in case of eval it is\n // undefined. So check if the filename is defined.\n return !(filename && filename.slice(0, __dirname.length) === __dirname);\n });\n });\n\n module.exports = global._asyncHook = new AsyncHook();\n}","'use strict';\n\nfunction NextTickWrap() {}\n\nmodule.exports = function patch() {\n const hooks = this._hooks;\n const state = this._state;\n\n const oldNextTick = process.nextTick;\n process.nextTick = function () {\n if (!state.enabled) return oldNextTick.apply(process, arguments);\n\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n const callback = args[0];\n\n if (typeof callback !== 'function') {\n throw new TypeError('callback is not a function');\n }\n\n const handle = new NextTickWrap();\n const uid = --state.counter;\n\n // call the init hook\n hooks.init.call(handle, uid, 0, null, null);\n\n // overwrite callback\n args[0] = function () {\n // call the pre hook\n hooks.pre.call(handle, uid);\n\n let didThrow = true;\n try {\n callback.apply(this, arguments);\n didThrow = false;\n } finally {\n // If `callback` threw and there is an uncaughtException handler\n // then call the `post` and `destroy` hook after the uncaughtException\n // user handlers have been invoked.\n if(didThrow && process.listenerCount('uncaughtException') > 0) {\n process.once('uncaughtException', function () {\n hooks.post.call(handle, uid, true);\n hooks.destroy.call(null, uid);\n });\n }\n }\n\n // callback done successfully\n hooks.post.call(handle, uid, false);\n hooks.destroy.call(null, uid);\n };\n\n return oldNextTick.apply(process, args);\n };\n}\n","'use strict';\n\nfunction PromiseWrap() {}\n\nmodule.exports = function patchPromise() {\n const hooks = this._hooks;\n const state = this._state;\n\n const Promise = global.Promise;\n\n /* As per ECMAScript 2015, .catch must be implemented by calling .then, as\n * such we need needn't patch .catch as well. see:\n * http://www.ecma-international.org/ecma-262/6.0/#sec-promise.prototype.catch\n */\n const oldThen = Promise.prototype.then;\n Promise.prototype.then = wrappedThen;\n\n function makeWrappedHandler(fn, handle, uid, isOnFulfilled) {\n if ('function' !== typeof fn) {\n return isOnFulfilled\n ? makeUnhandledResolutionHandler(uid)\n : makeUnhandledRejectionHandler(uid);\n }\n\n return function wrappedHandler() {\n hooks.pre.call(handle, uid);\n try {\n return fn.apply(this, arguments);\n } finally {\n hooks.post.call(handle, uid, false);\n hooks.destroy.call(null, uid);\n }\n };\n }\n\n function makeUnhandledResolutionHandler(uid) {\n return function unhandledResolutionHandler(val) {\n hooks.destroy.call(null, uid);\n return val;\n };\n }\n\n function makeUnhandledRejectionHandler(uid) {\n return function unhandledRejectedHandler(val) {\n hooks.destroy.call(null, uid);\n throw val;\n };\n }\n\n function wrappedThen(onFulfilled, onRejected) {\n if (!state.enabled) return oldThen.call(this, onFulfilled, onRejected);\n\n const handle = new PromiseWrap();\n const uid = --state.counter;\n\n hooks.init.call(handle, uid, 0, null, null);\n\n return oldThen.call(\n this,\n makeWrappedHandler(onFulfilled, handle, uid, true),\n makeWrappedHandler(onRejected, handle, uid, false)\n );\n }\n};\n","'use strict';\n\nconst timers = require('timers');\n\nfunction TimeoutWrap() {}\nfunction IntervalWrap() {}\nfunction ImmediateWrap() {}\n\nconst timeoutMap = new Map();\nconst intervalMap = new Map();\nconst ImmediateMap = new Map();\n\nlet activeCallback = null;\nlet clearedInCallback = false;\n\nmodule.exports = function patch() {\n patchTimer(this._hooks, this._state, 'setTimeout', 'clearTimeout', TimeoutWrap, timeoutMap, true);\n patchTimer(this._hooks, this._state, 'setInterval', 'clearInterval', IntervalWrap, intervalMap, false);\n patchTimer(this._hooks, this._state, 'setImmediate', 'clearImmediate', ImmediateWrap, ImmediateMap, true);\n\n global.setTimeout = timers.setTimeout;\n global.setInterval = timers.setInterval;\n global.setImmediate = timers.setImmediate;\n\n global.clearTimeout = timers.clearTimeout;\n global.clearInterval = timers.clearInterval;\n global.clearImmediate = timers.clearImmediate;\n};\n\nfunction patchTimer(hooks, state, setFn, clearFn, Handle, timerMap, singleCall) {\n const oldSetFn = timers[setFn];\n const oldClearFn = timers[clearFn];\n\n // overwrite set[Timeout]\n timers[setFn] = function () {\n if (!state.enabled) return oldSetFn.apply(timers, arguments);\n\n const args = new Array(arguments.length);\n for (let i = 0; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n const callback = args[0];\n\n if (typeof callback !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n\n const handle = new Handle();\n const uid = --state.counter;\n let timerId = undefined;\n\n // call the init hook\n hooks.init.call(handle, uid, 0, null, null);\n\n // overwrite callback\n args[0] = function () {\n // call the pre hook\n activeCallback = timerId;\n hooks.pre.call(handle, uid);\n\n let didThrow = true;\n try {\n callback.apply(this, arguments);\n didThrow = false;\n } finally {\n // If `callback` threw and there is an uncaughtException handler\n // then call the `post` and `destroy` hook after the uncaughtException\n // user handlers have been invoked.\n if (didThrow && process.listenerCount('uncaughtException') > 0) {\n process.once('uncaughtException', function () {\n // call the post hook\n hooks.post.call(handle, uid, true);\n // setInterval won't continue\n timerMap.delete(timerId);\n hooks.destroy.call(null, uid);\n });\n }\n }\n\n // callback done successfully\n hooks.post.call(handle, uid, false);\n activeCallback = null;\n\n // call the destroy hook if the callback will only be called once\n if (singleCall || clearedInCallback) {\n clearedInCallback = false;\n timerMap.delete(timerId);\n hooks.destroy.call(null, uid);\n }\n };\n\n timerId = oldSetFn.apply(timers, args);\n // Bind the timerId and uid for later use, in case the clear* function is\n // called.\n timerMap.set(timerId, uid);\n\n return timerId;\n };\n\n // overwrite clear[Timeout]\n timers[clearFn] = function (timerId) {\n // If clear* was called within the timer callback, then delay the destroy\n // event to after the post event has been called.\n if (activeCallback === timerId && timerId !== null) {\n clearedInCallback = true;\n }\n // clear should call the destroy hook. Note if timerId doesn't exists\n // it is because asyncWrap wasn't enabled at the time.\n else if (timerMap.has(timerId)) {\n const uid = timerMap.get(timerId);\n timerMap.delete(timerId);\n hooks.destroy.call(null, uid);\n }\n\n oldClearFn.apply(timers, arguments);\n };\n}\n","'use strict';\n\nmodule.exports = (Promise, ensureAslWrapper) => {\n // Updates to this class should also be applied to the the ES3 version\n // in index.js.\n return class WrappedPromise extends Promise {\n constructor(executor) {\n var context, args;\n super(wrappedExecutor);\n var promise = this;\n\n try {\n executor.apply(context, args);\n } catch (err) {\n args[1](err);\n }\n\n return promise;\n function wrappedExecutor(resolve, reject) {\n context = this;\n args = [wrappedResolve, wrappedReject];\n\n // These wrappers create a function that can be passed a function and an argument to\n // call as a continuation from the resolve or reject.\n function wrappedResolve(val) {\n ensureAslWrapper(promise, false);\n return resolve(val);\n }\n\n function wrappedReject(val) {\n ensureAslWrapper(promise, false);\n return reject(val);\n }\n }\n }\n }\n};\n","var wrap = require('shimmer').wrap;\n\n/*\n *\n * CONSTANTS\n *\n */\nvar HAS_CREATE_AL = 1 << 0;\nvar HAS_BEFORE_AL = 1 << 1;\nvar HAS_AFTER_AL = 1 << 2;\nvar HAS_ERROR_AL = 1 << 3;\n\n/**\n * There is one list of currently active listeners that is mutated in place by\n * addAsyncListener and removeAsyncListener. This complicates error-handling,\n * for reasons that are discussed below.\n */\nvar listeners = [];\n\n/**\n * There can be multiple listeners with the same properties, so disambiguate\n * them by assigning them an ID at creation time.\n */\nvar uid = 0;\n\n/**\n * Ensure that errors coming from within listeners are handed off to domains,\n * process._fatalException, or uncaughtException without being treated like\n * user errors.\n */\nvar inAsyncTick = false;\n\n/**\n * Because asynchronous contexts can be nested, and errors can come from anywhere\n * in the stack, a little extra work is required to keep track of where in the\n * nesting we are. Because JS arrays are frequently mutated in place\n */\nvar listenerStack = [];\n\n/**\n * The error handler on a listener can capture errors thrown during synchronous\n * execution immediately after the listener is added. To capture both\n * synchronous and asynchronous errors, the error handler just uses the\n * \"global\" list of active listeners, and the rest of the code ensures that the\n * listener list is correct by using a stack of listener lists during\n * asynchronous execution.\n */\nvar asyncCatcher;\n\n/**\n * The guts of the system -- called each time an asynchronous event happens\n * while one or more listeners are active.\n */\nvar asyncWrap;\n\n/**\n * Simple helper function that's probably faster than using Array\n * filter methods and can be inlined.\n */\nfunction union(dest, added) {\n var destLength = dest.length;\n var addedLength = added.length;\n var returned = [];\n\n if (destLength === 0 && addedLength === 0) return returned;\n\n for (var j = 0; j < destLength; j++) returned[j] = dest[j];\n\n if (addedLength === 0) return returned;\n\n for (var i = 0; i < addedLength; i++) {\n var missing = true;\n for (j = 0; j < destLength; j++) {\n if (dest[j].uid === added[i].uid) {\n missing = false;\n break;\n }\n }\n if (missing) returned.push(added[i]);\n }\n\n return returned;\n}\n\n/*\n * For performance, split error-handlers and asyncCatcher up into two separate\n * code paths.\n */\n\n// 0.9+\nif (process._fatalException) {\n /**\n * Error handlers on listeners can throw, the catcher needs to be able to\n * discriminate between exceptions thrown by user code, and exceptions coming\n * from within the catcher itself. Use a global to keep track of which state\n * the catcher is currently in.\n */\n var inErrorTick = false;\n\n /**\n * Throwing always happens synchronously. If the current array of values for\n * the current list of asyncListeners is put in a module-scoped variable right\n * before a call that can throw, it will always be correct when the error\n * handlers are run.\n */\n var errorValues;\n\n asyncCatcher = function asyncCatcher(er) {\n var length = listeners.length;\n if (inErrorTick || length === 0) return false;\n\n var handled = false;\n\n /*\n * error handlers\n */\n inErrorTick = true;\n for (var i = 0; i < length; ++i) {\n var listener = listeners[i];\n if ((listener.flags & HAS_ERROR_AL) === 0) continue;\n\n var value = errorValues && errorValues[listener.uid];\n handled = listener.error(value, er) || handled;\n }\n inErrorTick = false;\n\n /* Test whether there are any listener arrays on the stack. In the case of\n * synchronous throws when the listener is active, there may have been\n * none pushed yet.\n */\n if (listenerStack.length > 0) listeners = listenerStack.pop();\n errorValues = undefined;\n\n return handled && !inAsyncTick;\n };\n\n asyncWrap = function asyncWrap(original, list, length) {\n var values = [];\n\n /*\n * listeners\n */\n inAsyncTick = true;\n for (var i = 0; i < length; ++i) {\n var listener = list[i];\n values[listener.uid] = listener.data;\n\n if ((listener.flags & HAS_CREATE_AL) === 0) continue;\n\n var value = listener.create(listener.data);\n if (value !== undefined) values[listener.uid] = value;\n }\n inAsyncTick = false;\n\n /* One of the main differences between this polyfill and the core\n * asyncListener support is that core avoids creating closures by putting a\n * lot of the state managemnt on the C++ side of Node (and of course also it\n * bakes support for async listeners into the Node C++ API through the\n * AsyncWrap class, which means that it doesn't monkeypatch basically every\n * async method like this does).\n */\n return function () {\n // put the current values where the catcher can see them\n errorValues = values;\n\n /* More than one listener can end up inside these closures, so save the\n * current listeners on a stack.\n */\n listenerStack.push(listeners);\n\n /* Activate both the listeners that were active when the closure was\n * created and the listeners that were previously active.\n */\n listeners = union(list, listeners);\n\n /*\n * before handlers\n */\n inAsyncTick = true;\n for (var i = 0; i < length; ++i) {\n if ((list[i].flags & HAS_BEFORE_AL) > 0) {\n list[i].before(this, values[list[i].uid]);\n }\n }\n inAsyncTick = false;\n\n // save the return value to pass to the after callbacks\n var returned = original.apply(this, arguments);\n\n /*\n * after handlers (not run if original throws)\n */\n inAsyncTick = true;\n for (i = 0; i < length; ++i) {\n if ((list[i].flags & HAS_AFTER_AL) > 0) {\n list[i].after(this, values[list[i].uid]);\n }\n }\n inAsyncTick = false;\n\n // back to the previous listener list on the stack\n listeners = listenerStack.pop();\n errorValues = undefined;\n\n return returned;\n };\n };\n\n wrap(process, '_fatalException', function (_fatalException) {\n return function _asyncFatalException(er) {\n return asyncCatcher(er) || _fatalException(er);\n };\n });\n}\n// 0.8 and below\nelse {\n /**\n * If an error handler in asyncWrap throws, the process must die. Under 0.8\n * and earlier the only way to put a bullet through the head of the process\n * is to rethrow from inside the exception handler, so rethrow and set\n * errorThrew to tell the uncaughtHandler what to do.\n */\n var errorThrew = false;\n\n /**\n * Under Node 0.8, this handler *only* handles synchronously thrown errors.\n * This simplifies it, which almost but not quite makes up for the hit taken\n * by putting everything in a try-catch.\n */\n asyncCatcher = function uncaughtCatcher(er) {\n // going down hard\n if (errorThrew) throw er;\n\n var handled = false;\n\n /*\n * error handlers\n */\n var length = listeners.length;\n for (var i = 0; i < length; ++i) {\n var listener = listeners[i];\n if ((listener.flags & HAS_ERROR_AL) === 0) continue;\n handled = listener.error(null, er) || handled;\n }\n\n /* Rethrow if one of the before / after handlers fire, which will bring the\n * process down immediately.\n */\n if (!handled && inAsyncTick) throw er;\n };\n\n asyncWrap = function asyncWrap(original, list, length) {\n var values = [];\n\n /*\n * listeners\n */\n inAsyncTick = true;\n for (var i = 0; i < length; ++i) {\n var listener = list[i];\n values[listener.uid] = listener.data;\n\n if ((listener.flags & HAS_CREATE_AL) === 0) continue;\n\n var value = listener.create(listener.data);\n if (value !== undefined) values[listener.uid] = value;\n }\n inAsyncTick = false;\n\n /* One of the main differences between this polyfill and the core\n * asyncListener support is that core avoids creating closures by putting a\n * lot of the state managemnt on the C++ side of Node (and of course also it\n * bakes support for async listeners into the Node C++ API through the\n * AsyncWrap class, which means that it doesn't monkeypatch basically every\n * async method like this does).\n */\n return function () {\n /*jshint maxdepth:4*/\n\n // after() handlers don't run if threw\n var threw = false;\n\n // ...unless the error is handled\n var handled = false;\n\n /* More than one listener can end up inside these closures, so save the\n * current listeners on a stack.\n */\n listenerStack.push(listeners);\n\n /* Activate both the listeners that were active when the closure was\n * created and the listeners that were previously active.\n */\n listeners = union(list, listeners);\n\n /*\n * before handlers\n */\n inAsyncTick = true;\n for (var i = 0; i < length; ++i) {\n if ((list[i].flags & HAS_BEFORE_AL) > 0) {\n list[i].before(this, values[list[i].uid]);\n }\n }\n inAsyncTick = false;\n\n // save the return value to pass to the after callbacks\n var returned;\n try {\n returned = original.apply(this, arguments);\n }\n catch (er) {\n threw = true;\n for (var i = 0; i < length; ++i) {\n if ((listeners[i].flags & HAS_ERROR_AL) == 0) continue;\n try {\n handled = listeners[i].error(values[list[i].uid], er) || handled;\n }\n catch (x) {\n errorThrew = true;\n throw x;\n }\n }\n\n if (!handled) {\n // having an uncaughtException handler here alters crash semantics\n process.removeListener('uncaughtException', asyncCatcher);\n process._originalNextTick(function () {\n process.addListener('uncaughtException', asyncCatcher);\n });\n\n throw er;\n }\n }\n finally {\n /*\n * after handlers (not run if original throws)\n */\n if (!threw || handled) {\n inAsyncTick = true;\n for (i = 0; i < length; ++i) {\n if ((list[i].flags & HAS_AFTER_AL) > 0) {\n list[i].after(this, values[list[i].uid]);\n }\n }\n inAsyncTick = false;\n }\n\n // back to the previous listener list on the stack\n listeners = listenerStack.pop();\n }\n\n\n return returned;\n };\n };\n\n // will be the first to fire if async-listener is the first module loaded\n process.addListener('uncaughtException', asyncCatcher);\n}\n\n// for performance in the case where there are no handlers, just the listener\nfunction simpleWrap(original, list, length) {\n inAsyncTick = true;\n for (var i = 0; i < length; ++i) {\n var listener = list[i];\n if (listener.create) listener.create(listener.data);\n }\n inAsyncTick = false;\n\n // still need to make sure nested async calls are made in the context\n // of the listeners active at their creation\n return function () {\n listenerStack.push(listeners);\n listeners = union(list, listeners);\n\n var returned = original.apply(this, arguments);\n\n listeners = listenerStack.pop();\n\n return returned;\n };\n}\n\n/**\n * Called each time an asynchronous function that's been monkeypatched in\n * index.js is called. If there are no listeners, return the function\n * unwrapped. If there are any asyncListeners and any of them have callbacks,\n * pass them off to asyncWrap for later use, otherwise just call the listener.\n */\nfunction wrapCallback(original) {\n var length = listeners.length;\n\n // no context to capture, so avoid closure creation\n if (length === 0) return original;\n\n // capture the active listeners as of when the wrapped function was called\n var list = listeners.slice();\n\n for (var i = 0; i < length; ++i) {\n if (list[i].flags > 0) return asyncWrap(original, list, length);\n }\n\n return simpleWrap(original, list, length);\n}\n\nfunction AsyncListener(callbacks, data) {\n if (typeof callbacks.create === 'function') {\n this.create = callbacks.create;\n this.flags |= HAS_CREATE_AL;\n }\n\n if (typeof callbacks.before === 'function') {\n this.before = callbacks.before;\n this.flags |= HAS_BEFORE_AL;\n }\n\n if (typeof callbacks.after === 'function') {\n this.after = callbacks.after;\n this.flags |= HAS_AFTER_AL;\n }\n\n if (typeof callbacks.error === 'function') {\n this.error = callbacks.error;\n this.flags |= HAS_ERROR_AL;\n }\n\n this.uid = ++uid;\n this.data = data === undefined ? null : data;\n}\nAsyncListener.prototype.create = undefined;\nAsyncListener.prototype.before = undefined;\nAsyncListener.prototype.after = undefined;\nAsyncListener.prototype.error = undefined;\nAsyncListener.prototype.data = undefined;\nAsyncListener.prototype.uid = 0;\nAsyncListener.prototype.flags = 0;\n\nfunction createAsyncListener(callbacks, data) {\n if (typeof callbacks !== 'object' || !callbacks) {\n throw new TypeError('callbacks argument must be an object');\n }\n\n if (callbacks instanceof AsyncListener) {\n return callbacks;\n }\n else {\n return new AsyncListener(callbacks, data);\n }\n}\n\nfunction addAsyncListener(callbacks, data) {\n var listener;\n if (!(callbacks instanceof AsyncListener)) {\n listener = createAsyncListener(callbacks, data);\n }\n else {\n listener = callbacks;\n }\n\n // Make sure the listener isn't already in the list.\n var registered = false;\n for (var i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n registered = true;\n break;\n }\n }\n\n if (!registered) listeners.push(listener);\n\n return listener;\n}\n\nfunction removeAsyncListener(listener) {\n for (var i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n break;\n }\n }\n}\n\nprocess.createAsyncListener = createAsyncListener;\nprocess.addAsyncListener = addAsyncListener;\nprocess.removeAsyncListener = removeAsyncListener;\n\nmodule.exports = wrapCallback;\n","'use strict';\n\nif (process.addAsyncListener) throw new Error(\"Don't require polyfill unless needed\");\n\nvar shimmer = require('shimmer')\n , semver = require('semver')\n , wrap = shimmer.wrap\n , massWrap = shimmer.massWrap\n , wrapCallback = require('./glue.js')\n , util = require('util')\n ;\n\nvar v6plus = semver.gte(process.version, '6.0.0');\nvar v7plus = semver.gte(process.version, '7.0.0');\nvar v8plus = semver.gte(process.version, '8.0.0');\nvar v11plus = semver.gte(process.version, '11.0.0');\n\nvar net = require('net');\n\n// From Node.js v7.0.0, net._normalizeConnectArgs have been renamed net._normalizeArgs\nif (v7plus && !net._normalizeArgs) {\n // a polyfill in our polyfill etc so forth -- taken from node master on 2017/03/09\n net._normalizeArgs = function (args) {\n if (args.length === 0) {\n return [{}, null];\n }\n\n var arg0 = args[0];\n var options = {};\n if (typeof arg0 === 'object' && arg0 !== null) {\n // (options[...][, cb])\n options = arg0;\n } else if (isPipeName(arg0)) {\n // (path[...][, cb])\n options.path = arg0;\n } else {\n // ([port][, host][...][, cb])\n options.port = arg0;\n if (args.length > 1 && typeof args[1] === 'string') {\n options.host = args[1];\n }\n }\n\n var cb = args[args.length - 1];\n if (typeof cb !== 'function')\n return [options, null];\n else\n return [options, cb];\n }\n} else if (!v7plus && !net._normalizeConnectArgs) {\n // a polyfill in our polyfill etc so forth -- taken from node master on 2013/10/30\n net._normalizeConnectArgs = function (args) {\n var options = {};\n\n function toNumber(x) { return (x = Number(x)) >= 0 ? x : false; }\n\n if (typeof args[0] === 'object' && args[0] !== null) {\n // connect(options, [cb])\n options = args[0];\n }\n else if (typeof args[0] === 'string' && toNumber(args[0]) === false) {\n // connect(path, [cb]);\n options.path = args[0];\n }\n else {\n // connect(port, [host], [cb])\n options.port = args[0];\n if (typeof args[1] === 'string') {\n options.host = args[1];\n }\n }\n\n var cb = args[args.length - 1];\n return typeof cb === 'function' ? [options, cb] : [options];\n };\n}\n\n// In https://github.com/nodejs/node/pull/11796 `_listen2` was renamed\n// `_setUpListenHandle`. It's still aliased as `_listen2`, and currently the\n// Node internals still call the alias - but who knows for how long. So better\n// make sure we use the new name instead if available.\nif ('_setUpListenHandle' in net.Server.prototype) {\n wrap(net.Server.prototype, '_setUpListenHandle', wrapSetUpListenHandle);\n} else {\n wrap(net.Server.prototype, '_listen2', wrapSetUpListenHandle);\n}\n\nfunction wrapSetUpListenHandle(original) {\n return function () {\n this.on('connection', function (socket) {\n if (socket._handle) {\n socket._handle.onread = wrapCallback(socket._handle.onread);\n }\n });\n\n try {\n return original.apply(this, arguments);\n }\n finally {\n // the handle will only not be set in cases where there has been an error\n if (this._handle && this._handle.onconnection) {\n this._handle.onconnection = wrapCallback(this._handle.onconnection);\n }\n }\n };\n}\n\nfunction patchOnRead(ctx) {\n if (ctx && ctx._handle) {\n var handle = ctx._handle;\n if (!handle._originalOnread) {\n handle._originalOnread = handle.onread;\n }\n handle.onread = wrapCallback(handle._originalOnread);\n }\n}\n\nwrap(net.Socket.prototype, 'connect', function (original) {\n return function () {\n var args;\n // Node core uses an internal Symbol here to guard against the edge-case\n // where the user accidentally passes in an array. As we don't have access\n // to this Symbol we resort to this hack where we just detect if there is a\n // symbol or not. Checking for the number of Symbols is by no means a fool\n // proof solution, but it catches the most basic cases.\n if (v8plus &&\n Array.isArray(arguments[0]) &&\n Object.getOwnPropertySymbols(arguments[0]).length > 0) {\n // already normalized\n args = arguments[0];\n } else {\n // From Node.js v7.0.0, net._normalizeConnectArgs have been renamed net._normalizeArgs\n args = v7plus\n ? net._normalizeArgs(arguments)\n : net._normalizeConnectArgs(arguments);\n }\n if (args[1]) args[1] = wrapCallback(args[1]);\n var result = original.apply(this, args);\n patchOnRead(this);\n return result;\n };\n});\n\nvar http = require('http');\n\n// NOTE: A rewrite occurred in 0.11 that changed the addRequest signature\n// from (req, host, port, localAddress) to (req, options)\n// Here, I use the longer signature to maintain 0.10 support, even though\n// the rest of the arguments aren't actually used\nwrap(http.Agent.prototype, 'addRequest', function (original) {\n return function (req) {\n var onSocket = req.onSocket;\n req.onSocket = wrapCallback(function (socket) {\n patchOnRead(socket);\n return onSocket.apply(this, arguments);\n });\n return original.apply(this, arguments);\n };\n});\n\nvar childProcess = require('child_process');\n\nfunction wrapChildProcess(child) {\n if (Array.isArray(child.stdio)) {\n child.stdio.forEach(function (socket) {\n if (socket && socket._handle) {\n socket._handle.onread = wrapCallback(socket._handle.onread);\n wrap(socket._handle, 'close', activatorFirst);\n }\n });\n }\n\n if (child._handle) {\n child._handle.onexit = wrapCallback(child._handle.onexit);\n }\n}\n\n// iojs v2.0.0+\nif (childProcess.ChildProcess) {\n wrap(childProcess.ChildProcess.prototype, 'spawn', function (original) {\n return function () {\n var result = original.apply(this, arguments);\n wrapChildProcess(this);\n return result;\n };\n });\n} else {\n massWrap(childProcess, [\n 'execFile', // exec is implemented in terms of execFile\n 'fork',\n 'spawn'\n ], function (original) {\n return function () {\n var result = original.apply(this, arguments);\n wrapChildProcess(result);\n return result;\n };\n });\n}\n\n// need unwrapped nextTick for use within < 0.9 async error handling\nif (!process._fatalException) {\n process._originalNextTick = process.nextTick;\n}\n\nvar processors = [];\nif (process._nextDomainTick) processors.push('_nextDomainTick');\nif (process._tickDomainCallback) processors.push('_tickDomainCallback');\n\nmassWrap(\n process,\n processors,\n activator\n);\nwrap(process, 'nextTick', activatorFirst);\n\nvar asynchronizers = [\n 'setTimeout',\n 'setInterval'\n];\nif (global.setImmediate) asynchronizers.push('setImmediate');\n\nvar timers = require('timers');\nvar patchGlobalTimers = global.setTimeout === timers.setTimeout;\n\nmassWrap(\n timers,\n asynchronizers,\n activatorFirst\n);\n\nif (patchGlobalTimers) {\n massWrap(\n global,\n asynchronizers,\n activatorFirst\n );\n}\n\nvar dns = require('dns');\nmassWrap(\n dns,\n [\n 'lookup',\n 'resolve',\n 'resolve4',\n 'resolve6',\n 'resolveCname',\n 'resolveMx',\n 'resolveNs',\n 'resolveTxt',\n 'resolveSrv',\n 'reverse'\n ],\n activator\n);\n\nif (dns.resolveNaptr) wrap(dns, 'resolveNaptr', activator);\n\nvar fs = require('fs');\nmassWrap(\n fs,\n [\n 'watch',\n 'rename',\n 'truncate',\n 'chown',\n 'fchown',\n 'chmod',\n 'fchmod',\n 'stat',\n 'lstat',\n 'fstat',\n 'link',\n 'symlink',\n 'readlink',\n 'realpath',\n 'unlink',\n 'rmdir',\n 'mkdir',\n 'readdir',\n 'close',\n 'open',\n 'utimes',\n 'futimes',\n 'fsync',\n 'write',\n 'read',\n 'readFile',\n 'writeFile',\n 'appendFile',\n 'watchFile',\n 'unwatchFile',\n \"exists\",\n ],\n activator\n);\n\n// only wrap lchown and lchmod on systems that have them.\nif (fs.lchown) wrap(fs, 'lchown', activator);\nif (fs.lchmod) wrap(fs, 'lchmod', activator);\n\n// only wrap ftruncate in versions of node that have it\nif (fs.ftruncate) wrap(fs, 'ftruncate', activator);\n\n// Wrap zlib streams\nvar zlib;\ntry { zlib = require('zlib'); } catch (err) { }\nif (zlib && zlib.Deflate && zlib.Deflate.prototype) {\n var proto = Object.getPrototypeOf(zlib.Deflate.prototype);\n if (proto._transform) {\n // streams2\n wrap(proto, \"_transform\", activator);\n }\n else if (proto.write && proto.flush && proto.end) {\n // plain ol' streams\n massWrap(\n proto,\n [\n 'write',\n 'flush',\n 'end'\n ],\n activator\n );\n }\n}\n\n// Wrap Crypto\nvar crypto;\ntry { crypto = require('crypto'); } catch (err) { }\nif (crypto) {\n\n var toWrap = [\n 'pbkdf2',\n 'randomBytes',\n ];\n if (!v11plus) {\n toWrap.push('pseudoRandomBytes');\n }\n\n massWrap(crypto, toWrap, activator);\n}\n\n// It is unlikely that any userspace promise implementations have a native\n// implementation of both Promise and Promise.toString.\nvar instrumentPromise = !!global.Promise &&\n Promise.toString() === 'function Promise() { [native code] }' &&\n Promise.toString.toString() === 'function toString() { [native code] }';\n\n// Check that global Promise is native\nif (instrumentPromise) {\n // shoult not use any methods that have already been wrapped\n var promiseListener = process.addAsyncListener({\n create: function create() {\n instrumentPromise = false;\n }\n });\n\n // should not resolve synchronously\n global.Promise.resolve(true).then(function notSync() {\n instrumentPromise = false;\n });\n\n process.removeAsyncListener(promiseListener);\n}\n\n/*\n * Native promises use the microtask queue to make all callbacks run\n * asynchronously to avoid Zalgo issues. Since the microtask queue is not\n * exposed externally, promises need to be modified in a fairly invasive and\n * complex way.\n *\n * The async boundary in promises that must be patched is between the\n * fulfillment of the promise and the execution of any callback that is waiting\n * for that fulfillment to happen. This means that we need to trigger a create\n * when resolve or reject is called and trigger before, after and error handlers\n * around the callback execution. There may be multiple callbacks for each\n * fulfilled promise, so handlers will behave similar to setInterval where\n * there may be multiple before after and error calls for each create call.\n *\n * async-listener monkeypatching has one basic entry point: `wrapCallback`.\n * `wrapCallback` should be called when create should be triggered and be\n * passed a function to wrap, which will execute the body of the async work.\n * The resolve and reject calls can be modified fairly easily to call\n * `wrapCallback`, but at the time of resolve and reject all the work to be done\n * on fulfillment may not be defined, since a call to then, chain or fetch can\n * be made even after the promise has been fulfilled. To get around this, we\n * create a placeholder function which will call a function passed into it,\n * since the call to the main work is being made from within the wrapped\n * function, async-listener will work correctly.\n *\n * There is another complication with monkeypatching Promises. Calls to then,\n * chain and catch each create new Promises that are fulfilled internally in\n * different ways depending on the return value of the callback. When the\n * callback return a Promise, the new Promise is resolved asynchronously after\n * the returned Promise has been also been resolved. When something other than\n * a promise is resolved the resolve call for the new Promise is put in the\n * microtask queue and asynchronously resolved.\n *\n * Then must be wrapped so that its returned promise has a wrapper that can be\n * used to invoke further continuations. This wrapper cannot be created until\n * after the callback has run, since the callback may return either a promise\n * or another value. Fortunately we already have a wrapper function around the\n * callback we can use (the wrapper created by resolve or reject).\n *\n * By adding an additional argument to this wrapper, we can pass in the\n * returned promise so it can have its own wrapper appended. the wrapper\n * function can the call the callback, and take action based on the return\n * value. If a promise is returned, the new Promise can proxy the returned\n * Promise's wrapper (this wrapper may not exist yet, but will by the time the\n * wrapper needs to be invoked). Otherwise, a new wrapper can be create the\n * same way as in resolve and reject. Since this wrapper is created\n * synchronously within another wrapper, it will properly appear as a\n * continuation from within the callback.\n */\n\nif (instrumentPromise) {\n wrapPromise();\n}\n\nfunction wrapPromise() {\n var Promise = global.Promise;\n\n // Updates to this class should also be applied to the the ES6 version\n // in es6-wrapped-promise.js.\n function wrappedPromise(executor) {\n if (!(this instanceof wrappedPromise)) {\n return Promise(executor);\n }\n\n if (typeof executor !== 'function') {\n return new Promise(executor);\n }\n\n var context, args;\n var promise = new Promise(wrappedExecutor);\n promise.__proto__ = wrappedPromise.prototype;\n\n try {\n executor.apply(context, args);\n } catch (err) {\n args[1](err);\n }\n\n return promise;\n\n function wrappedExecutor(resolve, reject) {\n context = this;\n args = [wrappedResolve, wrappedReject];\n\n // These wrappers create a function that can be passed a function and an argument to\n // call as a continuation from the resolve or reject.\n function wrappedResolve(val) {\n ensureAslWrapper(promise, false);\n return resolve(val);\n }\n\n function wrappedReject(val) {\n ensureAslWrapper(promise, false);\n return reject(val);\n }\n }\n }\n\n util.inherits(wrappedPromise, Promise);\n\n wrap(Promise.prototype, 'then', wrapThen);\n // Node.js = 0 ? x : false;\n}\n\n// taken from node master on 2017/03/09\nfunction isPipeName(s) {\n return typeof s === 'string' && toNumber(s) === false;\n}\n","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n","var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n","var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n","'use strict';\n\nconst util = require('util');\nconst assert = require('assert');\nconst wrapEmitter = require('emitter-listener');\nconst asyncHook = require('async-hook-jl');\n\nconst CONTEXTS_SYMBOL = 'cls@contexts';\nconst ERROR_SYMBOL = 'error@context';\n\n//const trace = [];\n\nconst invertedProviders = [];\nfor (let key in asyncHook.providers) {\n invertedProviders[asyncHook.providers[key]] = key;\n}\n\nconst DEBUG_CLS_HOOKED = process.env.DEBUG_CLS_HOOKED;\n\nlet currentUid = -1;\n\nmodule.exports = {\n getNamespace: getNamespace,\n createNamespace: createNamespace,\n destroyNamespace: destroyNamespace,\n reset: reset,\n //trace: trace,\n ERROR_SYMBOL: ERROR_SYMBOL\n};\n\nfunction Namespace(name) {\n this.name = name;\n // changed in 2.7: no default context\n this.active = null;\n this._set = [];\n this.id = null;\n this._contexts = new Map();\n}\n\nNamespace.prototype.set = function set(key, value) {\n if (!this.active) {\n throw new Error('No context available. ns.run() or ns.bind() must be called first.');\n }\n\n if (DEBUG_CLS_HOOKED) {\n debug2(' SETTING KEY:' + key + '=' + value + ' in ns:' + this.name + ' uid:' + currentUid + ' active:' +\n util.inspect(this.active, true));\n }\n this.active[key] = value;\n return value;\n};\n\nNamespace.prototype.get = function get(key) {\n if (!this.active) {\n if (DEBUG_CLS_HOOKED) {\n debug2(' GETTING KEY:' + key + '=undefined' + ' ' + this.name + ' uid:' + currentUid + ' active:' +\n util.inspect(this.active, true));\n }\n return undefined;\n }\n if (DEBUG_CLS_HOOKED) {\n debug2(' GETTING KEY:' + key + '=' + this.active[key] + ' ' + this.name + ' uid:' + currentUid + ' active:' +\n util.inspect(this.active, true));\n }\n return this.active[key];\n};\n\nNamespace.prototype.createContext = function createContext() {\n if (DEBUG_CLS_HOOKED) {\n debug2(' CREATING Context: ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' ' + ' active:' +\n util.inspect(this.active, true, 2, true));\n }\n\n let context = Object.create(this.active ? this.active : Object.prototype);\n context._ns_name = this.name;\n context.id = currentUid;\n\n if (DEBUG_CLS_HOOKED) {\n debug2(' CREATED Context: ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' ' + ' context:' +\n util.inspect(context, true, 2, true));\n }\n\n return context;\n};\n\nNamespace.prototype.run = function run(fn) {\n let context = this.createContext();\n this.enter(context);\n try {\n if (DEBUG_CLS_HOOKED) {\n debug2(' BEFORE RUN: ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' ' +\n util.inspect(context));\n }\n fn(context);\n return context;\n }\n catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n }\n finally {\n if (DEBUG_CLS_HOOKED) {\n debug2(' AFTER RUN: ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' ' +\n util.inspect(context));\n }\n this.exit(context);\n }\n};\n\nNamespace.prototype.runAndReturn = function runAndReturn(fn) {\n var value;\n this.run(function (context) {\n value = fn(context);\n });\n return value;\n};\n\n/**\n * Uses global Promise and assumes Promise is cls friendly or wrapped already.\n * @param {function} fn\n * @returns {*}\n */\nNamespace.prototype.runPromise = function runPromise(fn) {\n let context = this.createContext();\n this.enter(context);\n\n let promise = fn(context);\n if (!promise || !promise.then || !promise.catch) {\n throw new Error('fn must return a promise.');\n }\n\n if (DEBUG_CLS_HOOKED) {\n debug2(' BEFORE runPromise: ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' ' +\n util.inspect(context));\n }\n\n return promise\n .then(result => {\n if (DEBUG_CLS_HOOKED) {\n debug2(' AFTER runPromise: ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' ' +\n util.inspect(context));\n }\n this.exit(context);\n return result;\n })\n .catch(err => {\n err[ERROR_SYMBOL] = context;\n if (DEBUG_CLS_HOOKED) {\n debug2(' AFTER runPromise: ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' ' +\n util.inspect(context));\n }\n this.exit(context);\n throw err;\n });\n};\n\nNamespace.prototype.bind = function bindFactory(fn, context) {\n if (!context) {\n if (!this.active) {\n context = this.createContext();\n }\n else {\n context = this.active;\n }\n }\n\n let self = this;\n return function clsBind() {\n self.enter(context);\n try {\n return fn.apply(this, arguments);\n }\n catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n }\n finally {\n self.exit(context);\n }\n };\n};\n\nNamespace.prototype.enter = function enter(context) {\n assert.ok(context, 'context must be provided for entering');\n if (DEBUG_CLS_HOOKED) {\n debug2(' ENTER ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' context: ' +\n util.inspect(context));\n }\n\n this._set.push(this.active);\n this.active = context;\n};\n\nNamespace.prototype.exit = function exit(context) {\n assert.ok(context, 'context must be provided for exiting');\n if (DEBUG_CLS_HOOKED) {\n debug2(' EXIT ' + this.name + ' uid:' + currentUid + ' len:' + this._set.length + ' context: ' +\n util.inspect(context));\n }\n\n // Fast path for most exits that are at the top of the stack\n if (this.active === context) {\n assert.ok(this._set.length, 'can\\'t remove top context');\n this.active = this._set.pop();\n return;\n }\n\n // Fast search in the stack using lastIndexOf\n let index = this._set.lastIndexOf(context);\n\n if (index < 0) {\n if (DEBUG_CLS_HOOKED) {\n debug2('??ERROR?? context exiting but not entered - ignoring: ' + util.inspect(context));\n }\n assert.ok(index >= 0, 'context not currently entered; can\\'t exit. \\n' + util.inspect(this) + '\\n' +\n util.inspect(context));\n } else {\n assert.ok(index, 'can\\'t remove top context');\n this._set.splice(index, 1);\n }\n};\n\nNamespace.prototype.bindEmitter = function bindEmitter(emitter) {\n assert.ok(emitter.on && emitter.addListener && emitter.emit, 'can only bind real EEs');\n\n let namespace = this;\n let thisSymbol = 'context@' + this.name;\n\n // Capture the context active at the time the emitter is bound.\n function attach(listener) {\n if (!listener) {\n return;\n }\n if (!listener[CONTEXTS_SYMBOL]) {\n listener[CONTEXTS_SYMBOL] = Object.create(null);\n }\n\n listener[CONTEXTS_SYMBOL][thisSymbol] = {\n namespace: namespace,\n context: namespace.active\n };\n }\n\n // At emit time, bind the listener within the correct context.\n function bind(unwrapped) {\n if (!(unwrapped && unwrapped[CONTEXTS_SYMBOL])) {\n return unwrapped;\n }\n\n let wrapped = unwrapped;\n let unwrappedContexts = unwrapped[CONTEXTS_SYMBOL];\n Object.keys(unwrappedContexts).forEach(function (name) {\n let thunk = unwrappedContexts[name];\n wrapped = thunk.namespace.bind(wrapped, thunk.context);\n });\n return wrapped;\n }\n\n wrapEmitter(emitter, attach, bind);\n};\n\n/**\n * If an error comes out of a namespace, it will have a context attached to it.\n * This function knows how to find it.\n *\n * @param {Error} exception Possibly annotated error.\n */\nNamespace.prototype.fromException = function fromException(exception) {\n return exception[ERROR_SYMBOL];\n};\n\nfunction getNamespace(name) {\n return process.namespaces[name];\n}\n\nfunction createNamespace(name) {\n assert.ok(name, 'namespace must be given a name.');\n\n if (DEBUG_CLS_HOOKED) {\n debug2('CREATING NAMESPACE ' + name);\n }\n let namespace = new Namespace(name);\n namespace.id = currentUid;\n\n asyncHook.addHooks({\n init(uid, handle, provider, parentUid, parentHandle) {\n //parentUid = parentUid || currentUid; // Suggested usage but appears to work better for tracing modules.\n currentUid = uid;\n\n //CHAIN Parent's Context onto child if none exists. This is needed to pass net-events.spec\n if (parentUid) {\n namespace._contexts.set(uid, namespace._contexts.get(parentUid));\n if (DEBUG_CLS_HOOKED) {\n debug2('PARENTID: ' + name + ' uid:' + uid + ' parent:' + parentUid + ' provider:' + provider);\n }\n } else {\n namespace._contexts.set(currentUid, namespace.active);\n }\n\n if (DEBUG_CLS_HOOKED) {\n debug2('INIT ' + name + ' uid:' + uid + ' parent:' + parentUid + ' provider:' + invertedProviders[provider]\n + ' active:' + util.inspect(namespace.active, true));\n }\n\n },\n pre(uid, handle) {\n currentUid = uid;\n let context = namespace._contexts.get(uid);\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n debug2(' PRE ' + name + ' uid:' + uid + ' handle:' + getFunctionName(handle) + ' context:' +\n util.inspect(context));\n }\n\n namespace.enter(context);\n } else {\n if (DEBUG_CLS_HOOKED) {\n debug2(' PRE MISSING CONTEXT ' + name + ' uid:' + uid + ' handle:' + getFunctionName(handle));\n }\n }\n },\n post(uid, handle) {\n currentUid = uid;\n let context = namespace._contexts.get(uid);\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n debug2(' POST ' + name + ' uid:' + uid + ' handle:' + getFunctionName(handle) + ' context:' +\n util.inspect(context));\n }\n\n namespace.exit(context);\n } else {\n if (DEBUG_CLS_HOOKED) {\n debug2(' POST MISSING CONTEXT ' + name + ' uid:' + uid + ' handle:' + getFunctionName(handle));\n }\n }\n },\n destroy(uid) {\n currentUid = uid;\n\n if (DEBUG_CLS_HOOKED) {\n debug2('DESTROY ' + name + ' uid:' + uid + ' context:' + util.inspect(namespace._contexts.get(currentUid))\n + ' active:' + util.inspect(namespace.active, true));\n }\n\n namespace._contexts.delete(uid);\n }\n });\n\n process.namespaces[name] = namespace;\n return namespace;\n}\n\nfunction destroyNamespace(name) {\n let namespace = getNamespace(name);\n\n assert.ok(namespace, 'can\\'t delete nonexistent namespace! \"' + name + '\"');\n assert.ok(namespace.id, 'don\\'t assign to process.namespaces directly! ' + util.inspect(namespace));\n\n process.namespaces[name] = null;\n}\n\nfunction reset() {\n // must unregister async listeners\n if (process.namespaces) {\n Object.keys(process.namespaces).forEach(function (name) {\n destroyNamespace(name);\n });\n }\n process.namespaces = Object.create(null);\n}\n\nprocess.namespaces = {};\n\nif (asyncHook._state && !asyncHook._state.enabled) {\n asyncHook.enable();\n}\n\nfunction debug2(msg) {\n if (process.env.DEBUG) {\n process._rawDebug(msg);\n }\n}\n\n\n/*function debug(from, ns) {\n process._rawDebug('DEBUG: ' + util.inspect({\n from: from,\n currentUid: currentUid,\n context: ns ? ns._contexts.get(currentUid) : 'no ns'\n }, true, 2, true));\n }*/\n\n\nfunction getFunctionName(fn) {\n if (!fn) {\n return fn;\n }\n if (typeof fn === 'function') {\n if (fn.name) {\n return fn.name;\n }\n return (fn.toString().trim().match(/^function\\s*([^\\s(]+)/) || [])[1];\n } else if (fn.constructor && fn.constructor.name) {\n return fn.constructor.name;\n }\n}\n\n\n// Add back to callstack\nif (DEBUG_CLS_HOOKED) {\n var stackChain = require('stack-chain');\n for (var modifier in stackChain.filter._modifiers) {\n stackChain.filter.deattach(modifier);\n }\n}\n","/* eslint-disable max-len */\n'use strict';\n\nconst util = require('util');\nconst assert = require('assert');\nconst wrapEmitter = require('emitter-listener');\nconst async_hooks = require('async_hooks');\n\nconst CONTEXTS_SYMBOL = 'cls@contexts';\nconst ERROR_SYMBOL = 'error@context';\n\nconst DEBUG_CLS_HOOKED = process.env.DEBUG_CLS_HOOKED;\n\nlet currentUid = -1;\n\nmodule.exports = {\n getNamespace: getNamespace,\n createNamespace: createNamespace,\n destroyNamespace: destroyNamespace,\n reset: reset,\n ERROR_SYMBOL: ERROR_SYMBOL\n};\n\nfunction Namespace(name) {\n this.name = name;\n // changed in 2.7: no default context\n this.active = null;\n this._set = [];\n this.id = null;\n this._contexts = new Map();\n this._indent = 0;\n}\n\nNamespace.prototype.set = function set(key, value) {\n if (!this.active) {\n throw new Error('No context available. ns.run() or ns.bind() must be called first.');\n }\n\n this.active[key] = value;\n\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(indentStr + 'CONTEXT-SET KEY:' + key + '=' + value + ' in ns:' + this.name + ' currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n }\n\n return value;\n};\n\nNamespace.prototype.get = function get(key) {\n if (!this.active) {\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.currentId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n //debug2(indentStr + 'CONTEXT-GETTING KEY NO ACTIVE NS:' + key + '=undefined' + ' (' + this.name + ') currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n debug2(`${indentStr}CONTEXT-GETTING KEY NO ACTIVE NS: (${this.name}) ${key}=undefined currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length}`);\n }\n return undefined;\n }\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(indentStr + 'CONTEXT-GETTING KEY:' + key + '=' + this.active[key] + ' (' + this.name + ') currentUid:' + currentUid + ' active:' + util.inspect(this.active, {showHidden:true, depth:2, colors:true}));\n debug2(`${indentStr}CONTEXT-GETTING KEY: (${this.name}) ${key}=${this.active[key]} currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length} active:${util.inspect(this.active)}`);\n }\n return this.active[key];\n};\n\nNamespace.prototype.createContext = function createContext() {\n // Prototype inherit existing context if created a new child context within existing context.\n let context = Object.create(this.active ? this.active : Object.prototype);\n context._ns_name = this.name;\n context.id = currentUid;\n\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-CREATED Context: (${this.name}) currentUid:${currentUid} asyncHooksCurrentId:${asyncHooksCurrentId} triggerId:${triggerId} len:${this._set.length} context:${util.inspect(context, {showHidden:true, depth:2, colors:true})}`);\n }\n\n return context;\n};\n\nNamespace.prototype.run = function run(fn) {\n let context = this.createContext();\n this.enter(context);\n\n try {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-RUN BEGIN: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} context:${util.inspect(context)}`);\n }\n fn(context);\n return context;\n } catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n } finally {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-RUN END: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n this.exit(context);\n }\n};\n\nNamespace.prototype.runAndReturn = function runAndReturn(fn) {\n let value;\n this.run(function (context) {\n value = fn(context);\n });\n return value;\n};\n\n/**\n * Uses global Promise and assumes Promise is cls friendly or wrapped already.\n * @param {function} fn\n * @returns {*}\n */\nNamespace.prototype.runPromise = function runPromise(fn) {\n let context = this.createContext();\n this.enter(context);\n\n let promise = fn(context);\n if (!promise || !promise.then || !promise.catch) {\n throw new Error('fn must return a promise.');\n }\n\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise BEFORE: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n\n return promise\n .then(result => {\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise AFTER then: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n this.exit(context);\n return result;\n })\n .catch(err => {\n err[ERROR_SYMBOL] = context;\n if (DEBUG_CLS_HOOKED) {\n debug2('CONTEXT-runPromise AFTER catch: (' + this.name + ') currentUid:' + currentUid + ' len:' + this._set.length + ' ' + util.inspect(context));\n }\n this.exit(context);\n throw err;\n });\n};\n\nNamespace.prototype.bind = function bindFactory(fn, context) {\n if (!context) {\n if (!this.active) {\n context = this.createContext();\n } else {\n context = this.active;\n }\n }\n\n let self = this;\n return function clsBind() {\n self.enter(context);\n try {\n return fn.apply(this, arguments);\n } catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n } finally {\n self.exit(context);\n }\n };\n};\n\nNamespace.prototype.enter = function enter(context) {\n assert.ok(context, 'context must be provided for entering');\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-ENTER: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n\n this._set.push(this.active);\n this.active = context;\n};\n\nNamespace.prototype.exit = function exit(context) {\n assert.ok(context, 'context must be provided for exiting');\n if (DEBUG_CLS_HOOKED) {\n const asyncHooksCurrentId = async_hooks.executionAsyncId();\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(this._indent < 0 ? 0 : this._indent);\n debug2(`${indentStr}CONTEXT-EXIT: (${this.name}) currentUid:${currentUid} triggerId:${triggerId} asyncHooksCurrentId:${asyncHooksCurrentId} len:${this._set.length} ${util.inspect(context)}`);\n }\n\n // Fast path for most exits that are at the top of the stack\n if (this.active === context) {\n assert.ok(this._set.length, 'can\\'t remove top context');\n this.active = this._set.pop();\n return;\n }\n\n // Fast search in the stack using lastIndexOf\n let index = this._set.lastIndexOf(context);\n\n if (index < 0) {\n if (DEBUG_CLS_HOOKED) {\n debug2('??ERROR?? context exiting but not entered - ignoring: ' + util.inspect(context));\n }\n assert.ok(index >= 0, 'context not currently entered; can\\'t exit. \\n' + util.inspect(this) + '\\n' + util.inspect(context));\n } else {\n assert.ok(index, 'can\\'t remove top context');\n this._set.splice(index, 1);\n }\n};\n\nNamespace.prototype.bindEmitter = function bindEmitter(emitter) {\n assert.ok(emitter.on && emitter.addListener && emitter.emit, 'can only bind real EEs');\n\n let namespace = this;\n let thisSymbol = 'context@' + this.name;\n\n // Capture the context active at the time the emitter is bound.\n function attach(listener) {\n if (!listener) {\n return;\n }\n if (!listener[CONTEXTS_SYMBOL]) {\n listener[CONTEXTS_SYMBOL] = Object.create(null);\n }\n\n listener[CONTEXTS_SYMBOL][thisSymbol] = {\n namespace: namespace,\n context: namespace.active\n };\n }\n\n // At emit time, bind the listener within the correct context.\n function bind(unwrapped) {\n if (!(unwrapped && unwrapped[CONTEXTS_SYMBOL])) {\n return unwrapped;\n }\n\n let wrapped = unwrapped;\n let unwrappedContexts = unwrapped[CONTEXTS_SYMBOL];\n Object.keys(unwrappedContexts).forEach(function (name) {\n let thunk = unwrappedContexts[name];\n wrapped = thunk.namespace.bind(wrapped, thunk.context);\n });\n return wrapped;\n }\n\n wrapEmitter(emitter, attach, bind);\n};\n\n/**\n * If an error comes out of a namespace, it will have a context attached to it.\n * This function knows how to find it.\n *\n * @param {Error} exception Possibly annotated error.\n */\nNamespace.prototype.fromException = function fromException(exception) {\n return exception[ERROR_SYMBOL];\n};\n\nfunction getNamespace(name) {\n return process.namespaces[name];\n}\n\nfunction createNamespace(name) {\n assert.ok(name, 'namespace must be given a name.');\n\n if (DEBUG_CLS_HOOKED) {\n debug2(`NS-CREATING NAMESPACE (${name})`);\n }\n let namespace = new Namespace(name);\n namespace.id = currentUid;\n\n const hook = async_hooks.createHook({\n init(asyncId, type, triggerId, resource) {\n currentUid = async_hooks.executionAsyncId();\n\n //CHAIN Parent's Context onto child if none exists. This is needed to pass net-events.spec\n // let initContext = namespace.active;\n // if(!initContext && triggerId) {\n // let parentContext = namespace._contexts.get(triggerId);\n // if (parentContext) {\n // namespace.active = parentContext;\n // namespace._contexts.set(currentUid, parentContext);\n // if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) WITH PARENT CONTEXT asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // } else if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) MISSING CONTEXT asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // }else {\n // namespace._contexts.set(currentUid, namespace.active);\n // if (DEBUG_CLS_HOOKED) {\n // const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n // debug2(`${indentStr}INIT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, true)} resource:${resource}`);\n // }\n // }\n if(namespace.active) {\n namespace._contexts.set(asyncId, namespace.active);\n\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} resource:${resource}`);\n }\n }else if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n const triggerId = async_hooks.triggerAsyncId();\n const triggerIdContext = namespace._contexts.get(triggerId);\n if (triggerIdContext) {\n namespace._contexts.set(asyncId, triggerIdContext);\n if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT USING CONTEXT FROM TRIGGERID [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, { showHidden: true, depth: 2, colors: true })} resource:${resource}`);\n }\n } else if (DEBUG_CLS_HOOKED) {\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT MISSING CONTEXT [${type}] (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, { showHidden: true, depth: 2, colors: true })} resource:${resource}`);\n }\n }\n\n\n if(DEBUG_CLS_HOOKED && type === 'PROMISE'){\n debug2(util.inspect(resource, {showHidden: true}));\n const parentId = resource.parentId;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}INIT RESOURCE-PROMISE [${type}] (${name}) parentId:${parentId} asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} resource:${resource}`);\n }\n\n },\n before(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n let context;\n\n /*\n if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n //const triggerId = async_hooks.triggerAsyncId();\n context = namespace._contexts.get(asyncId); // || namespace._contexts.get(triggerId);\n }else{\n context = namespace._contexts.get(currentUid);\n }\n */\n\n //HACK to work with promises until they are fixed in node > 8.1.1\n context = namespace._contexts.get(asyncId) || namespace._contexts.get(currentUid);\n\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}BEFORE (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n namespace._indent += 2;\n }\n\n namespace.enter(context);\n\n } else if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}BEFORE MISSING CONTEXT (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} namespace._contexts:${util.inspect(namespace._contexts, {showHidden:true, depth:2, colors:true})}`);\n namespace._indent += 2;\n }\n },\n after(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n let context; // = namespace._contexts.get(currentUid);\n /*\n if(currentUid === 0){\n // CurrentId will be 0 when triggered from C++. Promise events\n // https://github.com/nodejs/node/blob/master/doc/api/async_hooks.md#triggerid\n //const triggerId = async_hooks.triggerAsyncId();\n context = namespace._contexts.get(asyncId); // || namespace._contexts.get(triggerId);\n }else{\n context = namespace._contexts.get(currentUid);\n }\n */\n //HACK to work with promises until they are fixed in node > 8.1.1\n context = namespace._contexts.get(asyncId) || namespace._contexts.get(currentUid);\n\n if (context) {\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n namespace._indent -= 2;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}AFTER (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n }\n\n namespace.exit(context);\n\n } else if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n namespace._indent -= 2;\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}AFTER MISSING CONTEXT (${name}) asyncId:${asyncId} currentUid:${currentUid} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(context)}`);\n }\n },\n destroy(asyncId) {\n currentUid = async_hooks.executionAsyncId();\n if (DEBUG_CLS_HOOKED) {\n const triggerId = async_hooks.triggerAsyncId();\n const indentStr = ' '.repeat(namespace._indent < 0 ? 0 : namespace._indent);\n debug2(`${indentStr}DESTROY (${name}) currentUid:${currentUid} asyncId:${asyncId} triggerId:${triggerId} active:${util.inspect(namespace.active, {showHidden:true, depth:2, colors:true})} context:${util.inspect(namespace._contexts.get(currentUid))}`);\n }\n\n namespace._contexts.delete(asyncId);\n }\n });\n\n hook.enable();\n\n process.namespaces[name] = namespace;\n return namespace;\n}\n\nfunction destroyNamespace(name) {\n let namespace = getNamespace(name);\n\n assert.ok(namespace, 'can\\'t delete nonexistent namespace! \"' + name + '\"');\n assert.ok(namespace.id, 'don\\'t assign to process.namespaces directly! ' + util.inspect(namespace));\n\n process.namespaces[name] = null;\n}\n\nfunction reset() {\n // must unregister async listeners\n if (process.namespaces) {\n Object.keys(process.namespaces).forEach(function (name) {\n destroyNamespace(name);\n });\n }\n process.namespaces = Object.create(null);\n}\n\nprocess.namespaces = {};\n\n//const fs = require('fs');\nfunction debug2(...args) {\n if (DEBUG_CLS_HOOKED) {\n //fs.writeSync(1, `${util.format(...args)}\\n`);\n process._rawDebug(`${util.format(...args)}`);\n }\n}\n\n/*function getFunctionName(fn) {\n if (!fn) {\n return fn;\n }\n if (typeof fn === 'function') {\n if (fn.name) {\n return fn.name;\n }\n return (fn.toString().trim().match(/^function\\s*([^\\s(]+)/) || [])[1];\n } else if (fn.constructor && fn.constructor.name) {\n return fn.constructor.name;\n }\n}*/\n\n\n","'use strict';\n\nconst semver = require('semver');\n\n/**\n * In order to increase node version support, this loads the version of context\n * that is appropriate for the version of on nodejs that is running.\n * Node < v8 - uses AsyncWrap and async-hooks-jl\n * Node >= v8 - uses native async-hooks\n */\nif(process && semver.gte(process.versions.node, '8.0.0')){\n module.exports = require('./context');\n}else{\n module.exports = require('./context-legacy');\n}\n","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","'use strict';\n\nvar assert = require('assert');\nvar wrapEmitter = require('emitter-listener');\n\n/*\n *\n * CONSTANTS\n *\n */\nvar CONTEXTS_SYMBOL = 'cls@contexts';\nvar ERROR_SYMBOL = 'error@context';\n\n// load polyfill if native support is unavailable\nif (!process.addAsyncListener) require('async-listener');\n\nfunction Namespace(name) {\n this.name = name;\n // changed in 2.7: no default context\n this.active = null;\n this._set = [];\n this.id = null;\n}\n\nNamespace.prototype.set = function (key, value) {\n if (!this.active) {\n throw new Error(\"No context available. ns.run() or ns.bind() must be called first.\");\n }\n\n this.active[key] = value;\n return value;\n};\n\nNamespace.prototype.get = function (key) {\n if (!this.active) return undefined;\n\n return this.active[key];\n};\n\nNamespace.prototype.createContext = function () {\n return Object.create(this.active);\n};\n\nNamespace.prototype.run = function (fn) {\n var context = this.createContext();\n this.enter(context);\n try {\n fn(context);\n return context;\n }\n catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n }\n finally {\n this.exit(context);\n }\n};\n\nNamespace.prototype.runAndReturn = function (fn) {\n var value;\n this.run(function (context) {\n value = fn(context);\n });\n return value;\n};\n\nNamespace.prototype.bind = function (fn, context) {\n if (!context) {\n if (!this.active) {\n context = this.createContext();\n }\n else {\n context = this.active;\n }\n }\n\n var self = this;\n return function () {\n self.enter(context);\n try {\n return fn.apply(this, arguments);\n }\n catch (exception) {\n if (exception) {\n exception[ERROR_SYMBOL] = context;\n }\n throw exception;\n }\n finally {\n self.exit(context);\n }\n };\n};\n\nNamespace.prototype.enter = function (context) {\n assert.ok(context, \"context must be provided for entering\");\n\n this._set.push(this.active);\n this.active = context;\n};\n\nNamespace.prototype.exit = function (context) {\n assert.ok(context, \"context must be provided for exiting\");\n\n // Fast path for most exits that are at the top of the stack\n if (this.active === context) {\n assert.ok(this._set.length, \"can't remove top context\");\n this.active = this._set.pop();\n return;\n }\n\n // Fast search in the stack using lastIndexOf\n var index = this._set.lastIndexOf(context);\n\n assert.ok(index >= 0, \"context not currently entered; can't exit\");\n assert.ok(index, \"can't remove top context\");\n\n this._set.splice(index, 1);\n};\n\nNamespace.prototype.bindEmitter = function (emitter) {\n assert.ok(emitter.on && emitter.addListener && emitter.emit, \"can only bind real EEs\");\n\n var namespace = this;\n var thisSymbol = 'context@' + this.name;\n\n // Capture the context active at the time the emitter is bound.\n function attach(listener) {\n if (!listener) return;\n if (!listener[CONTEXTS_SYMBOL]) listener[CONTEXTS_SYMBOL] = Object.create(null);\n\n listener[CONTEXTS_SYMBOL][thisSymbol] = {\n namespace : namespace,\n context : namespace.active\n };\n }\n\n // At emit time, bind the listener within the correct context.\n function bind(unwrapped) {\n if (!(unwrapped && unwrapped[CONTEXTS_SYMBOL])) return unwrapped;\n\n var wrapped = unwrapped;\n var contexts = unwrapped[CONTEXTS_SYMBOL];\n Object.keys(contexts).forEach(function (name) {\n var thunk = contexts[name];\n wrapped = thunk.namespace.bind(wrapped, thunk.context);\n });\n return wrapped;\n }\n\n wrapEmitter(emitter, attach, bind);\n};\n\n/**\n * If an error comes out of a namespace, it will have a context attached to it.\n * This function knows how to find it.\n *\n * @param {Error} exception Possibly annotated error.\n */\nNamespace.prototype.fromException = function (exception) {\n return exception[ERROR_SYMBOL];\n};\n\nfunction get(name) {\n return process.namespaces[name];\n}\n\nfunction create(name) {\n assert.ok(name, \"namespace must be given a name!\");\n\n var namespace = new Namespace(name);\n namespace.id = process.addAsyncListener({\n create : function () { return namespace.active; },\n before : function (context, storage) { if (storage) namespace.enter(storage); },\n after : function (context, storage) { if (storage) namespace.exit(storage); },\n error : function (storage) { if (storage) namespace.exit(storage); }\n });\n\n process.namespaces[name] = namespace;\n return namespace;\n}\n\nfunction destroy(name) {\n var namespace = get(name);\n\n assert.ok(namespace, \"can't delete nonexistent namespace!\");\n assert.ok(namespace.id, \"don't assign to process.namespaces directly!\");\n\n process.removeAsyncListener(namespace.id);\n process.namespaces[name] = null;\n}\n\nfunction reset() {\n // must unregister async listeners\n if (process.namespaces) {\n Object.keys(process.namespaces).forEach(function (name) {\n destroy(name);\n });\n }\n process.namespaces = Object.create(null);\n}\nif (!process.namespaces) reset(); // call immediately to set up\n\nmodule.exports = {\n getNamespace : get,\n createNamespace : create,\n destroyNamespace : destroy,\n reset : reset\n};\n",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe=true) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe=true) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA1 = C_algo.SHA1;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA1,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","'use strict';\nmodule.exports = (object, propertyName, fn) => {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = fn();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n};\n","var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.azureCoreTracing = exports.AzureMonitorSymbol = void 0;\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nexports.AzureMonitorSymbol = \"Azure_Monitor_Tracer\";\r\nvar publisherName = \"azure-coretracing\";\r\nvar isPatched = false;\r\n/**\r\n * By default, @azure/core-tracing default tracer is a NoopTracer.\r\n * This patching changes the default tracer to a patched BasicTracer\r\n * which emits ended spans as diag-channel events.\r\n *\r\n * The @opentelemetry/tracing package must be installed to use these patches\r\n * https://www.npmjs.com/package/@opentelemetry/tracing\r\n * @param coreTracing\r\n */\r\nvar azureCoreTracingPatchFunction = function (coreTracing) {\r\n if (isPatched) {\r\n // tracer is already cached -- noop\r\n return coreTracing;\r\n }\r\n try {\r\n var tracing = require(\"@opentelemetry/sdk-trace-base\");\r\n var api = require(\"@opentelemetry/api\");\r\n var defaultProvider = new tracing.BasicTracerProvider();\r\n var defaultTracer = defaultProvider.getTracer(\"applicationinsights tracer\");\r\n // Patch Azure SDK setTracer, @azure/core-tracing <= 1.0.0-preview.12\r\n if (coreTracing.setTracer) {\r\n var setTracerOriginal_1 = coreTracing.setTracer;\r\n coreTracing.setTracer = function (tracer) {\r\n // Patch startSpan instead of using spanProcessor.onStart because parentSpan must be\r\n // set while the span is constructed\r\n var startSpanOriginal = tracer.startSpan;\r\n tracer.startSpan = function (name, options, context) {\r\n var span = startSpanOriginal.call(this, name, options, context);\r\n var originalEnd = span.end;\r\n span.end = function () {\r\n var result = originalEnd.apply(this, arguments);\r\n diagnostic_channel_1.channel.publish(publisherName, span);\r\n return result;\r\n };\r\n return span;\r\n };\r\n tracer[exports.AzureMonitorSymbol] = true;\r\n setTracerOriginal_1.call(this, tracer);\r\n };\r\n api.trace.getSpan(api.context.active()); // seed OpenTelemetryScopeManagerWrapper with \"active\" symbol\r\n coreTracing.setTracer(defaultTracer);\r\n }\r\n else { // Patch OpenTelemetry setGlobalTracerProvider @azure/core-tracing > 1.0.0-preview.13\r\n var setGlobalTracerProviderOriginal_1 = api.trace.setGlobalTracerProvider;\r\n api.trace.setGlobalTracerProvider = function (tracerProvider) {\r\n var getTracerOriginal = tracerProvider.getTracer;\r\n tracerProvider.getTracer = function (tracerName, version) {\r\n var tracer = getTracerOriginal.call(this, tracerName, version);\r\n if (!tracer[exports.AzureMonitorSymbol]) { // Avoid patching multiple times\r\n var startSpanOriginal_1 = tracer.startSpan;\r\n tracer.startSpan = function (spanName, options, context) {\r\n var span = startSpanOriginal_1.call(this, spanName, options, context);\r\n var originalEnd = span.end;\r\n span.end = function () {\r\n var result = originalEnd.apply(this, arguments);\r\n diagnostic_channel_1.channel.publish(publisherName, span);\r\n return result;\r\n };\r\n return span;\r\n };\r\n tracer[exports.AzureMonitorSymbol] = true;\r\n }\r\n return tracer;\r\n };\r\n return setGlobalTracerProviderOriginal_1.call(this, tracerProvider);\r\n };\r\n defaultProvider.register();\r\n api.trace.getSpan(api.context.active()); // seed OpenTelemetryScopeManagerWrapper with \"active\" symbol\r\n // Register Azure SDK instrumentation\r\n var openTelemetryInstr = require(\"@opentelemetry/instrumentation\");\r\n var azureSdkInstr = require(\"@azure/opentelemetry-instrumentation-azure-sdk\");\r\n openTelemetryInstr.registerInstrumentations({\r\n instrumentations: [\r\n azureSdkInstr.createAzureSdkInstrumentation()\r\n ]\r\n });\r\n }\r\n isPatched = true;\r\n }\r\n catch (e) { /* squash errors */ }\r\n return coreTracing;\r\n};\r\nexports.azureCoreTracing = {\r\n versionSpecifier: \">= 1.0.0 < 2.0.0\",\r\n patch: azureCoreTracingPatchFunction,\r\n publisherName: publisherName\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"@azure/core-tracing\", exports.azureCoreTracing);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=azure-coretracing.pub.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.bunyan = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar bunyanPatchFunction = function (originalBunyan) {\r\n var originalEmit = originalBunyan.prototype._emit;\r\n originalBunyan.prototype._emit = function (rec, noemit) {\r\n var ret = originalEmit.apply(this, arguments);\r\n if (!noemit) {\r\n var str = ret;\r\n if (!str) {\r\n str = originalEmit.call(this, rec, true);\r\n }\r\n diagnostic_channel_1.channel.publish(\"bunyan\", { level: rec.level, result: str });\r\n }\r\n return ret;\r\n };\r\n return originalBunyan;\r\n};\r\nexports.bunyan = {\r\n versionSpecifier: \">= 1.0.0 < 2.0.0\",\r\n patch: bunyanPatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"bunyan\", exports.bunyan);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=bunyan.pub.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.console = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar stream_1 = require(\"stream\");\r\nvar consolePatchFunction = function (originalConsole) {\r\n var aiLoggingOutStream = new stream_1.Writable();\r\n var aiLoggingErrStream = new stream_1.Writable();\r\n // Default console is roughly equivalent to `new Console(process.stdout, process.stderr)`\r\n // We create a version which publishes to the channel and also to stdout/stderr\r\n aiLoggingOutStream.write = function (chunk) {\r\n if (!chunk) {\r\n return true;\r\n }\r\n var message = chunk.toString();\r\n diagnostic_channel_1.channel.publish(\"console\", { message: message });\r\n return true;\r\n };\r\n aiLoggingErrStream.write = function (chunk) {\r\n if (!chunk) {\r\n return true;\r\n }\r\n var message = chunk.toString();\r\n diagnostic_channel_1.channel.publish(\"console\", { message: message, stderr: true });\r\n return true;\r\n };\r\n var aiLoggingConsole = new originalConsole.Console(aiLoggingOutStream, aiLoggingErrStream);\r\n var consoleMethods = [\"log\", \"info\", \"warn\", \"error\", \"dir\", \"time\", \"timeEnd\", \"trace\", \"assert\"];\r\n var _loop_1 = function (method) {\r\n var originalMethod = originalConsole[method];\r\n if (originalMethod) {\r\n originalConsole[method] = function () {\r\n if (aiLoggingConsole[method]) {\r\n try {\r\n aiLoggingConsole[method].apply(aiLoggingConsole, arguments);\r\n }\r\n catch (e) {\r\n // Ignore errors; allow the original method to throw if necessary\r\n }\r\n }\r\n return originalMethod.apply(originalConsole, arguments);\r\n };\r\n }\r\n };\r\n for (var _i = 0, consoleMethods_1 = consoleMethods; _i < consoleMethods_1.length; _i++) {\r\n var method = consoleMethods_1[_i];\r\n _loop_1(method);\r\n }\r\n return originalConsole;\r\n};\r\nexports.console = {\r\n versionSpecifier: \">= 4.0.0\",\r\n patch: consolePatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"console\", exports.console);\r\n // Force patching of console\r\n /* tslint:disable-next-line:no-var-requires */\r\n require(\"console\");\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=console.pub.js.map","\"use strict\";\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.tedious = exports.pgPool = exports.pg = exports.winston = exports.redis = exports.mysql = exports.mongodb = exports.mongodbCore = exports.console = exports.bunyan = exports.azuresdk = void 0;\r\nvar azuresdk = require(\"./azure-coretracing.pub\");\r\nexports.azuresdk = azuresdk;\r\nvar bunyan = require(\"./bunyan.pub\");\r\nexports.bunyan = bunyan;\r\nvar consolePub = require(\"./console.pub\");\r\nexports.console = consolePub;\r\nvar mongodbCore = require(\"./mongodb-core.pub\");\r\nexports.mongodbCore = mongodbCore;\r\nvar mongodb = require(\"./mongodb.pub\");\r\nexports.mongodb = mongodb;\r\nvar mysql = require(\"./mysql.pub\");\r\nexports.mysql = mysql;\r\nvar pgPool = require(\"./pg-pool.pub\");\r\nexports.pgPool = pgPool;\r\nvar pg = require(\"./pg.pub\");\r\nexports.pg = pg;\r\nvar redis = require(\"./redis.pub\");\r\nexports.redis = redis;\r\nvar tedious = require(\"./tedious.pub\");\r\nexports.tedious = tedious;\r\nvar winston = require(\"./winston.pub\");\r\nexports.winston = winston;\r\nfunction enable() {\r\n bunyan.enable();\r\n consolePub.enable();\r\n mongodbCore.enable();\r\n mongodb.enable();\r\n mysql.enable();\r\n pg.enable();\r\n pgPool.enable();\r\n redis.enable();\r\n winston.enable();\r\n azuresdk.enable();\r\n tedious.enable();\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=index.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.mongoCore = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar mongodbcorePatchFunction = function (originalMongoCore) {\r\n var originalConnect = originalMongoCore.Server.prototype.connect;\r\n originalMongoCore.Server.prototype.connect = function contextPreservingConnect() {\r\n var ret = originalConnect.apply(this, arguments);\r\n // Messages sent to mongo progress through a pool\r\n // This can result in context getting mixed between different responses\r\n // so we wrap the callbacks to restore appropriate state\r\n var originalWrite = this.s.pool.write;\r\n this.s.pool.write = function contextPreservingWrite() {\r\n var cbidx = typeof arguments[1] === \"function\" ? 1 : 2;\r\n if (typeof arguments[cbidx] === \"function\") {\r\n arguments[cbidx] = diagnostic_channel_1.channel.bindToContext(arguments[cbidx]);\r\n }\r\n return originalWrite.apply(this, arguments);\r\n };\r\n // Logout is a special case, it doesn't call the write function but instead\r\n // directly calls into connection.write\r\n var originalLogout = this.s.pool.logout;\r\n this.s.pool.logout = function contextPreservingLogout() {\r\n if (typeof arguments[1] === \"function\") {\r\n arguments[1] = diagnostic_channel_1.channel.bindToContext(arguments[1]);\r\n }\r\n return originalLogout.apply(this, arguments);\r\n };\r\n return ret;\r\n };\r\n return originalMongoCore;\r\n};\r\nexports.mongoCore = {\r\n versionSpecifier: \">= 2.0.0 < 4.0.0\",\r\n patch: mongodbcorePatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"mongodb-core\", exports.mongoCore);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=mongodb-core.pub.js.map","\"use strict\";\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.mongo330 = exports.mongo3 = exports.mongo2 = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar mongodbPatchFunction = function (originalMongo) {\r\n var listener = originalMongo.instrument({\r\n operationIdGenerator: {\r\n next: function () {\r\n return diagnostic_channel_1.channel.bindToContext(function (cb) { return cb(); });\r\n }\r\n }\r\n });\r\n var eventMap = {};\r\n listener.on(\"started\", function (event) {\r\n if (eventMap[event.requestId]) {\r\n // Note: Mongo can generate 2 completely separate requests\r\n // which share the same requestId, if a certain race condition is triggered.\r\n // For now, we accept that this can happen and potentially miss or mislabel some events.\r\n return;\r\n }\r\n eventMap[event.requestId] = __assign(__assign({}, event), { time: new Date() });\r\n });\r\n listener.on(\"succeeded\", function (event) {\r\n var startedData = eventMap[event.requestId];\r\n if (startedData) {\r\n delete eventMap[event.requestId];\r\n }\r\n if (typeof event.operationId === \"function\") {\r\n event.operationId(function () { return diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: true }); });\r\n }\r\n else {\r\n // fallback -- correlation will not work here\r\n diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: true });\r\n }\r\n });\r\n listener.on(\"failed\", function (event) {\r\n var startedData = eventMap[event.requestId];\r\n if (startedData) {\r\n delete eventMap[event.requestId];\r\n }\r\n if (typeof event.operationId === \"function\") {\r\n event.operationId(function () { return diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: false }); });\r\n }\r\n else {\r\n // fallback -- correlation will not work here\r\n diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: false });\r\n }\r\n });\r\n return originalMongo;\r\n};\r\nvar mongodb3PatchFunction = function (originalMongo) {\r\n var listener = originalMongo.instrument();\r\n var eventMap = {};\r\n var contextMap = {};\r\n listener.on(\"started\", function (event) {\r\n if (eventMap[event.requestId]) {\r\n // Note: Mongo can generate 2 completely separate requests\r\n // which share the same requestId, if a certain race condition is triggered.\r\n // For now, we accept that this can happen and potentially miss or mislabel some events.\r\n return;\r\n }\r\n contextMap[event.requestId] = diagnostic_channel_1.channel.bindToContext(function (cb) { return cb(); });\r\n eventMap[event.requestId] = __assign(__assign({}, event), { time: new Date() });\r\n });\r\n listener.on(\"succeeded\", function (event) {\r\n var startedData = eventMap[event.requestId];\r\n if (startedData) {\r\n delete eventMap[event.requestId];\r\n }\r\n if (typeof event === \"object\" && typeof contextMap[event.requestId] === \"function\") {\r\n contextMap[event.requestId](function () { return diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: true }); });\r\n delete contextMap[event.requestId];\r\n }\r\n });\r\n listener.on(\"failed\", function (event) {\r\n var startedData = eventMap[event.requestId];\r\n if (startedData) {\r\n delete eventMap[event.requestId];\r\n }\r\n if (typeof event === \"object\" && typeof contextMap[event.requestId] === \"function\") {\r\n contextMap[event.requestId](function () { return diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: false }); });\r\n delete contextMap[event.requestId];\r\n }\r\n });\r\n return originalMongo;\r\n};\r\n// In mongodb 3.3.0, mongodb-core was merged into mongodb, so the same patching\r\n// can be used here. this.s.pool was changed to this.s.coreTopology.s.pool\r\nvar mongodbcorePatchFunction = function (originalMongo) {\r\n var originalConnect = originalMongo.Server.prototype.connect;\r\n originalMongo.Server.prototype.connect = function contextPreservingConnect() {\r\n var ret = originalConnect.apply(this, arguments);\r\n // Messages sent to mongo progress through a pool\r\n // This can result in context getting mixed between different responses\r\n // so we wrap the callbacks to restore appropriate state\r\n var originalWrite = this.s.coreTopology.s.pool.write;\r\n this.s.coreTopology.s.pool.write = function contextPreservingWrite() {\r\n var cbidx = typeof arguments[1] === \"function\" ? 1 : 2;\r\n if (typeof arguments[cbidx] === \"function\") {\r\n arguments[cbidx] = diagnostic_channel_1.channel.bindToContext(arguments[cbidx]);\r\n }\r\n return originalWrite.apply(this, arguments);\r\n };\r\n // Logout is a special case, it doesn't call the write function but instead\r\n // directly calls into connection.write\r\n var originalLogout = this.s.coreTopology.s.pool.logout;\r\n this.s.coreTopology.s.pool.logout = function contextPreservingLogout() {\r\n if (typeof arguments[1] === \"function\") {\r\n arguments[1] = diagnostic_channel_1.channel.bindToContext(arguments[1]);\r\n }\r\n return originalLogout.apply(this, arguments);\r\n };\r\n return ret;\r\n };\r\n return originalMongo;\r\n};\r\nvar mongodb330PatchFunction = function (originalMongo) {\r\n mongodbcorePatchFunction(originalMongo); // apply mongodb-core patches\r\n var listener = originalMongo.instrument();\r\n var eventMap = {};\r\n var contextMap = {};\r\n listener.on(\"started\", function (event) {\r\n if (eventMap[event.requestId]) {\r\n // Note: Mongo can generate 2 completely separate requests\r\n // which share the same requestId, if a certain race condition is triggered.\r\n // For now, we accept that this can happen and potentially miss or mislabel some events.\r\n return;\r\n }\r\n contextMap[event.requestId] = diagnostic_channel_1.channel.bindToContext(function (cb) { return cb(); });\r\n eventMap[event.requestId] = event;\r\n });\r\n listener.on(\"succeeded\", function (event) {\r\n var startedData = eventMap[event.requestId];\r\n if (startedData) {\r\n delete eventMap[event.requestId];\r\n }\r\n if (typeof event === \"object\" && typeof contextMap[event.requestId] === \"function\") {\r\n contextMap[event.requestId](function () { return diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: true }); });\r\n delete contextMap[event.requestId];\r\n }\r\n });\r\n listener.on(\"failed\", function (event) {\r\n var startedData = eventMap[event.requestId];\r\n if (startedData) {\r\n delete eventMap[event.requestId];\r\n }\r\n if (typeof event === \"object\" && typeof contextMap[event.requestId] === \"function\") {\r\n contextMap[event.requestId](function () { return diagnostic_channel_1.channel.publish(\"mongodb\", { startedData: startedData, event: event, succeeded: false }); });\r\n delete contextMap[event.requestId];\r\n }\r\n });\r\n return originalMongo;\r\n};\r\nexports.mongo2 = {\r\n versionSpecifier: \">= 2.0.0 <= 3.0.5\",\r\n patch: mongodbPatchFunction\r\n};\r\nexports.mongo3 = {\r\n versionSpecifier: \"> 3.0.5 < 3.3.0\",\r\n patch: mongodb3PatchFunction\r\n};\r\nexports.mongo330 = {\r\n versionSpecifier: \">= 3.3.0 < 4.0.0\",\r\n patch: mongodb330PatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"mongodb\", exports.mongo2);\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"mongodb\", exports.mongo3);\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"mongodb\", exports.mongo330);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=mongodb.pub.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.mysql = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar path = require(\"path\");\r\nvar mysqlPatchFunction = function (originalMysql, originalMysqlPath) {\r\n // The `name` passed in here is for debugging purposes,\r\n // to help distinguish which object is being patched.\r\n var patchObjectFunction = function (obj, name) {\r\n return function (func, cbWrapper) {\r\n var originalFunc = obj[func];\r\n if (originalFunc) {\r\n obj[func] = function mysqlContextPreserver() {\r\n // Find the callback, if there is one\r\n var cbidx = arguments.length - 1;\r\n for (var i = arguments.length - 1; i >= 0; --i) {\r\n if (typeof arguments[i] === \"function\") {\r\n cbidx = i;\r\n break;\r\n }\r\n else if (typeof arguments[i] !== \"undefined\") {\r\n break;\r\n }\r\n }\r\n var cb = arguments[cbidx];\r\n var resultContainer = { result: null, startTime: null, startDate: null };\r\n if (typeof cb === \"function\") {\r\n // Preserve context on the callback.\r\n // If this is one of the functions that we want to track,\r\n // then wrap the callback with the tracking wrapper\r\n if (cbWrapper) {\r\n resultContainer.startTime = process.hrtime();\r\n resultContainer.startDate = new Date();\r\n arguments[cbidx] = diagnostic_channel_1.channel.bindToContext(cbWrapper(resultContainer, cb));\r\n }\r\n else {\r\n arguments[cbidx] = diagnostic_channel_1.channel.bindToContext(cb);\r\n }\r\n }\r\n var result = originalFunc.apply(this, arguments);\r\n resultContainer.result = result;\r\n return result;\r\n };\r\n }\r\n };\r\n };\r\n var patchClassMemberFunction = function (classObject, name) {\r\n return patchObjectFunction(classObject.prototype, name + \".prototype\");\r\n };\r\n var connectionCallbackFunctions = [\r\n \"connect\", \"changeUser\",\r\n \"ping\", \"statistics\", \"end\"\r\n ];\r\n var connectionClass = require(path.dirname(originalMysqlPath) + \"/lib/Connection\");\r\n connectionCallbackFunctions.forEach(function (value) { return patchClassMemberFunction(connectionClass, \"Connection\")(value); });\r\n // Connection.createQuery is a static method\r\n patchObjectFunction(connectionClass, \"Connection\")(\"createQuery\", function (resultContainer, cb) {\r\n return function (err) {\r\n var hrDuration = process.hrtime(resultContainer.startTime);\r\n /* tslint:disable-next-line:no-bitwise */\r\n var duration = (hrDuration[0] * 1e3 + hrDuration[1] / 1e6) | 0;\r\n diagnostic_channel_1.channel.publish(\"mysql\", { query: resultContainer.result, callbackArgs: arguments, err: err, duration: duration, time: resultContainer.startDate });\r\n cb.apply(this, arguments);\r\n };\r\n });\r\n var poolCallbackFunctions = [\r\n \"_enqueueCallback\"\r\n ];\r\n var poolClass = require(path.dirname(originalMysqlPath) + \"/lib/Pool\");\r\n poolCallbackFunctions.forEach(function (value) { return patchClassMemberFunction(poolClass, \"Pool\")(value); });\r\n return originalMysql;\r\n};\r\nexports.mysql = {\r\n versionSpecifier: \">= 2.0.0 < 3.0.0\",\r\n patch: mysqlPatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"mysql\", exports.mysql);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=mysql.pub.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.postgresPool1 = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nfunction postgresPool1PatchFunction(originalPgPool) {\r\n var originalConnect = originalPgPool.prototype.connect;\r\n originalPgPool.prototype.connect = function connect(callback) {\r\n if (callback) {\r\n arguments[0] = diagnostic_channel_1.channel.bindToContext(callback);\r\n }\r\n return originalConnect.apply(this, arguments);\r\n };\r\n return originalPgPool;\r\n}\r\nexports.postgresPool1 = {\r\n versionSpecifier: \">= 1.0.0 < 3.0.0\",\r\n patch: postgresPool1PatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"pg-pool\", exports.postgresPool1);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=pg-pool.pub.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.postgres = exports.postgres6 = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar events_1 = require(\"events\");\r\nvar publisherName = \"postgres\";\r\nfunction postgres6PatchFunction(originalPg, originalPgPath) {\r\n var originalClientQuery = originalPg.Client.prototype.query;\r\n var diagnosticOriginalFunc = \"__diagnosticOriginalFunc\";\r\n // wherever the callback is passed, find it, save it, and remove it from the call\r\n // to the the original .query() function\r\n originalPg.Client.prototype.query = function query(config, values, callback) {\r\n var data = {\r\n query: {},\r\n database: {\r\n host: this.connectionParameters.host,\r\n port: this.connectionParameters.port\r\n },\r\n result: null,\r\n error: null,\r\n duration: 0,\r\n time: new Date()\r\n };\r\n var start = process.hrtime();\r\n var queryResult;\r\n function patchCallback(cb) {\r\n if (cb && cb[diagnosticOriginalFunc]) {\r\n cb = cb[diagnosticOriginalFunc];\r\n }\r\n var trackingCallback = diagnostic_channel_1.channel.bindToContext(function (err, res) {\r\n var end = process.hrtime(start);\r\n data.result = res && { rowCount: res.rowCount, command: res.command };\r\n data.error = err;\r\n data.duration = Math.ceil((end[0] * 1e3) + (end[1] / 1e6));\r\n diagnostic_channel_1.channel.publish(publisherName, data);\r\n // emulate weird internal behavior in pg@6\r\n // on success, the callback is called *before* query events are emitted\r\n // on failure, the callback is called *instead of* the query emitting events\r\n // with no events, that means no promises (since the promise is resolved/rejected in an event handler)\r\n // since we are always inserting ourselves as a callback, we have to restore the original\r\n // behavior if the user didn't provide one themselves\r\n if (err) {\r\n if (cb) {\r\n return cb.apply(this, arguments);\r\n }\r\n else if (queryResult && queryResult instanceof events_1.EventEmitter) {\r\n queryResult.emit(\"error\", err);\r\n }\r\n }\r\n else if (cb) {\r\n cb.apply(this, arguments);\r\n }\r\n });\r\n try {\r\n Object.defineProperty(trackingCallback, diagnosticOriginalFunc, { value: cb });\r\n return trackingCallback;\r\n }\r\n catch (e) {\r\n // this should never happen, but bailout in case it does\r\n return cb;\r\n }\r\n }\r\n // this function takes too many variations of arguments.\r\n // this patches any provided callback or creates a new callback if one wasn't provided.\r\n // since the callback is always called (if provided) in addition to always having a Promisified\r\n // EventEmitter returned (well, sometimes -- see above), its safe to insert a callback if none was given\r\n try {\r\n if (typeof config === \"string\") {\r\n if (values instanceof Array) {\r\n data.query.preparable = {\r\n text: config,\r\n args: values\r\n };\r\n callback = patchCallback(callback);\r\n }\r\n else {\r\n data.query.text = config;\r\n // pg v6 will, for some reason, accept both\r\n // client.query(\"...\", undefined, () => {...})\r\n // **and**\r\n // client.query(\"...\", () => {...});\r\n // Internally, precedence is given to the callback argument\r\n if (callback) {\r\n callback = patchCallback(callback);\r\n }\r\n else {\r\n values = patchCallback(values);\r\n }\r\n }\r\n }\r\n else {\r\n if (typeof config.name === \"string\") {\r\n data.query.plan = config.name;\r\n }\r\n else if (config.values instanceof Array) {\r\n data.query.preparable = {\r\n text: config.text,\r\n args: config.values\r\n };\r\n }\r\n else {\r\n data.query.text = config.text;\r\n }\r\n if (callback) {\r\n callback = patchCallback(callback);\r\n }\r\n else if (values) {\r\n values = patchCallback(values);\r\n }\r\n else {\r\n config.callback = patchCallback(config.callback);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // if our logic here throws, bail out and just let pg do its thing\r\n return originalClientQuery.apply(this, arguments);\r\n }\r\n arguments[0] = config;\r\n arguments[1] = values;\r\n arguments[2] = callback;\r\n arguments.length = (arguments.length > 3) ? arguments.length : 3;\r\n queryResult = originalClientQuery.apply(this, arguments);\r\n return queryResult;\r\n };\r\n return originalPg;\r\n}\r\nfunction postgresLatestPatchFunction(originalPg, originalPgPath) {\r\n var originalClientQuery = originalPg.Client.prototype.query;\r\n var diagnosticOriginalFunc = \"__diagnosticOriginalFunc\";\r\n // wherever the callback is passed, find it, save it, and remove it from the call\r\n // to the the original .query() function\r\n originalPg.Client.prototype.query = function query(config, values, callback) {\r\n var _this = this;\r\n var _a, _b;\r\n var callbackProvided = !!callback; // Starting in pg@7.x+, Promise is returned only if !callbackProvided\r\n var data = {\r\n query: {},\r\n database: {\r\n host: this.connectionParameters.host,\r\n port: this.connectionParameters.port\r\n },\r\n result: null,\r\n error: null,\r\n duration: 0,\r\n time: new Date()\r\n };\r\n var queryResult;\r\n var start = process.hrtime();\r\n function patchCallback(cb) {\r\n if (cb && cb[diagnosticOriginalFunc]) {\r\n cb = cb[diagnosticOriginalFunc];\r\n }\r\n var trackingCallback = diagnostic_channel_1.channel.bindToContext(function (err, res) {\r\n var end = process.hrtime(start);\r\n data.result = res && { rowCount: res.rowCount, command: res.command };\r\n data.error = err;\r\n data.duration = Math.ceil((end[0] * 1e3) + (end[1] / 1e6));\r\n diagnostic_channel_1.channel.publish(publisherName, data);\r\n if (err) {\r\n if (cb) {\r\n return cb.apply(this, arguments);\r\n }\r\n else if (queryResult && queryResult instanceof events_1.EventEmitter) {\r\n queryResult.emit(\"error\", err);\r\n }\r\n }\r\n else if (cb) {\r\n cb.apply(this, arguments);\r\n }\r\n });\r\n try {\r\n Object.defineProperty(trackingCallback, diagnosticOriginalFunc, { value: cb });\r\n return trackingCallback;\r\n }\r\n catch (e) {\r\n // this should never happen, but bailout in case it does\r\n return cb;\r\n }\r\n }\r\n // Only try to wrap the callback if it is a function. We want to keep the same\r\n // behavior of returning a promise only if no callback is provided. Wrapping\r\n // a nonfunction makes it a function and pg will interpret it as a callback\r\n try {\r\n if (typeof config === \"string\") {\r\n if (values instanceof Array) {\r\n data.query.preparable = {\r\n text: config,\r\n args: values\r\n };\r\n callbackProvided = typeof callback === \"function\";\r\n callback = callbackProvided ? patchCallback(callback) : callback;\r\n }\r\n else {\r\n data.query.text = config;\r\n if (callback) {\r\n callbackProvided = typeof callback === \"function\";\r\n callback = callbackProvided ? patchCallback(callback) : callback;\r\n }\r\n else {\r\n callbackProvided = typeof values === \"function\";\r\n values = callbackProvided ? patchCallback(values) : values;\r\n }\r\n }\r\n }\r\n else {\r\n if (typeof config.name === \"string\") {\r\n data.query.plan = config.name;\r\n }\r\n else if (config.values instanceof Array) {\r\n data.query.preparable = {\r\n text: config.text,\r\n args: config.values\r\n };\r\n }\r\n else if (config.cursor) {\r\n data.query.text = (_a = config.cursor) === null || _a === void 0 ? void 0 : _a.text;\r\n }\r\n else {\r\n data.query.text = config.text;\r\n }\r\n if (callback) {\r\n callbackProvided = typeof callback === \"function\";\r\n callback = patchCallback(callback);\r\n }\r\n else if (values) {\r\n callbackProvided = typeof values === \"function\";\r\n values = callbackProvided ? patchCallback(values) : values;\r\n }\r\n else {\r\n callbackProvided = typeof config.callback === \"function\";\r\n config.callback = callbackProvided ? patchCallback(config.callback) : config.callback;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n // if our logic here throws, bail out and just let pg do its thing\r\n return originalClientQuery.apply(this, arguments);\r\n }\r\n arguments[0] = config;\r\n arguments[1] = values;\r\n arguments[2] = callback;\r\n arguments.length = (arguments.length > 3) ? arguments.length : 3;\r\n try {\r\n queryResult = originalClientQuery.apply(this, arguments);\r\n }\r\n catch (err) {\r\n patchCallback()(err, undefined);\r\n throw err;\r\n }\r\n if (!callbackProvided) {\r\n if ((queryResult instanceof Promise)) {\r\n return queryResult\r\n // pass resolved promise after publishing the event\r\n .then(function (result) {\r\n patchCallback()(undefined, result);\r\n return new _this._Promise(function (resolve, reject) {\r\n resolve(result);\r\n });\r\n })\r\n // pass along rejected promise after publishing the error\r\n .catch(function (error) {\r\n patchCallback()(error, undefined);\r\n return new _this._Promise(function (resolve, reject) {\r\n reject(error);\r\n });\r\n });\r\n }\r\n // Result could be a Cursor, QueryStream or Readable Stream\r\n else {\r\n var command = queryResult.text ? queryResult.text : \"\";\r\n if (queryResult.cursor) {\r\n command = (_b = queryResult.cursor) === null || _b === void 0 ? void 0 : _b.text;\r\n }\r\n if (command) {\r\n var res = {\r\n command: command,\r\n rowCount: 0,\r\n };\r\n patchCallback()(undefined, res);\r\n }\r\n }\r\n }\r\n return queryResult;\r\n };\r\n return originalPg;\r\n}\r\nexports.postgres6 = {\r\n versionSpecifier: \"6.*\",\r\n patch: postgres6PatchFunction\r\n};\r\nexports.postgres = {\r\n versionSpecifier: \">=7.* <=8.*\",\r\n patch: postgresLatestPatchFunction,\r\n publisherName: publisherName\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"pg\", exports.postgres6);\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"pg\", exports.postgres);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=pg.pub.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.redis = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar redisPatchFunction = function (originalRedis) {\r\n var originalSend = originalRedis.RedisClient.prototype.internal_send_command;\r\n // Note: This is mixing together both context tracking and dependency tracking\r\n originalRedis.RedisClient.prototype.internal_send_command = function (commandObj) {\r\n if (commandObj) {\r\n var cb_1 = commandObj.callback;\r\n if (!cb_1 || !cb_1.pubsubBound) {\r\n var address_1 = this.address;\r\n var startTime_1 = process.hrtime();\r\n var startDate_1 = new Date();\r\n // Note: augmenting the callback on internal_send_command is correct for context\r\n // tracking, but may be too low-level for dependency tracking. There are some 'errors'\r\n // which higher levels expect in some cases\r\n // However, the only other option is to intercept every individual command.\r\n commandObj.callback = diagnostic_channel_1.channel.bindToContext(function (err, result) {\r\n var hrDuration = process.hrtime(startTime_1);\r\n /* tslint:disable-next-line:no-bitwise */\r\n var duration = (hrDuration[0] * 1e3 + hrDuration[1] / 1e6) | 0;\r\n diagnostic_channel_1.channel.publish(\"redis\", { duration: duration, address: address_1, commandObj: commandObj, err: err, result: result, time: startDate_1 });\r\n if (typeof cb_1 === \"function\") {\r\n cb_1.apply(this, arguments);\r\n }\r\n });\r\n commandObj.callback.pubsubBound = true;\r\n }\r\n }\r\n return originalSend.call(this, commandObj);\r\n };\r\n return originalRedis;\r\n};\r\nexports.redis = {\r\n versionSpecifier: \">= 2.0.0 < 4.0.0\",\r\n patch: redisPatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"redis\", exports.redis);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=redis.pub.js.map","\"use strict\";\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.tedious = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\nvar tediousPatchFunction = function (originalTedious) {\r\n var originalMakeRequest = originalTedious.Connection.prototype.makeRequest;\r\n originalTedious.Connection.prototype.makeRequest = function makeRequest() {\r\n function getPatchedCallback(origCallback) {\r\n var start = process.hrtime();\r\n var data = {\r\n query: {},\r\n database: {\r\n host: null,\r\n port: null\r\n },\r\n result: null,\r\n error: null,\r\n duration: 0\r\n };\r\n return diagnostic_channel_1.channel.bindToContext(function (err, rowCount, rows) {\r\n var end = process.hrtime(start);\r\n data = __assign(__assign({}, data), { database: {\r\n host: this.connection.config.server,\r\n port: this.connection.config.options.port\r\n }, result: !err && { rowCount: rowCount, rows: rows }, query: {\r\n text: this.parametersByName.statement.value\r\n }, error: err, duration: Math.ceil((end[0] * 1e3) + (end[1] / 1e6)) });\r\n diagnostic_channel_1.channel.publish(\"tedious\", data);\r\n origCallback.call(this, err, rowCount, rows);\r\n });\r\n }\r\n var request = arguments[0];\r\n arguments[0].callback = getPatchedCallback(request.callback);\r\n originalMakeRequest.apply(this, arguments);\r\n };\r\n return originalTedious;\r\n};\r\nexports.tedious = {\r\n versionSpecifier: \">= 6.0.0 < 9.0.0\",\r\n patch: tediousPatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"tedious\", exports.tedious);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=tedious.pub.js.map","\"use strict\";\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __rest = (this && this.__rest) || function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.enable = exports.winston2 = exports.winston3 = void 0;\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nvar diagnostic_channel_1 = require(\"diagnostic-channel\");\r\n// register a \"filter\" with each logger that publishes the data about to be logged\r\nvar winston2PatchFunction = function (originalWinston) {\r\n var originalLog = originalWinston.Logger.prototype.log;\r\n var curLevels;\r\n var loggingFilter = function (level, message, meta) {\r\n var levelKind;\r\n if (curLevels === originalWinston.config.npm.levels) {\r\n levelKind = \"npm\";\r\n }\r\n else if (curLevels === originalWinston.config.syslog.levels) {\r\n levelKind = \"syslog\";\r\n }\r\n else {\r\n levelKind = \"unknown\";\r\n }\r\n diagnostic_channel_1.channel.publish(\"winston\", { level: level, message: message, meta: meta, levelKind: levelKind });\r\n return message;\r\n };\r\n // whenever someone logs, ensure our filter comes last\r\n originalWinston.Logger.prototype.log = function log() {\r\n curLevels = this.levels;\r\n if (!this.filters || this.filters.length === 0) {\r\n this.filters = [loggingFilter];\r\n }\r\n else if (this.filters[this.filters.length - 1] !== loggingFilter) {\r\n this.filters = this.filters.filter(function (f) { return f !== loggingFilter; });\r\n this.filters.push(loggingFilter);\r\n }\r\n return originalLog.apply(this, arguments);\r\n };\r\n return originalWinston;\r\n};\r\nvar winston3PatchFunction = function (originalWinston) {\r\n var mapLevelToKind = function (winston, level) {\r\n var levelKind;\r\n if (winston.config.npm.levels[level] != null) {\r\n levelKind = \"npm\";\r\n }\r\n else if (winston.config.syslog.levels[level] != null) {\r\n levelKind = \"syslog\";\r\n }\r\n else {\r\n levelKind = \"unknown\";\r\n }\r\n return levelKind;\r\n };\r\n var AppInsightsTransport = /** @class */ (function (_super) {\r\n __extends(AppInsightsTransport, _super);\r\n function AppInsightsTransport(winston, opts) {\r\n var _this = _super.call(this, opts) || this;\r\n _this.winston = winston;\r\n return _this;\r\n }\r\n AppInsightsTransport.prototype.log = function (info, callback) {\r\n // tslint:disable-next-line:prefer-const - try to obtain level from Symbol(level) afterwards\r\n var message = info.message, level = info.level, meta = info.meta, splat = __rest(info, [\"message\", \"level\", \"meta\"]);\r\n level = typeof Symbol[\"for\"] === \"function\" ? info[Symbol[\"for\"](\"level\")] : level; // Symbol(level) is uncolorized, so prefer getting it from here\r\n message = info instanceof Error ? info : message; // Winston places Errors at info, strings at info.message\r\n var levelKind = mapLevelToKind(this.winston, level);\r\n meta = meta || {}; // Winston _somtimes_ puts metadata inside meta, so start from here\r\n for (var key in splat) {\r\n if (splat.hasOwnProperty(key)) {\r\n meta[key] = splat[key];\r\n }\r\n }\r\n diagnostic_channel_1.channel.publish(\"winston\", { message: message, level: level, levelKind: levelKind, meta: meta });\r\n callback();\r\n };\r\n return AppInsightsTransport;\r\n }(originalWinston.Transport));\r\n // Patch this function\r\n function patchedConfigure() {\r\n // Grab highest sev logging level in case of custom logging levels\r\n var levels = originalWinston.config.npm.levels;\r\n if (arguments && arguments[0] && arguments[0].levels) {\r\n levels = arguments[0].levels;\r\n }\r\n var lastLevel;\r\n for (var level in levels) {\r\n if (levels.hasOwnProperty(level)) {\r\n lastLevel = lastLevel === undefined || levels[level] > levels[lastLevel] ? level : lastLevel;\r\n }\r\n }\r\n this.add(new AppInsightsTransport(originalWinston, { level: lastLevel }));\r\n }\r\n var origCreate = originalWinston.createLogger;\r\n originalWinston.createLogger = function patchedCreate() {\r\n // Grab highest sev logging level in case of custom logging levels\r\n var levels = originalWinston.config.npm.levels;\r\n if (arguments && arguments[0] && arguments[0].levels) {\r\n levels = arguments[0].levels;\r\n }\r\n var lastLevel;\r\n for (var level in levels) {\r\n if (levels.hasOwnProperty(level)) {\r\n lastLevel = lastLevel === undefined || levels[level] > levels[lastLevel] ? level : lastLevel;\r\n }\r\n }\r\n // Add custom app insights transport to the end\r\n // Remark: Configure is not available until after createLogger()\r\n // and the Logger prototype is not exported in winston 3.x, so\r\n // patch both createLogger and configure. Could also call configure\r\n // again after createLogger, but that would cause configure to be called\r\n // twice per create.\r\n var result = origCreate.apply(this, arguments);\r\n result.add(new AppInsightsTransport(originalWinston, { level: lastLevel }));\r\n var origConfigure = result.configure;\r\n result.configure = function () {\r\n origConfigure.apply(this, arguments);\r\n patchedConfigure.apply(this, arguments);\r\n };\r\n return result;\r\n };\r\n var origRootConfigure = originalWinston.configure;\r\n originalWinston.configure = function () {\r\n origRootConfigure.apply(this, arguments);\r\n patchedConfigure.apply(this, arguments);\r\n };\r\n originalWinston.add(new AppInsightsTransport(originalWinston));\r\n return originalWinston;\r\n};\r\nexports.winston3 = {\r\n versionSpecifier: \"3.x\",\r\n patch: winston3PatchFunction\r\n};\r\nexports.winston2 = {\r\n versionSpecifier: \"2.x\",\r\n patch: winston2PatchFunction\r\n};\r\nfunction enable() {\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"winston\", exports.winston2);\r\n diagnostic_channel_1.channel.registerMonkeyPatch(\"winston\", exports.winston3);\r\n}\r\nexports.enable = enable;\r\n//# sourceMappingURL=winston.pub.js.map","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 1055;\nmodule.exports = webpackEmptyContext;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = () => ([]);\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 76990;\nmodule.exports = webpackEmptyContext;","\"use strict\";\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.channel = exports.ContextPreservingEventEmitter = exports.trueFilter = exports.makePatchingRequire = void 0;\r\nvar patchRequire_1 = require(\"./patchRequire\");\r\nvar patchRequire_2 = require(\"./patchRequire\");\r\nObject.defineProperty(exports, \"makePatchingRequire\", { enumerable: true, get: function () { return patchRequire_2.makePatchingRequire; } });\r\nvar trueFilter = function (publishing) { return true; };\r\nexports.trueFilter = trueFilter;\r\nvar ContextPreservingEventEmitter = /** @class */ (function () {\r\n function ContextPreservingEventEmitter() {\r\n this.version = require(\"./../../package.json\").version; // Allow for future versions to replace things?\r\n this.subscribers = {};\r\n this.contextPreservationFunction = function (cb) { return cb; };\r\n this.knownPatches = {};\r\n this.modulesPatched = [];\r\n this.currentlyPublishing = false;\r\n }\r\n ContextPreservingEventEmitter.prototype.shouldPublish = function (name) {\r\n var listeners = this.subscribers[name];\r\n if (listeners) {\r\n return listeners.some(function (_a) {\r\n var filter = _a.filter;\r\n return !filter || filter(false);\r\n });\r\n }\r\n return false;\r\n };\r\n ContextPreservingEventEmitter.prototype.publish = function (name, event) {\r\n if (this.currentlyPublishing) {\r\n return; // Avoid reentrancy\r\n }\r\n var listeners = this.subscribers[name];\r\n // Note: Listeners called synchronously to preserve context\r\n if (listeners) {\r\n var standardEvent_1 = {\r\n timestamp: Date.now(),\r\n data: event,\r\n };\r\n this.currentlyPublishing = true;\r\n listeners.forEach(function (_a) {\r\n var listener = _a.listener, filter = _a.filter;\r\n try {\r\n if (filter && filter(true)) {\r\n listener(standardEvent_1);\r\n }\r\n }\r\n catch (e) {\r\n // Subscriber threw an error\r\n }\r\n });\r\n this.currentlyPublishing = false;\r\n }\r\n };\r\n ContextPreservingEventEmitter.prototype.subscribe = function (name, listener, filter, patchCallback) {\r\n if (filter === void 0) { filter = exports.trueFilter; }\r\n if (!this.subscribers[name]) {\r\n this.subscribers[name] = [];\r\n }\r\n this.subscribers[name].push({ listener: listener, filter: filter, patchCallback: patchCallback });\r\n var patched = this.checkIfModuleIsAlreadyPatched(name);\r\n if (patched && patchCallback) {\r\n patchCallback(patched.name, patched.version);\r\n }\r\n };\r\n ContextPreservingEventEmitter.prototype.unsubscribe = function (name, listener, filter) {\r\n if (filter === void 0) { filter = exports.trueFilter; }\r\n var listeners = this.subscribers[name];\r\n if (listeners) {\r\n for (var index = 0; index < listeners.length; ++index) {\r\n if (listeners[index].listener === listener && listeners[index].filter === filter) {\r\n listeners.splice(index, 1);\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n // Used for tests\r\n ContextPreservingEventEmitter.prototype.reset = function () {\r\n var _this = this;\r\n this.subscribers = {};\r\n this.contextPreservationFunction = function (cb) { return cb; };\r\n // Modify the knownPatches object rather than replace, since a reference will be used in the require patcher\r\n Object.getOwnPropertyNames(this.knownPatches).forEach(function (prop) { return delete _this.knownPatches[prop]; });\r\n };\r\n ContextPreservingEventEmitter.prototype.bindToContext = function (cb) {\r\n return this.contextPreservationFunction(cb);\r\n };\r\n ContextPreservingEventEmitter.prototype.addContextPreservation = function (preserver) {\r\n var previousPreservationStack = this.contextPreservationFunction;\r\n this.contextPreservationFunction = (function (cb) { return preserver(previousPreservationStack(cb)); });\r\n };\r\n ContextPreservingEventEmitter.prototype.registerMonkeyPatch = function (packageName, patcher) {\r\n if (!this.knownPatches[packageName]) {\r\n this.knownPatches[packageName] = [];\r\n }\r\n this.knownPatches[packageName].push(patcher);\r\n };\r\n ContextPreservingEventEmitter.prototype.getPatchesObject = function () {\r\n return this.knownPatches;\r\n };\r\n ContextPreservingEventEmitter.prototype.addPatchedModule = function (name, version) {\r\n for (var _i = 0, _a = this.modulesPatched; _i < _a.length; _i++) {\r\n var module_1 = _a[_i];\r\n if (module_1.name === name) {\r\n return;\r\n }\r\n }\r\n // If new patch notify listeners\r\n this.modulesPatched.push({ name: name, version: version });\r\n var listeners = this.subscribers[name];\r\n if (listeners) {\r\n listeners.forEach(function (listener) {\r\n if (listener.patchCallback) {\r\n listener.patchCallback(name, version);\r\n }\r\n });\r\n }\r\n };\r\n ContextPreservingEventEmitter.prototype.checkIfModuleIsAlreadyPatched = function (name) {\r\n for (var _i = 0, _a = this.modulesPatched; _i < _a.length; _i++) {\r\n var module_2 = _a[_i];\r\n if (module_2.name === name) {\r\n return module_2;\r\n }\r\n }\r\n return null;\r\n };\r\n return ContextPreservingEventEmitter;\r\n}());\r\nexports.ContextPreservingEventEmitter = ContextPreservingEventEmitter;\r\nif (!global.diagnosticsSource) {\r\n global.diagnosticsSource = new ContextPreservingEventEmitter();\r\n // TODO: should this only patch require after at least one monkey patch is registered?\r\n /* tslint:disable-next-line:no-var-requires */\r\n var moduleModule = require(\"module\");\r\n // Note: We pass in the object now before any patches are registered, but the object is passed by reference\r\n // so any updates made to the object will be visible in the patcher.\r\n moduleModule.prototype.require = patchRequire_1.makePatchingRequire(global.diagnosticsSource.getPatchesObject());\r\n}\r\nexports.channel = global.diagnosticsSource;\r\n//# sourceMappingURL=channel.js.map","\"use strict\";\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT license. See LICENSE file in the project root for details.\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.makePatchingRequire = void 0;\r\nvar path = require(\"path\");\r\nvar semver = require(\"semver\");\r\nvar channel_1 = require(\"./channel\");\r\n/* tslint:disable-next-line:no-var-requires */\r\nvar moduleModule = require(\"module\");\r\nvar nativeModules = Object.keys(process.binding(\"natives\"));\r\nvar originalRequire = moduleModule.prototype.require;\r\nfunction makePatchingRequire(knownPatches) {\r\n var patchedModules = {};\r\n return function patchedRequire(moduleId) {\r\n var originalModule = originalRequire.apply(this, arguments);\r\n if (knownPatches[moduleId]) {\r\n // Fetch the specific path of the module\r\n var modulePath = moduleModule._resolveFilename(moduleId, this);\r\n if (patchedModules.hasOwnProperty(modulePath)) {\r\n // This module has already been patched, no need to reapply\r\n return patchedModules[modulePath];\r\n }\r\n var moduleVersion = void 0;\r\n if (nativeModules.indexOf(moduleId) < 0) {\r\n try {\r\n moduleVersion = originalRequire.call(this, path.join(moduleId, \"package.json\")).version;\r\n }\r\n catch (e) {\r\n // This should only happen if moduleId is actually a path rather than a module\r\n // This is not a supported scenario\r\n return originalModule;\r\n }\r\n }\r\n else {\r\n // This module is implemented natively so we cannot find a package.json\r\n // Instead, take the version of node itself\r\n moduleVersion = process.version.substring(1);\r\n }\r\n var prereleaseTagIndex = moduleVersion.indexOf(\"-\");\r\n if (prereleaseTagIndex >= 0) {\r\n // We ignore prerelease tags to avoid impossible to fix gaps in support\r\n // e.g. supporting console in >= 4.0.0 would otherwise not include\r\n // 8.0.0-pre\r\n moduleVersion = moduleVersion.substring(0, prereleaseTagIndex);\r\n }\r\n var modifiedModule = originalModule;\r\n for (var _i = 0, _a = knownPatches[moduleId]; _i < _a.length; _i++) {\r\n var modulePatcher = _a[_i];\r\n if (semver.satisfies(moduleVersion, modulePatcher.versionSpecifier)) {\r\n modifiedModule = modulePatcher.patch(modifiedModule, modulePath);\r\n if (channel_1.channel) {\r\n var name_1 = modulePatcher.publisherName || moduleId;\r\n channel_1.channel.addPatchedModule(name_1, moduleVersion);\r\n }\r\n }\r\n }\r\n return patchedModules[modulePath] = modifiedModule;\r\n }\r\n return originalModule;\r\n };\r\n}\r\nexports.makePatchingRequire = makePatchingRequire;\r\n//# sourceMappingURL=patchRequire.js.map","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","'use strict';\n\nvar shimmer = require('shimmer');\nvar wrap = shimmer.wrap;\nvar unwrap = shimmer.unwrap;\n\n// Default to complaining loudly when things don't go according to plan.\n// dunderscores are boring\nvar SYMBOL = 'wrap@before';\n\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty(obj, name, value) {\n var enumerable = !!obj[name] && obj.propertyIsEnumerable(name);\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: enumerable,\n writable: true,\n value: value\n });\n}\n\nfunction _process(self, listeners) {\n var l = listeners.length;\n for (var p = 0; p < l; p++) {\n var listener = listeners[p];\n // set up the listener so that onEmit can do whatever it needs\n var before = self[SYMBOL];\n if (typeof before === 'function') {\n before(listener);\n }\n else if (Array.isArray(before)) {\n var length = before.length;\n for (var i = 0; i < length; i++) before[i](listener);\n }\n }\n}\n\nfunction _listeners(self, event) {\n var listeners;\n listeners = self._events && self._events[event];\n if (!Array.isArray(listeners)) {\n if (listeners) {\n listeners = [listeners];\n }\n else {\n listeners = [];\n }\n }\n\n return listeners;\n}\n\nfunction _findAndProcess(self, event, before) {\n var after = _listeners(self, event);\n var unprocessed = after.filter(function(fn) { return before.indexOf(fn) === -1; });\n if (unprocessed.length > 0) _process(self, unprocessed);\n}\n\nfunction _wrap(unwrapped, visit) {\n if (!unwrapped) return;\n\n var wrapped = unwrapped;\n if (typeof unwrapped === 'function') {\n wrapped = visit(unwrapped);\n }\n else if (Array.isArray(unwrapped)) {\n wrapped = [];\n for (var i = 0; i < unwrapped.length; i++) {\n wrapped[i] = visit(unwrapped[i]);\n }\n }\n return wrapped;\n}\n\nmodule.exports = function wrapEmitter(emitter, onAddListener, onEmit) {\n if (!emitter || !emitter.on || !emitter.addListener ||\n !emitter.removeListener || !emitter.emit) {\n throw new Error(\"can only wrap real EEs\");\n }\n\n if (!onAddListener) throw new Error(\"must have function to run on listener addition\");\n if (!onEmit) throw new Error(\"must have function to wrap listeners when emitting\");\n\n /* Attach a context to a listener, and make sure that this hook stays\n * attached to the emitter forevermore.\n */\n function adding(on) {\n return function added(event, listener) {\n var existing = _listeners(this, event).slice();\n\n try {\n var returned = on.call(this, event, listener);\n _findAndProcess(this, event, existing);\n return returned;\n }\n finally {\n // old-style streaming overwrites .on and .addListener, so rewrap\n if (!this.on.__wrapped) wrap(this, 'on', adding);\n if (!this.addListener.__wrapped) wrap(this, 'addListener', adding);\n }\n };\n }\n\n function emitting(emit) {\n return function emitted(event) {\n if (!this._events || !this._events[event]) return emit.apply(this, arguments);\n\n var unwrapped = this._events[event];\n\n /* Ensure that if removeListener gets called, it's working with the\n * unwrapped listeners.\n */\n function remover(removeListener) {\n return function removed() {\n this._events[event] = unwrapped;\n try {\n return removeListener.apply(this, arguments);\n }\n finally {\n unwrapped = this._events[event];\n this._events[event] = _wrap(unwrapped, onEmit);\n }\n };\n }\n wrap(this, 'removeListener', remover);\n\n try {\n /* At emit time, ensure that whatever else is going on, removeListener will\n * still work while at the same time running whatever hooks are necessary to\n * make sure the listener is run in the correct context.\n */\n this._events[event] = _wrap(unwrapped, onEmit);\n return emit.apply(this, arguments);\n }\n finally {\n /* Ensure that regardless of what happens when preparing and running the\n * listeners, the status quo ante is restored before continuing.\n */\n unwrap(this, 'removeListener');\n this._events[event] = unwrapped;\n }\n };\n }\n\n // support multiple onAddListeners\n if (!emitter[SYMBOL]) {\n defineProperty(emitter, SYMBOL, onAddListener);\n }\n else if (typeof emitter[SYMBOL] === 'function') {\n defineProperty(emitter, SYMBOL, [emitter[SYMBOL], onAddListener]);\n }\n else if (Array.isArray(emitter[SYMBOL])) {\n emitter[SYMBOL].push(onAddListener);\n }\n\n // only wrap the core functions once\n if (!emitter.__wrapped) {\n wrap(emitter, 'addListener', adding);\n wrap(emitter, 'on', adding);\n wrap(emitter, 'emit', emitting);\n\n defineProperty(emitter, '__unwrap', function () {\n unwrap(emitter, 'addListener');\n unwrap(emitter, 'on');\n unwrap(emitter, 'emit');\n delete emitter[SYMBOL];\n delete emitter.__wrapped;\n });\n defineProperty(emitter, '__wrapped', true);\n }\n};\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","var CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar populate = require('./populate.js');\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (util.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n\n if (value.hasOwnProperty('fd')) {\n\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (value.hasOwnProperty('httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (value.hasOwnProperty('httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (!headers.hasOwnProperty(prop)) continue;\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && value.hasOwnProperty('httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (userHeaders.hasOwnProperty(header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc( 0 );\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\n","// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n","\"use strict\";\n\n// Dependencies\n\nvar parseUrl = require(\"parse-url\"),\n isSsh = require(\"is-ssh\");\n\n/**\n * gitUp\n * Parses the input url.\n *\n * @name gitUp\n * @function\n * @param {String} input The input url.\n * @return {Object} An object containing the following fields:\n *\n * - `protocols` (Array): An array with the url protocols (usually it has one element).\n * - `port` (null|Number): The domain port.\n * - `resource` (String): The url domain (including subdomains).\n * - `user` (String): The authentication user (usually for ssh urls).\n * - `pathname` (String): The url pathname.\n * - `hash` (String): The url hash.\n * - `search` (String): The url querystring value.\n * - `href` (String): The input url.\n * - `protocol` (String): The git url protocol.\n * - `token` (String): The oauth token (could appear in the https urls).\n */\nfunction gitUp(input) {\n var output = parseUrl(input);\n output.token = \"\";\n\n if (output.password === \"x-oauth-basic\") {\n output.token = output.user;\n } else if (output.user === \"x-token-auth\") {\n output.token = output.password;\n }\n\n if (isSsh(output.protocols) || output.protocols.length === 0 && isSsh(input)) {\n output.protocol = \"ssh\";\n } else if (output.protocols.length) {\n output.protocol = output.protocols[0];\n } else {\n output.protocol = \"file\";\n output.protocols = [\"file\"];\n }\n\n output.href = output.href.replace(/\\/$/, \"\");\n return output;\n}\n\nmodule.exports = gitUp;","\"use strict\";\n\nvar gitUp = require(\"git-up\");\n\n/**\n * gitUrlParse\n * Parses a Git url.\n *\n * @name gitUrlParse\n * @function\n * @param {String} url The Git url to parse.\n * @return {GitUrl} The `GitUrl` object containing:\n *\n * - `protocols` (Array): An array with the url protocols (usually it has one element).\n * - `port` (null|Number): The domain port.\n * - `resource` (String): The url domain (including subdomains).\n * - `user` (String): The authentication user (usually for ssh urls).\n * - `pathname` (String): The url pathname.\n * - `hash` (String): The url hash.\n * - `search` (String): The url querystring value.\n * - `href` (String): The input url.\n * - `protocol` (String): The git url protocol.\n * - `token` (String): The oauth token (could appear in the https urls).\n * - `source` (String): The Git provider (e.g. `\"github.com\"`).\n * - `owner` (String): The repository owner.\n * - `name` (String): The repository name.\n * - `ref` (String): The repository ref (e.g., \"master\" or \"dev\").\n * - `filepath` (String): A filepath relative to the repository root.\n * - `filepathtype` (String): The type of filepath in the url (\"blob\" or \"tree\").\n * - `full_name` (String): The owner and name values in the `owner/name` format.\n * - `toString` (Function): A function to stringify the parsed url into another url type.\n * - `organization` (String): The organization the owner belongs to. This is CloudForge specific.\n * - `git_suffix` (Boolean): Whether to add the `.git` suffix or not.\n *\n */\nfunction gitUrlParse(url) {\n\n if (typeof url !== \"string\") {\n throw new Error(\"The url must be a string.\");\n }\n\n var shorthandRe = /^([a-z\\d-]{1,39})\\/([-\\.\\w]{1,100})$/i;\n\n if (shorthandRe.test(url)) {\n url = \"https://github.com/\" + url;\n }\n\n var urlInfo = gitUp(url),\n sourceParts = urlInfo.resource.split(\".\"),\n splits = null;\n\n urlInfo.toString = function (type) {\n return gitUrlParse.stringify(this, type);\n };\n\n urlInfo.source = sourceParts.length > 2 ? sourceParts.slice(1 - sourceParts.length).join(\".\") : urlInfo.source = urlInfo.resource;\n\n // Note: Some hosting services (e.g. Visual Studio Team Services) allow whitespace characters\n // in the repository and owner names so we decode the URL pieces to get the correct result\n urlInfo.git_suffix = /\\.git$/.test(urlInfo.pathname);\n urlInfo.name = decodeURIComponent((urlInfo.pathname || urlInfo.href).replace(/(^\\/)|(\\/$)/g, '').replace(/\\.git$/, \"\"));\n urlInfo.owner = decodeURIComponent(urlInfo.user);\n\n switch (urlInfo.source) {\n case \"git.cloudforge.com\":\n urlInfo.owner = urlInfo.user;\n urlInfo.organization = sourceParts[0];\n urlInfo.source = \"cloudforge.com\";\n break;\n case \"visualstudio.com\":\n // Handle VSTS SSH URLs\n if (urlInfo.resource === 'vs-ssh.visualstudio.com') {\n splits = urlInfo.name.split(\"/\");\n if (splits.length === 4) {\n urlInfo.organization = splits[1];\n urlInfo.owner = splits[2];\n urlInfo.name = splits[3];\n urlInfo.full_name = splits[2] + '/' + splits[3];\n }\n break;\n } else {\n splits = urlInfo.name.split(\"/\");\n if (splits.length === 2) {\n urlInfo.owner = splits[1];\n urlInfo.name = splits[1];\n urlInfo.full_name = '_git/' + urlInfo.name;\n } else if (splits.length === 3) {\n urlInfo.name = splits[2];\n if (splits[0] === 'DefaultCollection') {\n urlInfo.owner = splits[2];\n urlInfo.organization = splits[0];\n urlInfo.full_name = urlInfo.organization + '/_git/' + urlInfo.name;\n } else {\n urlInfo.owner = splits[0];\n urlInfo.full_name = urlInfo.owner + '/_git/' + urlInfo.name;\n }\n } else if (splits.length === 4) {\n urlInfo.organization = splits[0];\n urlInfo.owner = splits[1];\n urlInfo.name = splits[3];\n urlInfo.full_name = urlInfo.organization + '/' + urlInfo.owner + '/_git/' + urlInfo.name;\n }\n break;\n }\n\n // Azure DevOps (formerly Visual Studio Team Services)\n case \"dev.azure.com\":\n case \"azure.com\":\n if (urlInfo.resource === 'ssh.dev.azure.com') {\n splits = urlInfo.name.split(\"/\");\n if (splits.length === 4) {\n urlInfo.organization = splits[1];\n urlInfo.owner = splits[2];\n urlInfo.name = splits[3];\n }\n break;\n } else {\n splits = urlInfo.name.split(\"/\");\n if (splits.length === 5) {\n urlInfo.organization = splits[0];\n urlInfo.owner = splits[1];\n urlInfo.name = splits[4];\n urlInfo.full_name = '_git/' + urlInfo.name;\n } else if (splits.length === 3) {\n urlInfo.name = splits[2];\n if (splits[0] === 'DefaultCollection') {\n urlInfo.owner = splits[2];\n urlInfo.organization = splits[0];\n urlInfo.full_name = urlInfo.organization + '/_git/' + urlInfo.name;\n } else {\n urlInfo.owner = splits[0];\n urlInfo.full_name = urlInfo.owner + '/_git/' + urlInfo.name;\n }\n } else if (splits.length === 4) {\n urlInfo.organization = splits[0];\n urlInfo.owner = splits[1];\n urlInfo.name = splits[3];\n urlInfo.full_name = urlInfo.organization + '/' + urlInfo.owner + '/_git/' + urlInfo.name;\n }\n if (urlInfo.query && urlInfo.query['path']) {\n urlInfo.filepath = urlInfo.query['path'].replace(/^\\/+/g, ''); // Strip leading slash (/)\n }\n if (urlInfo.query && urlInfo.query['version']) {\n // version=GB\n urlInfo.ref = urlInfo.query['version'].replace(/^GB/, ''); // remove GB\n }\n break;\n }\n default:\n splits = urlInfo.name.split(\"/\");\n var nameIndex = splits.length - 1;\n if (splits.length >= 2) {\n var dashIndex = splits.indexOf(\"-\", 2);\n var blobIndex = splits.indexOf(\"blob\", 2);\n var treeIndex = splits.indexOf(\"tree\", 2);\n var commitIndex = splits.indexOf(\"commit\", 2);\n var srcIndex = splits.indexOf(\"src\", 2);\n var rawIndex = splits.indexOf(\"raw\", 2);\n var editIndex = splits.indexOf(\"edit\", 2);\n nameIndex = dashIndex > 0 ? dashIndex - 1 : blobIndex > 0 ? blobIndex - 1 : treeIndex > 0 ? treeIndex - 1 : commitIndex > 0 ? commitIndex - 1 : srcIndex > 0 ? srcIndex - 1 : rawIndex > 0 ? rawIndex - 1 : editIndex > 0 ? editIndex - 1 : nameIndex;\n\n urlInfo.owner = splits.slice(0, nameIndex).join('/');\n urlInfo.name = splits[nameIndex];\n if (commitIndex) {\n urlInfo.commit = splits[nameIndex + 2];\n }\n }\n\n urlInfo.ref = \"\";\n urlInfo.filepathtype = \"\";\n urlInfo.filepath = \"\";\n var offsetNameIndex = splits.length > nameIndex && splits[nameIndex + 1] === \"-\" ? nameIndex + 1 : nameIndex;\n\n if (splits.length > offsetNameIndex + 2 && [\"raw\", \"src\", \"blob\", \"tree\", \"edit\"].indexOf(splits[offsetNameIndex + 1]) >= 0) {\n urlInfo.filepathtype = splits[offsetNameIndex + 1];\n urlInfo.ref = splits[offsetNameIndex + 2];\n if (splits.length > offsetNameIndex + 3) {\n urlInfo.filepath = splits.slice(offsetNameIndex + 3).join('/');\n }\n }\n urlInfo.organization = urlInfo.owner;\n break;\n }\n\n if (!urlInfo.full_name) {\n urlInfo.full_name = urlInfo.owner;\n if (urlInfo.name) {\n urlInfo.full_name && (urlInfo.full_name += \"/\");\n urlInfo.full_name += urlInfo.name;\n }\n }\n // Bitbucket Server\n if (urlInfo.owner.startsWith(\"scm/\")) {\n urlInfo.source = \"bitbucket-server\";\n urlInfo.owner = urlInfo.owner.replace(\"scm/\", \"\");\n urlInfo.organization = urlInfo.owner;\n urlInfo.full_name = urlInfo.owner + \"/\" + urlInfo.name;\n }\n\n var bitbucket = /(projects|users)\\/(.*?)\\/repos\\/(.*?)((\\/.*$)|$)/;\n var matches = bitbucket.exec(urlInfo.pathname);\n if (matches != null) {\n urlInfo.source = \"bitbucket-server\";\n if (matches[1] === \"users\") {\n urlInfo.owner = \"~\" + matches[2];\n } else {\n urlInfo.owner = matches[2];\n }\n\n urlInfo.organization = urlInfo.owner;\n urlInfo.name = matches[3];\n\n splits = matches[4].split(\"/\");\n if (splits.length > 1) {\n if ([\"raw\", \"browse\"].indexOf(splits[1]) >= 0) {\n urlInfo.filepathtype = splits[1];\n if (splits.length > 2) {\n urlInfo.filepath = splits.slice(2).join('/');\n }\n } else if (splits[1] === \"commits\" && splits.length > 2) {\n urlInfo.commit = splits[2];\n }\n }\n urlInfo.full_name = urlInfo.owner + \"/\" + urlInfo.name;\n\n if (urlInfo.query.at) {\n urlInfo.ref = urlInfo.query.at;\n } else {\n urlInfo.ref = \"\";\n }\n }\n return urlInfo;\n}\n\n/**\n * stringify\n * Stringifies a `GitUrl` object.\n *\n * @name stringify\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @param {String} type The type of the stringified url (default `obj.protocol`).\n * @return {String} The stringified url.\n */\ngitUrlParse.stringify = function (obj, type) {\n type = type || (obj.protocols && obj.protocols.length ? obj.protocols.join('+') : obj.protocol);\n var port = obj.port ? \":\" + obj.port : '';\n var user = obj.user || 'git';\n var maybeGitSuffix = obj.git_suffix ? \".git\" : \"\";\n switch (type) {\n case \"ssh\":\n if (port) return \"ssh://\" + user + \"@\" + obj.resource + port + \"/\" + obj.full_name + maybeGitSuffix;else return user + \"@\" + obj.resource + \":\" + obj.full_name + maybeGitSuffix;\n case \"git+ssh\":\n case \"ssh+git\":\n case \"ftp\":\n case \"ftps\":\n return type + \"://\" + user + \"@\" + obj.resource + port + \"/\" + obj.full_name + maybeGitSuffix;\n case \"http\":\n case \"https\":\n var auth = obj.token ? buildToken(obj) : obj.user && (obj.protocols.includes('http') || obj.protocols.includes('https')) ? obj.user + \"@\" : \"\";\n return type + \"://\" + auth + obj.resource + port + \"/\" + buildPath(obj) + maybeGitSuffix;\n default:\n return obj.href;\n }\n};\n\n/*!\n * buildToken\n * Builds OAuth token prefix (helper function)\n *\n * @name buildToken\n * @function\n * @param {GitUrl} obj The parsed Git url object.\n * @return {String} token prefix\n */\nfunction buildToken(obj) {\n switch (obj.source) {\n case \"bitbucket.org\":\n return \"x-token-auth:\" + obj.token + \"@\";\n default:\n return obj.token + \"@\";\n }\n}\n\nfunction buildPath(obj) {\n switch (obj.source) {\n case \"bitbucket-server\":\n return \"scm/\" + obj.full_name;\n default:\n return \"\" + obj.full_name;\n\n }\n}\n\nmodule.exports = gitUrlParse;","'use strict';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","'use strict';\n// rfc7231 6.1\nconst statusCodeCacheableByDefault = new Set([\n 200,\n 203,\n 204,\n 206,\n 300,\n 301,\n 404,\n 405,\n 410,\n 414,\n 501,\n]);\n\n// This implementation does not understand partial responses (206)\nconst understoodStatuses = new Set([\n 200,\n 203,\n 204,\n 300,\n 301,\n 302,\n 303,\n 307,\n 308,\n 404,\n 405,\n 410,\n 414,\n 501,\n]);\n\nconst errorStatusCodes = new Set([\n 500,\n 502,\n 503, \n 504,\n]);\n\nconst hopByHopHeaders = {\n date: true, // included, because we add Age update Date\n connection: true,\n 'keep-alive': true,\n 'proxy-authenticate': true,\n 'proxy-authorization': true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n};\n\nconst excludedFromRevalidationUpdate = {\n // Since the old body is reused, it doesn't make sense to change properties of the body\n 'content-length': true,\n 'content-encoding': true,\n 'transfer-encoding': true,\n 'content-range': true,\n};\n\nfunction toNumberOrZero(s) {\n const n = parseInt(s, 10);\n return isFinite(n) ? n : 0;\n}\n\n// RFC 5861\nfunction isErrorResponse(response) {\n // consider undefined response as faulty\n if(!response) {\n return true\n }\n return errorStatusCodes.has(response.status);\n}\n\nfunction parseCacheControl(header) {\n const cc = {};\n if (!header) return cc;\n\n // TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),\n // the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale\n const parts = header.trim().split(/\\s*,\\s*/); // TODO: lame parsing\n for (const part of parts) {\n const [k, v] = part.split(/\\s*=\\s*/, 2);\n cc[k] = v === undefined ? true : v.replace(/^\"|\"$/g, ''); // TODO: lame unquoting\n }\n\n return cc;\n}\n\nfunction formatCacheControl(cc) {\n let parts = [];\n for (const k in cc) {\n const v = cc[k];\n parts.push(v === true ? k : k + '=' + v);\n }\n if (!parts.length) {\n return undefined;\n }\n return parts.join(', ');\n}\n\nmodule.exports = class CachePolicy {\n constructor(\n req,\n res,\n {\n shared,\n cacheHeuristic,\n immutableMinTimeToLive,\n ignoreCargoCult,\n _fromObject,\n } = {}\n ) {\n if (_fromObject) {\n this._fromObject(_fromObject);\n return;\n }\n\n if (!res || !res.headers) {\n throw Error('Response headers missing');\n }\n this._assertRequestHasHeaders(req);\n\n this._responseTime = this.now();\n this._isShared = shared !== false;\n this._cacheHeuristic =\n undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE\n this._immutableMinTtl =\n undefined !== immutableMinTimeToLive\n ? immutableMinTimeToLive\n : 24 * 3600 * 1000;\n\n this._status = 'status' in res ? res.status : 200;\n this._resHeaders = res.headers;\n this._rescc = parseCacheControl(res.headers['cache-control']);\n this._method = 'method' in req ? req.method : 'GET';\n this._url = req.url;\n this._host = req.headers.host;\n this._noAuthorization = !req.headers.authorization;\n this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used\n this._reqcc = parseCacheControl(req.headers['cache-control']);\n\n // Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,\n // so there's no point stricly adhering to the blindly copy&pasted directives.\n if (\n ignoreCargoCult &&\n 'pre-check' in this._rescc &&\n 'post-check' in this._rescc\n ) {\n delete this._rescc['pre-check'];\n delete this._rescc['post-check'];\n delete this._rescc['no-cache'];\n delete this._rescc['no-store'];\n delete this._rescc['must-revalidate'];\n this._resHeaders = Object.assign({}, this._resHeaders, {\n 'cache-control': formatCacheControl(this._rescc),\n });\n delete this._resHeaders.expires;\n delete this._resHeaders.pragma;\n }\n\n // When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive\n // as having the same effect as if \"Cache-Control: no-cache\" were present (see Section 5.2.1).\n if (\n res.headers['cache-control'] == null &&\n /no-cache/.test(res.headers.pragma)\n ) {\n this._rescc['no-cache'] = true;\n }\n }\n\n now() {\n return Date.now();\n }\n\n storable() {\n // The \"no-store\" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.\n return !!(\n !this._reqcc['no-store'] &&\n // A cache MUST NOT store a response to any request, unless:\n // The request method is understood by the cache and defined as being cacheable, and\n ('GET' === this._method ||\n 'HEAD' === this._method ||\n ('POST' === this._method && this._hasExplicitExpiration())) &&\n // the response status code is understood by the cache, and\n understoodStatuses.has(this._status) &&\n // the \"no-store\" cache directive does not appear in request or response header fields, and\n !this._rescc['no-store'] &&\n // the \"private\" response directive does not appear in the response, if the cache is shared, and\n (!this._isShared || !this._rescc.private) &&\n // the Authorization header field does not appear in the request, if the cache is shared,\n (!this._isShared ||\n this._noAuthorization ||\n this._allowsStoringAuthenticated()) &&\n // the response either:\n // contains an Expires header field, or\n (this._resHeaders.expires ||\n // contains a max-age response directive, or\n // contains a s-maxage response directive and the cache is shared, or\n // contains a public response directive.\n this._rescc['max-age'] ||\n (this._isShared && this._rescc['s-maxage']) ||\n this._rescc.public ||\n // has a status code that is defined as cacheable by default\n statusCodeCacheableByDefault.has(this._status))\n );\n }\n\n _hasExplicitExpiration() {\n // 4.2.1 Calculating Freshness Lifetime\n return (\n (this._isShared && this._rescc['s-maxage']) ||\n this._rescc['max-age'] ||\n this._resHeaders.expires\n );\n }\n\n _assertRequestHasHeaders(req) {\n if (!req || !req.headers) {\n throw Error('Request headers missing');\n }\n }\n\n satisfiesWithoutRevalidation(req) {\n this._assertRequestHasHeaders(req);\n\n // When presented with a request, a cache MUST NOT reuse a stored response, unless:\n // the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,\n // unless the stored response is successfully validated (Section 4.3), and\n const requestCC = parseCacheControl(req.headers['cache-control']);\n if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {\n return false;\n }\n\n if (requestCC['max-age'] && this.age() > requestCC['max-age']) {\n return false;\n }\n\n if (\n requestCC['min-fresh'] &&\n this.timeToLive() < 1000 * requestCC['min-fresh']\n ) {\n return false;\n }\n\n // the stored response is either:\n // fresh, or allowed to be served stale\n if (this.stale()) {\n const allowsStale =\n requestCC['max-stale'] &&\n !this._rescc['must-revalidate'] &&\n (true === requestCC['max-stale'] ||\n requestCC['max-stale'] > this.age() - this.maxAge());\n if (!allowsStale) {\n return false;\n }\n }\n\n return this._requestMatches(req, false);\n }\n\n _requestMatches(req, allowHeadMethod) {\n // The presented effective request URI and that of the stored response match, and\n return (\n (!this._url || this._url === req.url) &&\n this._host === req.headers.host &&\n // the request method associated with the stored response allows it to be used for the presented request, and\n (!req.method ||\n this._method === req.method ||\n (allowHeadMethod && 'HEAD' === req.method)) &&\n // selecting header fields nominated by the stored response (if any) match those presented, and\n this._varyMatches(req)\n );\n }\n\n _allowsStoringAuthenticated() {\n // following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.\n return (\n this._rescc['must-revalidate'] ||\n this._rescc.public ||\n this._rescc['s-maxage']\n );\n }\n\n _varyMatches(req) {\n if (!this._resHeaders.vary) {\n return true;\n }\n\n // A Vary header field-value of \"*\" always fails to match\n if (this._resHeaders.vary === '*') {\n return false;\n }\n\n const fields = this._resHeaders.vary\n .trim()\n .toLowerCase()\n .split(/\\s*,\\s*/);\n for (const name of fields) {\n if (req.headers[name] !== this._reqHeaders[name]) return false;\n }\n return true;\n }\n\n _copyWithoutHopByHopHeaders(inHeaders) {\n const headers = {};\n for (const name in inHeaders) {\n if (hopByHopHeaders[name]) continue;\n headers[name] = inHeaders[name];\n }\n // 9.1. Connection\n if (inHeaders.connection) {\n const tokens = inHeaders.connection.trim().split(/\\s*,\\s*/);\n for (const name of tokens) {\n delete headers[name];\n }\n }\n if (headers.warning) {\n const warnings = headers.warning.split(/,/).filter(warning => {\n return !/^\\s*1[0-9][0-9]/.test(warning);\n });\n if (!warnings.length) {\n delete headers.warning;\n } else {\n headers.warning = warnings.join(',').trim();\n }\n }\n return headers;\n }\n\n responseHeaders() {\n const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);\n const age = this.age();\n\n // A cache SHOULD generate 113 warning if it heuristically chose a freshness\n // lifetime greater than 24 hours and the response's age is greater than 24 hours.\n if (\n age > 3600 * 24 &&\n !this._hasExplicitExpiration() &&\n this.maxAge() > 3600 * 24\n ) {\n headers.warning =\n (headers.warning ? `${headers.warning}, ` : '') +\n '113 - \"rfc7234 5.5.4\"';\n }\n headers.age = `${Math.round(age)}`;\n headers.date = new Date(this.now()).toUTCString();\n return headers;\n }\n\n /**\n * Value of the Date response header or current time if Date was invalid\n * @return timestamp\n */\n date() {\n const serverDate = Date.parse(this._resHeaders.date);\n if (isFinite(serverDate)) {\n return serverDate;\n }\n return this._responseTime;\n }\n\n /**\n * Value of the Age header, in seconds, updated for the current time.\n * May be fractional.\n *\n * @return Number\n */\n age() {\n let age = this._ageValue();\n\n const residentTime = (this.now() - this._responseTime) / 1000;\n return age + residentTime;\n }\n\n _ageValue() {\n return toNumberOrZero(this._resHeaders.age);\n }\n\n /**\n * Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`.\n *\n * For an up-to-date value, see `timeToLive()`.\n *\n * @return Number\n */\n maxAge() {\n if (!this.storable() || this._rescc['no-cache']) {\n return 0;\n }\n\n // Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default\n // so this implementation requires explicit opt-in via public header\n if (\n this._isShared &&\n (this._resHeaders['set-cookie'] &&\n !this._rescc.public &&\n !this._rescc.immutable)\n ) {\n return 0;\n }\n\n if (this._resHeaders.vary === '*') {\n return 0;\n }\n\n if (this._isShared) {\n if (this._rescc['proxy-revalidate']) {\n return 0;\n }\n // if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.\n if (this._rescc['s-maxage']) {\n return toNumberOrZero(this._rescc['s-maxage']);\n }\n }\n\n // If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.\n if (this._rescc['max-age']) {\n return toNumberOrZero(this._rescc['max-age']);\n }\n\n const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;\n\n const serverDate = this.date();\n if (this._resHeaders.expires) {\n const expires = Date.parse(this._resHeaders.expires);\n // A cache recipient MUST interpret invalid date formats, especially the value \"0\", as representing a time in the past (i.e., \"already expired\").\n if (Number.isNaN(expires) || expires < serverDate) {\n return 0;\n }\n return Math.max(defaultMinTtl, (expires - serverDate) / 1000);\n }\n\n if (this._resHeaders['last-modified']) {\n const lastModified = Date.parse(this._resHeaders['last-modified']);\n if (isFinite(lastModified) && serverDate > lastModified) {\n return Math.max(\n defaultMinTtl,\n ((serverDate - lastModified) / 1000) * this._cacheHeuristic\n );\n }\n }\n\n return defaultMinTtl;\n }\n\n timeToLive() {\n const age = this.maxAge() - this.age();\n const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);\n const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);\n return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000;\n }\n\n stale() {\n return this.maxAge() <= this.age();\n }\n\n _useStaleIfError() {\n return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();\n }\n\n useStaleWhileRevalidate() {\n return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age();\n }\n\n static fromObject(obj) {\n return new this(undefined, undefined, { _fromObject: obj });\n }\n\n _fromObject(obj) {\n if (this._responseTime) throw Error('Reinitialized');\n if (!obj || obj.v !== 1) throw Error('Invalid serialization');\n\n this._responseTime = obj.t;\n this._isShared = obj.sh;\n this._cacheHeuristic = obj.ch;\n this._immutableMinTtl =\n obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;\n this._status = obj.st;\n this._resHeaders = obj.resh;\n this._rescc = obj.rescc;\n this._method = obj.m;\n this._url = obj.u;\n this._host = obj.h;\n this._noAuthorization = obj.a;\n this._reqHeaders = obj.reqh;\n this._reqcc = obj.reqcc;\n }\n\n toObject() {\n return {\n v: 1,\n t: this._responseTime,\n sh: this._isShared,\n ch: this._cacheHeuristic,\n imm: this._immutableMinTtl,\n st: this._status,\n resh: this._resHeaders,\n rescc: this._rescc,\n m: this._method,\n u: this._url,\n h: this._host,\n a: this._noAuthorization,\n reqh: this._reqHeaders,\n reqcc: this._reqcc,\n };\n }\n\n /**\n * Headers for sending to the origin server to revalidate stale response.\n * Allows server to return 304 to allow reuse of the previous response.\n *\n * Hop by hop headers are always stripped.\n * Revalidation headers may be added or removed, depending on request.\n */\n revalidationHeaders(incomingReq) {\n this._assertRequestHasHeaders(incomingReq);\n const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);\n\n // This implementation does not understand range requests\n delete headers['if-range'];\n\n if (!this._requestMatches(incomingReq, true) || !this.storable()) {\n // revalidation allowed via HEAD\n // not for the same resource, or wasn't allowed to be cached anyway\n delete headers['if-none-match'];\n delete headers['if-modified-since'];\n return headers;\n }\n\n /* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */\n if (this._resHeaders.etag) {\n headers['if-none-match'] = headers['if-none-match']\n ? `${headers['if-none-match']}, ${this._resHeaders.etag}`\n : this._resHeaders.etag;\n }\n\n // Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.\n const forbidsWeakValidators =\n headers['accept-ranges'] ||\n headers['if-match'] ||\n headers['if-unmodified-since'] ||\n (this._method && this._method != 'GET');\n\n /* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.\n Note: This implementation does not understand partial responses (206) */\n if (forbidsWeakValidators) {\n delete headers['if-modified-since'];\n\n if (headers['if-none-match']) {\n const etags = headers['if-none-match']\n .split(/,/)\n .filter(etag => {\n return !/^\\s*W\\//.test(etag);\n });\n if (!etags.length) {\n delete headers['if-none-match'];\n } else {\n headers['if-none-match'] = etags.join(',').trim();\n }\n }\n } else if (\n this._resHeaders['last-modified'] &&\n !headers['if-modified-since']\n ) {\n headers['if-modified-since'] = this._resHeaders['last-modified'];\n }\n\n return headers;\n }\n\n /**\n * Creates new CachePolicy with information combined from the previews response,\n * and the new revalidation response.\n *\n * Returns {policy, modified} where modified is a boolean indicating\n * whether the response body has been modified, and old cached body can't be used.\n *\n * @return {Object} {policy: CachePolicy, modified: Boolean}\n */\n revalidatedPolicy(request, response) {\n this._assertRequestHasHeaders(request);\n if(this._useStaleIfError() && isErrorResponse(response)) { // I consider the revalidation request unsuccessful\n return {\n modified: false,\n matches: false,\n policy: this,\n };\n }\n if (!response || !response.headers) {\n throw Error('Response headers missing');\n }\n\n // These aren't going to be supported exactly, since one CachePolicy object\n // doesn't know about all the other cached objects.\n let matches = false;\n if (response.status !== undefined && response.status != 304) {\n matches = false;\n } else if (\n response.headers.etag &&\n !/^\\s*W\\//.test(response.headers.etag)\n ) {\n // \"All of the stored responses with the same strong validator are selected.\n // If none of the stored responses contain the same strong validator,\n // then the cache MUST NOT use the new response to update any stored responses.\"\n matches =\n this._resHeaders.etag &&\n this._resHeaders.etag.replace(/^\\s*W\\//, '') ===\n response.headers.etag;\n } else if (this._resHeaders.etag && response.headers.etag) {\n // \"If the new response contains a weak validator and that validator corresponds\n // to one of the cache's stored responses,\n // then the most recent of those matching stored responses is selected for update.\"\n matches =\n this._resHeaders.etag.replace(/^\\s*W\\//, '') ===\n response.headers.etag.replace(/^\\s*W\\//, '');\n } else if (this._resHeaders['last-modified']) {\n matches =\n this._resHeaders['last-modified'] ===\n response.headers['last-modified'];\n } else {\n // If the new response does not include any form of validator (such as in the case where\n // a client generates an If-Modified-Since request from a source other than the Last-Modified\n // response header field), and there is only one stored response, and that stored response also\n // lacks a validator, then that stored response is selected for update.\n if (\n !this._resHeaders.etag &&\n !this._resHeaders['last-modified'] &&\n !response.headers.etag &&\n !response.headers['last-modified']\n ) {\n matches = true;\n }\n }\n\n if (!matches) {\n return {\n policy: new this.constructor(request, response),\n // Client receiving 304 without body, even if it's invalid/mismatched has no option\n // but to reuse a cached body. We don't have a good way to tell clients to do\n // error recovery in such case.\n modified: response.status != 304,\n matches: false,\n };\n }\n\n // use other header fields provided in the 304 (Not Modified) response to replace all instances\n // of the corresponding header fields in the stored response.\n const headers = {};\n for (const k in this._resHeaders) {\n headers[k] =\n k in response.headers && !excludedFromRevalidationUpdate[k]\n ? response.headers[k]\n : this._resHeaders[k];\n }\n\n const newResponse = Object.assign({}, response, {\n status: this._status,\n method: this._method,\n headers,\n });\n return {\n policy: new this.constructor(request, newResponse, {\n shared: this._isShared,\n cacheHeuristic: this._cacheHeuristic,\n immutableMinTimeToLive: this._immutableMinTtl,\n }),\n modified: false,\n matches: true,\n };\n }\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst net_1 = __importDefault(require(\"net\"));\nconst tls_1 = __importDefault(require(\"tls\"));\nconst url_1 = __importDefault(require(\"url\"));\nconst assert_1 = __importDefault(require(\"assert\"));\nconst debug_1 = __importDefault(require(\"debug\"));\nconst agent_base_1 = require(\"agent-base\");\nconst parse_proxy_response_1 = __importDefault(require(\"./parse-proxy-response\"));\nconst debug = debug_1.default('https-proxy-agent:agent');\n/**\n * The `HttpsProxyAgent` implements an HTTP Agent subclass that connects to\n * the specified \"HTTP(s) proxy server\" in order to proxy HTTPS requests.\n *\n * Outgoing HTTP requests are first tunneled through the proxy server using the\n * `CONNECT` HTTP request method to establish a connection to the proxy server,\n * and then the proxy server connects to the destination target and issues the\n * HTTP request from the proxy server.\n *\n * `https:` requests have their socket connection upgraded to TLS once\n * the connection to the proxy server has been established.\n *\n * @api public\n */\nclass HttpsProxyAgent extends agent_base_1.Agent {\n constructor(_opts) {\n let opts;\n if (typeof _opts === 'string') {\n opts = url_1.default.parse(_opts);\n }\n else {\n opts = _opts;\n }\n if (!opts) {\n throw new Error('an HTTP(S) proxy server `host` and `port` must be specified!');\n }\n debug('creating new HttpsProxyAgent instance: %o', opts);\n super(opts);\n const proxy = Object.assign({}, opts);\n // If `true`, then connect to the proxy server over TLS.\n // Defaults to `false`.\n this.secureProxy = opts.secureProxy || isHTTPS(proxy.protocol);\n // Prefer `hostname` over `host`, and set the `port` if needed.\n proxy.host = proxy.hostname || proxy.host;\n if (typeof proxy.port === 'string') {\n proxy.port = parseInt(proxy.port, 10);\n }\n if (!proxy.port && proxy.host) {\n proxy.port = this.secureProxy ? 443 : 80;\n }\n // ALPN is supported by Node.js >= v5.\n // attempt to negotiate http/1.1 for proxy servers that support http/2\n if (this.secureProxy && !('ALPNProtocols' in proxy)) {\n proxy.ALPNProtocols = ['http 1.1'];\n }\n if (proxy.host && proxy.path) {\n // If both a `host` and `path` are specified then it's most likely\n // the result of a `url.parse()` call... we need to remove the\n // `path` portion so that `net.connect()` doesn't attempt to open\n // that as a Unix socket file.\n delete proxy.path;\n delete proxy.pathname;\n }\n this.proxy = proxy;\n }\n /**\n * Called when the node-core HTTP client library is creating a\n * new HTTP request.\n *\n * @api protected\n */\n callback(req, opts) {\n return __awaiter(this, void 0, void 0, function* () {\n const { proxy, secureProxy } = this;\n // Create a socket connection to the proxy server.\n let socket;\n if (secureProxy) {\n debug('Creating `tls.Socket`: %o', proxy);\n socket = tls_1.default.connect(proxy);\n }\n else {\n debug('Creating `net.Socket`: %o', proxy);\n socket = net_1.default.connect(proxy);\n }\n const headers = Object.assign({}, proxy.headers);\n const hostname = `${opts.host}:${opts.port}`;\n let payload = `CONNECT ${hostname} HTTP/1.1\\r\\n`;\n // Inject the `Proxy-Authorization` header if necessary.\n if (proxy.auth) {\n headers['Proxy-Authorization'] = `Basic ${Buffer.from(proxy.auth).toString('base64')}`;\n }\n // The `Host` header should only include the port\n // number when it is not the default port.\n let { host, port, secureEndpoint } = opts;\n if (!isDefaultPort(port, secureEndpoint)) {\n host += `:${port}`;\n }\n headers.Host = host;\n headers.Connection = 'close';\n for (const name of Object.keys(headers)) {\n payload += `${name}: ${headers[name]}\\r\\n`;\n }\n const proxyResponsePromise = parse_proxy_response_1.default(socket);\n socket.write(`${payload}\\r\\n`);\n const { statusCode, buffered } = yield proxyResponsePromise;\n if (statusCode === 200) {\n req.once('socket', resume);\n if (opts.secureEndpoint) {\n // The proxy is connecting to a TLS server, so upgrade\n // this socket connection to a TLS connection.\n debug('Upgrading socket connection to TLS');\n const servername = opts.servername || opts.host;\n return tls_1.default.connect(Object.assign(Object.assign({}, omit(opts, 'host', 'hostname', 'path', 'port')), { socket,\n servername }));\n }\n return socket;\n }\n // Some other status code that's not 200... need to re-play the HTTP\n // header \"data\" events onto the socket once the HTTP machinery is\n // attached so that the node core `http` can parse and handle the\n // error status code.\n // Close the original socket, and a new \"fake\" socket is returned\n // instead, so that the proxy doesn't get the HTTP request\n // written to it (which may contain `Authorization` headers or other\n // sensitive data).\n //\n // See: https://hackerone.com/reports/541502\n socket.destroy();\n const fakeSocket = new net_1.default.Socket({ writable: false });\n fakeSocket.readable = true;\n // Need to wait for the \"socket\" event to re-play the \"data\" events.\n req.once('socket', (s) => {\n debug('replaying proxy buffer for failed request');\n assert_1.default(s.listenerCount('data') > 0);\n // Replay the \"buffered\" Buffer onto the fake `socket`, since at\n // this point the HTTP module machinery has been hooked up for\n // the user.\n s.push(buffered);\n s.push(null);\n });\n return fakeSocket;\n });\n }\n}\nexports.default = HttpsProxyAgent;\nfunction resume(socket) {\n socket.resume();\n}\nfunction isDefaultPort(port, secure) {\n return Boolean((!secure && port === 80) || (secure && port === 443));\n}\nfunction isHTTPS(protocol) {\n return typeof protocol === 'string' ? /^https:?$/i.test(protocol) : false;\n}\nfunction omit(obj, ...keys) {\n const ret = {};\n let key;\n for (key in obj) {\n if (!keys.includes(key)) {\n ret[key] = obj[key];\n }\n }\n return ret;\n}\n//# sourceMappingURL=agent.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nconst agent_1 = __importDefault(require(\"./agent\"));\nfunction createHttpsProxyAgent(opts) {\n return new agent_1.default(opts);\n}\n(function (createHttpsProxyAgent) {\n createHttpsProxyAgent.HttpsProxyAgent = agent_1.default;\n createHttpsProxyAgent.prototype = agent_1.default.prototype;\n})(createHttpsProxyAgent || (createHttpsProxyAgent = {}));\nmodule.exports = createHttpsProxyAgent;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst debug_1 = __importDefault(require(\"debug\"));\nconst debug = debug_1.default('https-proxy-agent:parse-proxy-response');\nfunction parseProxyResponse(socket) {\n return new Promise((resolve, reject) => {\n // we need to buffer any HTTP traffic that happens with the proxy before we get\n // the CONNECT response, so that if the response is anything other than an \"200\"\n // response code, then we can re-play the \"data\" events on the socket once the\n // HTTP parser is hooked up...\n let buffersLength = 0;\n const buffers = [];\n function read() {\n const b = socket.read();\n if (b)\n ondata(b);\n else\n socket.once('readable', read);\n }\n function cleanup() {\n socket.removeListener('end', onend);\n socket.removeListener('error', onerror);\n socket.removeListener('close', onclose);\n socket.removeListener('readable', read);\n }\n function onclose(err) {\n debug('onclose had error %o', err);\n }\n function onend() {\n debug('onend');\n }\n function onerror(err) {\n cleanup();\n debug('onerror %o', err);\n reject(err);\n }\n function ondata(b) {\n buffers.push(b);\n buffersLength += b.length;\n const buffered = Buffer.concat(buffers, buffersLength);\n const endOfHeaders = buffered.indexOf('\\r\\n\\r\\n');\n if (endOfHeaders === -1) {\n // keep buffering\n debug('have not received end of HTTP headers yet...');\n read();\n return;\n }\n const firstLine = buffered.toString('ascii', 0, buffered.indexOf('\\r\\n'));\n const statusCode = +firstLine.split(' ')[1];\n debug('got proxy server response: %o', firstLine);\n resolve({\n statusCode,\n buffered\n });\n }\n socket.on('error', onerror);\n socket.on('close', onclose);\n socket.on('end', onend);\n read();\n });\n}\nexports.default = parseProxyResponse;\n//# sourceMappingURL=parse-proxy-response.js.map","// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /\\\\?\\s+$/,\n match => match.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n ],\n\n // replace (\\ ) with ' '\n [\n /\\\\\\s/g,\n () => SPACE\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // normal intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule,\n // coz trailing single wildcard will be handed by [trailing wildcard]\n /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1, p2) => {\n // 1.\n // > An asterisk \"*\" matches anything except a slash.\n // 2.\n // > Other consecutive asterisks are considered regular asterisks\n // > and will match according to the previous rules.\n const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n return p1 + unescaped\n }\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${sanitizeRange(range)}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ],\n\n // trailing wildcard\n [\n /(\\^|\\\\\\/)?\\\\\\*$/,\n (_, p1) => {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n let source = regexCache[pattern]\n\n if (!source) {\n source = REPLACERS.reduce(\n (prev, current) => prev.replace(current[0], current[1].bind(pattern)),\n pattern\n )\n regexCache[pattern] = source\n }\n\n return ignoreCase\n ? new RegExp(source, 'i')\n : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n constructor (\n origin,\n pattern,\n negative,\n regex\n ) {\n this.origin = origin\n this.pattern = pattern\n this.negative = negative\n this.regex = regex\n }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n const origin = pattern\n let negative = false\n\n // > An optional prefix \"!\" which negates the pattern;\n if (pattern.indexOf('!') === 0) {\n negative = true\n pattern = pattern.substr(1)\n }\n\n pattern = pattern\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regex = makeRegex(pattern, ignoreCase)\n\n return new IgnoreRule(\n origin,\n pattern,\n negative,\n regex\n )\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n constructor ({\n ignorecase = true,\n ignoreCase = ignorecase,\n allowRelativePaths = false\n } = {}) {\n define(this, KEY_IGNORE, true)\n\n this._rules = []\n this._ignoreCase = ignoreCase\n this._allowRelativePaths = allowRelativePaths\n this._initCache()\n }\n\n _initCache () {\n this._ignoreCache = Object.create(null)\n this._testCache = Object.create(null)\n }\n\n _addPattern (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules)\n this._added = true\n return\n }\n\n if (checkPattern(pattern)) {\n const rule = createRule(pattern, this._ignoreCase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._addPattern, this)\n\n // Some rules have just added to the ignore,\n // making the behavior changed.\n if (this._added) {\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // | ignored : unignored\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n\n // @param {boolean} whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n\n // @returns {TestResult} true if a file is ignored\n _testOne (path, checkUnignored) {\n let ignored = false\n let unignored = false\n\n this._rules.forEach(rule => {\n const {negative} = rule\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule.regex.test(path)\n\n if (matched) {\n ignored = !negative\n unignored = negative\n }\n })\n\n return {\n ignored,\n unignored\n }\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(\n path,\n originalPath,\n this._allowRelativePaths\n ? RETURN_FALSE\n : throwError\n )\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n _t (path, cache, checkUnignored, slices) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._testOne(path, checkUnignored)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._testOne(path, checkUnignored)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && (\n process.env && process.env.IGNORE_TEST_WIN32\n || process.platform === 'win32'\n )\n) {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n","'use strict';\nconst fs = require('fs');\n\nlet isDocker;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch (_) {\n\t\treturn false;\n\t}\n}\n\nmodule.exports = () => {\n\tif (isDocker === undefined) {\n\t\tisDocker = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDocker;\n};\n","// https://github.com/electron/electron/issues/2288\nfunction isElectron() {\n // Renderer process\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true;\n }\n\n // Main process\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\n return true;\n }\n\n // Detect the user agent when the `nodeIntegration` option is set to false\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\n return true;\n }\n\n return false;\n}\n\nmodule.exports = isElectron;\n","\"use strict\";\n\n// Dependencies\nvar protocols = require(\"protocols\");\n\n/**\n * isSsh\n * Checks if an input value is a ssh url or not.\n *\n * @name isSsh\n * @function\n * @param {String|Array} input The input url or an array of protocols.\n * @return {Boolean} `true` if the input is a ssh url, `false` otherwise.\n */\nfunction isSsh(input) {\n\n if (Array.isArray(input)) {\n return input.indexOf(\"ssh\") !== -1 || input.indexOf(\"rsync\") !== -1;\n }\n\n if (typeof input !== \"string\") {\n return false;\n }\n\n var prots = protocols(input);\n input = input.substring(input.indexOf(\"://\") + 3);\n if (isSsh(prots)) {\n return true;\n }\n\n // TODO This probably could be improved :)\n var urlPortPattern = new RegExp('\\.([a-zA-Z\\\\d]+):(\\\\d+)\\/');\n return !input.match(urlPortPattern) && input.indexOf(\"@\") < input.indexOf(\":\");\n}\n\nmodule.exports = isSsh;","'use strict';\nconst os = require('os');\nconst fs = require('fs');\nconst isDocker = require('is-docker');\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isDocker()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?\n\t\t\t!isDocker() : false;\n\t} catch (_) {\n\t\treturn false;\n\t}\n};\n\nif (process.env.__IS_WSL_TEST__) {\n\tmodule.exports = isWsl;\n} else {\n\tmodule.exports = isWsl();\n}\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/**\n * Advanced Encryption Standard (AES) implementation.\n *\n * This implementation is based on the public domain library 'jscrypto' which\n * was written by:\n *\n * Emily Stark (estark@stanford.edu)\n * Mike Hamburg (mhamburg@stanford.edu)\n * Dan Boneh (dabo@cs.stanford.edu)\n *\n * Parts of this code are based on the OpenSSL implementation of AES:\n * http://www.openssl.org\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* AES API */\nmodule.exports = forge.aes = forge.aes || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-', key);\n * cipher.start({iv: iv});\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('AES-', key);\n *\n * Creates an AES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-', key);\n * decipher.start({iv: iv});\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as a string of bytes, an array of bytes,\n * a byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('AES-', key);\n *\n * Creates an AES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param key the symmetric key to use.\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.aes.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new AES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the AES algorithm object.\n */\nforge.aes.Algorithm = function(name, mode) {\n if(!init) {\n initialize();\n }\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 16,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._w, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this AES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.aes.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = options.key;\n var tmp;\n\n /* Note: The key may be a string of bytes, an array of bytes, a byte\n buffer, or an array of 32-bit integers. If the key is in bytes, then\n it must be 16, 24, or 32 bytes in length. If it is in 32-bit\n integers, it must be 4, 6, or 8 integers long. */\n\n if(typeof key === 'string' &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key string into byte buffer\n key = forge.util.createBuffer(key);\n } else if(forge.util.isArray(key) &&\n (key.length === 16 || key.length === 24 || key.length === 32)) {\n // convert key integer array into byte buffer\n tmp = key;\n key = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n key.putByte(tmp[i]);\n }\n }\n\n // convert key byte buffer into 32-bit integer array\n if(!forge.util.isArray(key)) {\n tmp = key;\n key = [];\n\n // key lengths of 16, 24, 32 bytes allowed\n var len = tmp.length();\n if(len === 16 || len === 24 || len === 32) {\n len = len >>> 2;\n for(var i = 0; i < len; ++i) {\n key.push(tmp.getInt32());\n }\n }\n }\n\n // key must be an array of 32-bit integers by now\n if(!forge.util.isArray(key) ||\n !(key.length === 4 || key.length === 6 || key.length === 8)) {\n throw new Error('Invalid key parameter.');\n }\n\n // encryption operation is always used for these modes\n var mode = this.mode.name;\n var encryptOp = (['CFB', 'OFB', 'CTR', 'GCM'].indexOf(mode) !== -1);\n\n // do key expansion\n this._w = _expandKey(key, options.decrypt && !encryptOp);\n this._init = true;\n};\n\n/**\n * Expands a key. Typically only used for testing.\n *\n * @param key the symmetric key to expand, as an array of 32-bit words.\n * @param decrypt true to expand for decryption, false for encryption.\n *\n * @return the expanded key.\n */\nforge.aes._expandKey = function(key, decrypt) {\n if(!init) {\n initialize();\n }\n return _expandKey(key, decrypt);\n};\n\n/**\n * Updates a single block. Typically only used for testing.\n *\n * @param w the expanded key to use.\n * @param input an array of block-size 32-bit words.\n * @param output an array of block-size 32-bit words.\n * @param decrypt true to decrypt, false to encrypt.\n */\nforge.aes._updateBlock = _updateBlock;\n\n/** Register AES algorithms **/\n\nregisterAlgorithm('AES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('AES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('AES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('AES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('AES-CTR', forge.cipher.modes.ctr);\nregisterAlgorithm('AES-GCM', forge.cipher.modes.gcm);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.aes.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** AES implementation **/\n\nvar init = false; // not yet initialized\nvar Nb = 4; // number of words comprising the state (AES = 4)\nvar sbox; // non-linear substitution table used in key expansion\nvar isbox; // inversion of sbox\nvar rcon; // round constant word array\nvar mix; // mix-columns table\nvar imix; // inverse mix-columns table\n\n/**\n * Performs initialization, ie: precomputes tables to optimize for speed.\n *\n * One way to understand how AES works is to imagine that 'addition' and\n * 'multiplication' are interfaces that require certain mathematical\n * properties to hold true (ie: they are associative) but they might have\n * different implementations and produce different kinds of results ...\n * provided that their mathematical properties remain true. AES defines\n * its own methods of addition and multiplication but keeps some important\n * properties the same, ie: associativity and distributivity. The\n * explanation below tries to shed some light on how AES defines addition\n * and multiplication of bytes and 32-bit words in order to perform its\n * encryption and decryption algorithms.\n *\n * The basics:\n *\n * The AES algorithm views bytes as binary representations of polynomials\n * that have either 1 or 0 as the coefficients. It defines the addition\n * or subtraction of two bytes as the XOR operation. It also defines the\n * multiplication of two bytes as a finite field referred to as GF(2^8)\n * (Note: 'GF' means \"Galois Field\" which is a field that contains a finite\n * number of elements so GF(2^8) has 256 elements).\n *\n * This means that any two bytes can be represented as binary polynomials;\n * when they multiplied together and modularly reduced by an irreducible\n * polynomial of the 8th degree, the results are the field GF(2^8). The\n * specific irreducible polynomial that AES uses in hexadecimal is 0x11b.\n * This multiplication is associative with 0x01 as the identity:\n *\n * (b * 0x01 = GF(b, 0x01) = b).\n *\n * The operation GF(b, 0x02) can be performed at the byte level by left\n * shifting b once and then XOR'ing it (to perform the modular reduction)\n * with 0x11b if b is >= 128. Repeated application of the multiplication\n * of 0x02 can be used to implement the multiplication of any two bytes.\n *\n * For instance, multiplying 0x57 and 0x13, denoted as GF(0x57, 0x13), can\n * be performed by factoring 0x13 into 0x01, 0x02, and 0x10. Then these\n * factors can each be multiplied by 0x57 and then added together. To do\n * the multiplication, values for 0x57 multiplied by each of these 3 factors\n * can be precomputed and stored in a table. To add them, the values from\n * the table are XOR'd together.\n *\n * AES also defines addition and multiplication of words, that is 4-byte\n * numbers represented as polynomials of 3 degrees where the coefficients\n * are the values of the bytes.\n *\n * The word [a0, a1, a2, a3] is a polynomial a3x^3 + a2x^2 + a1x + a0.\n *\n * Addition is performed by XOR'ing like powers of x. Multiplication\n * is performed in two steps, the first is an algebriac expansion as\n * you would do normally (where addition is XOR). But the result is\n * a polynomial larger than 3 degrees and thus it cannot fit in a word. So\n * next the result is modularly reduced by an AES-specific polynomial of\n * degree 4 which will always produce a polynomial of less than 4 degrees\n * such that it will fit in a word. In AES, this polynomial is x^4 + 1.\n *\n * The modular product of two polynomials 'a' and 'b' is thus:\n *\n * d(x) = d3x^3 + d2x^2 + d1x + d0\n * with\n * d0 = GF(a0, b0) ^ GF(a3, b1) ^ GF(a2, b2) ^ GF(a1, b3)\n * d1 = GF(a1, b0) ^ GF(a0, b1) ^ GF(a3, b2) ^ GF(a2, b3)\n * d2 = GF(a2, b0) ^ GF(a1, b1) ^ GF(a0, b2) ^ GF(a3, b3)\n * d3 = GF(a3, b0) ^ GF(a2, b1) ^ GF(a1, b2) ^ GF(a0, b3)\n *\n * As a matrix:\n *\n * [d0] = [a0 a3 a2 a1][b0]\n * [d1] [a1 a0 a3 a2][b1]\n * [d2] [a2 a1 a0 a3][b2]\n * [d3] [a3 a2 a1 a0][b3]\n *\n * Special polynomials defined by AES (0x02 == {02}):\n * a(x) = {03}x^3 + {01}x^2 + {01}x + {02}\n * a^-1(x) = {0b}x^3 + {0d}x^2 + {09}x + {0e}.\n *\n * These polynomials are used in the MixColumns() and InverseMixColumns()\n * operations, respectively, to cause each element in the state to affect\n * the output (referred to as diffusing).\n *\n * RotWord() uses: a0 = a1 = a2 = {00} and a3 = {01}, which is the\n * polynomial x3.\n *\n * The ShiftRows() method modifies the last 3 rows in the state (where\n * the state is 4 words with 4 bytes per word) by shifting bytes cyclically.\n * The 1st byte in the second row is moved to the end of the row. The 1st\n * and 2nd bytes in the third row are moved to the end of the row. The 1st,\n * 2nd, and 3rd bytes are moved in the fourth row.\n *\n * More details on how AES arithmetic works:\n *\n * In the polynomial representation of binary numbers, XOR performs addition\n * and subtraction and multiplication in GF(2^8) denoted as GF(a, b)\n * corresponds with the multiplication of polynomials modulo an irreducible\n * polynomial of degree 8. In other words, for AES, GF(a, b) will multiply\n * polynomial 'a' with polynomial 'b' and then do a modular reduction by\n * an AES-specific irreducible polynomial of degree 8.\n *\n * A polynomial is irreducible if its only divisors are one and itself. For\n * the AES algorithm, this irreducible polynomial is:\n *\n * m(x) = x^8 + x^4 + x^3 + x + 1,\n *\n * or {01}{1b} in hexadecimal notation, where each coefficient is a bit:\n * 100011011 = 283 = 0x11b.\n *\n * For example, GF(0x57, 0x83) = 0xc1 because\n *\n * 0x57 = 87 = 01010111 = x^6 + x^4 + x^2 + x + 1\n * 0x85 = 131 = 10000101 = x^7 + x + 1\n *\n * (x^6 + x^4 + x^2 + x + 1) * (x^7 + x + 1)\n * = x^13 + x^11 + x^9 + x^8 + x^7 +\n * x^7 + x^5 + x^3 + x^2 + x +\n * x^6 + x^4 + x^2 + x + 1\n * = x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 = y\n * y modulo (x^8 + x^4 + x^3 + x + 1)\n * = x^7 + x^6 + 1.\n *\n * The modular reduction by m(x) guarantees the result will be a binary\n * polynomial of less than degree 8, so that it can fit in a byte.\n *\n * The operation to multiply a binary polynomial b with x (the polynomial\n * x in binary representation is 00000010) is:\n *\n * b_7x^8 + b_6x^7 + b_5x^6 + b_4x^5 + b_3x^4 + b_2x^3 + b_1x^2 + b_0x^1\n *\n * To get GF(b, x) we must reduce that by m(x). If b_7 is 0 (that is the\n * most significant bit is 0 in b) then the result is already reduced. If\n * it is 1, then we can reduce it by subtracting m(x) via an XOR.\n *\n * It follows that multiplication by x (00000010 or 0x02) can be implemented\n * by performing a left shift followed by a conditional bitwise XOR with\n * 0x1b. This operation on bytes is denoted by xtime(). Multiplication by\n * higher powers of x can be implemented by repeated application of xtime().\n *\n * By adding intermediate results, multiplication by any constant can be\n * implemented. For instance:\n *\n * GF(0x57, 0x13) = 0xfe because:\n *\n * xtime(b) = (b & 128) ? (b << 1 ^ 0x11b) : (b << 1)\n *\n * Note: We XOR with 0x11b instead of 0x1b because in javascript our\n * datatype for b can be larger than 1 byte, so a left shift will not\n * automatically eliminate bits that overflow a byte ... by XOR'ing the\n * overflow bit with 1 (the extra one from 0x11b) we zero it out.\n *\n * GF(0x57, 0x02) = xtime(0x57) = 0xae\n * GF(0x57, 0x04) = xtime(0xae) = 0x47\n * GF(0x57, 0x08) = xtime(0x47) = 0x8e\n * GF(0x57, 0x10) = xtime(0x8e) = 0x07\n *\n * GF(0x57, 0x13) = GF(0x57, (0x01 ^ 0x02 ^ 0x10))\n *\n * And by the distributive property (since XOR is addition and GF() is\n * multiplication):\n *\n * = GF(0x57, 0x01) ^ GF(0x57, 0x02) ^ GF(0x57, 0x10)\n * = 0x57 ^ 0xae ^ 0x07\n * = 0xfe.\n */\nfunction initialize() {\n init = true;\n\n /* Populate the Rcon table. These are the values given by\n [x^(i-1),{00},{00},{00}] where x^(i-1) are powers of x (and x = 0x02)\n in the field of GF(2^8), where i starts at 1.\n\n rcon[0] = [0x00, 0x00, 0x00, 0x00]\n rcon[1] = [0x01, 0x00, 0x00, 0x00] 2^(1-1) = 2^0 = 1\n rcon[2] = [0x02, 0x00, 0x00, 0x00] 2^(2-1) = 2^1 = 2\n ...\n rcon[9] = [0x1B, 0x00, 0x00, 0x00] 2^(9-1) = 2^8 = 0x1B\n rcon[10] = [0x36, 0x00, 0x00, 0x00] 2^(10-1) = 2^9 = 0x36\n\n We only store the first byte because it is the only one used.\n */\n rcon = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B, 0x36];\n\n // compute xtime table which maps i onto GF(i, 0x02)\n var xtime = new Array(256);\n for(var i = 0; i < 128; ++i) {\n xtime[i] = i << 1;\n xtime[i + 128] = (i + 128) << 1 ^ 0x11B;\n }\n\n // compute all other tables\n sbox = new Array(256);\n isbox = new Array(256);\n mix = new Array(4);\n imix = new Array(4);\n for(var i = 0; i < 4; ++i) {\n mix[i] = new Array(256);\n imix[i] = new Array(256);\n }\n var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime;\n for(var i = 0; i < 256; ++i) {\n /* We need to generate the SubBytes() sbox and isbox tables so that\n we can perform byte substitutions. This requires us to traverse\n all of the elements in GF, find their multiplicative inverses,\n and apply to each the following affine transformation:\n\n bi' = bi ^ b(i + 4) mod 8 ^ b(i + 5) mod 8 ^ b(i + 6) mod 8 ^\n b(i + 7) mod 8 ^ ci\n for 0 <= i < 8, where bi is the ith bit of the byte, and ci is the\n ith bit of a byte c with the value {63} or {01100011}.\n\n It is possible to traverse every possible value in a Galois field\n using what is referred to as a 'generator'. There are many\n generators (128 out of 256): 3,5,6,9,11,82 to name a few. To fully\n traverse GF we iterate 255 times, multiplying by our generator\n each time.\n\n On each iteration we can determine the multiplicative inverse for\n the current element.\n\n Suppose there is an element in GF 'e'. For a given generator 'g',\n e = g^x. The multiplicative inverse of e is g^(255 - x). It turns\n out that if use the inverse of a generator as another generator\n it will produce all of the corresponding multiplicative inverses\n at the same time. For this reason, we choose 5 as our inverse\n generator because it only requires 2 multiplies and 1 add and its\n inverse, 82, requires relatively few operations as well.\n\n In order to apply the affine transformation, the multiplicative\n inverse 'ei' of 'e' can be repeatedly XOR'd (4 times) with a\n bit-cycling of 'ei'. To do this 'ei' is first stored in 's' and\n 'x'. Then 's' is left shifted and the high bit of 's' is made the\n low bit. The resulting value is stored in 's'. Then 'x' is XOR'd\n with 's' and stored in 'x'. On each subsequent iteration the same\n operation is performed. When 4 iterations are complete, 'x' is\n XOR'd with 'c' (0x63) and the transformed value is stored in 'x'.\n For example:\n\n s = 01000001\n x = 01000001\n\n iteration 1: s = 10000010, x ^= s\n iteration 2: s = 00000101, x ^= s\n iteration 3: s = 00001010, x ^= s\n iteration 4: s = 00010100, x ^= s\n x ^= 0x63\n\n This can be done with a loop where s = (s << 1) | (s >> 7). However,\n it can also be done by using a single 16-bit (in this case 32-bit)\n number 'sx'. Since XOR is an associative operation, we can set 'sx'\n to 'ei' and then XOR it with 'sx' left-shifted 1,2,3, and 4 times.\n The most significant bits will flow into the high 8 bit positions\n and be correctly XOR'd with one another. All that remains will be\n to cycle the high 8 bits by XOR'ing them all with the lower 8 bits\n afterwards.\n\n At the same time we're populating sbox and isbox we can precompute\n the multiplication we'll need to do to do MixColumns() later.\n */\n\n // apply affine transformation\n sx = ei ^ (ei << 1) ^ (ei << 2) ^ (ei << 3) ^ (ei << 4);\n sx = (sx >> 8) ^ (sx & 255) ^ 0x63;\n\n // update tables\n sbox[e] = sx;\n isbox[sx] = e;\n\n /* Mixing columns is done using matrix multiplication. The columns\n that are to be mixed are each a single word in the current state.\n The state has Nb columns (4 columns). Therefore each column is a\n 4 byte word. So to mix the columns in a single column 'c' where\n its rows are r0, r1, r2, and r3, we use the following matrix\n multiplication:\n\n [2 3 1 1]*[r0,c]=[r'0,c]\n [1 2 3 1] [r1,c] [r'1,c]\n [1 1 2 3] [r2,c] [r'2,c]\n [3 1 1 2] [r3,c] [r'3,c]\n\n r0, r1, r2, and r3 are each 1 byte of one of the words in the\n state (a column). To do matrix multiplication for each mixed\n column c' we multiply the corresponding row from the left matrix\n with the corresponding column from the right matrix. In total, we\n get 4 equations:\n\n r0,c' = 2*r0,c + 3*r1,c + 1*r2,c + 1*r3,c\n r1,c' = 1*r0,c + 2*r1,c + 3*r2,c + 1*r3,c\n r2,c' = 1*r0,c + 1*r1,c + 2*r2,c + 3*r3,c\n r3,c' = 3*r0,c + 1*r1,c + 1*r2,c + 2*r3,c\n\n As usual, the multiplication is as previously defined and the\n addition is XOR. In order to optimize mixing columns we can store\n the multiplication results in tables. If you think of the whole\n column as a word (it might help to visualize by mentally rotating\n the equations above by counterclockwise 90 degrees) then you can\n see that it would be useful to map the multiplications performed on\n each byte (r0, r1, r2, r3) onto a word as well. For instance, we\n could map 2*r0,1*r0,1*r0,3*r0 onto a word by storing 2*r0 in the\n highest 8 bits and 3*r0 in the lowest 8 bits (with the other two\n respectively in the middle). This means that a table can be\n constructed that uses r0 as an index to the word. We can do the\n same with r1, r2, and r3, creating a total of 4 tables.\n\n To construct a full c', we can just look up each byte of c in\n their respective tables and XOR the results together.\n\n Also, to build each table we only have to calculate the word\n for 2,1,1,3 for every byte ... which we can do on each iteration\n of this loop since we will iterate over every byte. After we have\n calculated 2,1,1,3 we can get the results for the other tables\n by cycling the byte at the end to the beginning. For instance\n we can take the result of table 2,1,1,3 and produce table 3,2,1,1\n by moving the right most byte to the left most position just like\n how you can imagine the 3 moved out of 2,1,1,3 and to the front\n to produce 3,2,1,1.\n\n There is another optimization in that the same multiples of\n the current element we need in order to advance our generator\n to the next iteration can be reused in performing the 2,1,1,3\n calculation. We also calculate the inverse mix column tables,\n with e,9,d,b being the inverse of 2,1,1,3.\n\n When we're done, and we need to actually mix columns, the first\n byte of each state word should be put through mix[0] (2,1,1,3),\n the second through mix[1] (3,2,1,1) and so forth. Then they should\n be XOR'd together to produce the fully mixed column.\n */\n\n // calculate mix and imix table values\n sx2 = xtime[sx];\n e2 = xtime[e];\n e4 = xtime[e2];\n e8 = xtime[e4];\n me =\n (sx2 << 24) ^ // 2\n (sx << 16) ^ // 1\n (sx << 8) ^ // 1\n (sx ^ sx2); // 3\n ime =\n (e2 ^ e4 ^ e8) << 24 ^ // E (14)\n (e ^ e8) << 16 ^ // 9\n (e ^ e4 ^ e8) << 8 ^ // D (13)\n (e ^ e2 ^ e8); // B (11)\n // produce each of the mix tables by rotating the 2,1,1,3 value\n for(var n = 0; n < 4; ++n) {\n mix[n][e] = me;\n imix[n][sx] = ime;\n // cycle the right most byte to the left most position\n // ie: 2,1,1,3 becomes 3,2,1,1\n me = me << 24 | me >>> 8;\n ime = ime << 24 | ime >>> 8;\n }\n\n // get next element and inverse\n if(e === 0) {\n // 1 is the inverse of 1\n e = ei = 1;\n } else {\n // e = 2e + 2*2*2*(10e)) = multiply e by 82 (chosen generator)\n // ei = ei + 2*2*ei = multiply ei by 5 (inverse generator)\n e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]];\n ei ^= xtime[xtime[ei]];\n }\n }\n}\n\n/**\n * Generates a key schedule using the AES key expansion algorithm.\n *\n * The AES algorithm takes the Cipher Key, K, and performs a Key Expansion\n * routine to generate a key schedule. The Key Expansion generates a total\n * of Nb*(Nr + 1) words: the algorithm requires an initial set of Nb words,\n * and each of the Nr rounds requires Nb words of key data. The resulting\n * key schedule consists of a linear array of 4-byte words, denoted [wi ],\n * with i in the range 0 <= i < Nb(Nr + 1).\n *\n * KeyExpansion(byte key[4*Nk], word w[Nb*(Nr+1)], Nk)\n * AES-128 (Nb=4, Nk=4, Nr=10)\n * AES-192 (Nb=4, Nk=6, Nr=12)\n * AES-256 (Nb=4, Nk=8, Nr=14)\n * Note: Nr=Nk+6.\n *\n * Nb is the number of columns (32-bit words) comprising the State (or\n * number of bytes in a block). For AES, Nb=4.\n *\n * @param key the key to schedule (as an array of 32-bit words).\n * @param decrypt true to modify the key schedule to decrypt, false not to.\n *\n * @return the generated key schedule.\n */\nfunction _expandKey(key, decrypt) {\n // copy the key's words to initialize the key schedule\n var w = key.slice(0);\n\n /* RotWord() will rotate a word, moving the first byte to the last\n byte's position (shifting the other bytes left).\n\n We will be getting the value of Rcon at i / Nk. 'i' will iterate\n from Nk to (Nb * Nr+1). Nk = 4 (4 byte key), Nb = 4 (4 words in\n a block), Nr = Nk + 6 (10). Therefore 'i' will iterate from\n 4 to 44 (exclusive). Each time we iterate 4 times, i / Nk will\n increase by 1. We use a counter iNk to keep track of this.\n */\n\n // go through the rounds expanding the key\n var temp, iNk = 1;\n var Nk = w.length;\n var Nr1 = Nk + 6 + 1;\n var end = Nb * Nr1;\n for(var i = Nk; i < end; ++i) {\n temp = w[i - 1];\n if(i % Nk === 0) {\n // temp = SubWord(RotWord(temp)) ^ Rcon[i / Nk]\n temp =\n sbox[temp >>> 16 & 255] << 24 ^\n sbox[temp >>> 8 & 255] << 16 ^\n sbox[temp & 255] << 8 ^\n sbox[temp >>> 24] ^ (rcon[iNk] << 24);\n iNk++;\n } else if(Nk > 6 && (i % Nk === 4)) {\n // temp = SubWord(temp)\n temp =\n sbox[temp >>> 24] << 24 ^\n sbox[temp >>> 16 & 255] << 16 ^\n sbox[temp >>> 8 & 255] << 8 ^\n sbox[temp & 255];\n }\n w[i] = w[i - Nk] ^ temp;\n }\n\n /* When we are updating a cipher block we always use the code path for\n encryption whether we are decrypting or not (to shorten code and\n simplify the generation of look up tables). However, because there\n are differences in the decryption algorithm, other than just swapping\n in different look up tables, we must transform our key schedule to\n account for these changes:\n\n 1. The decryption algorithm gets its key rounds in reverse order.\n 2. The decryption algorithm adds the round key before mixing columns\n instead of afterwards.\n\n We don't need to modify our key schedule to handle the first case,\n we can just traverse the key schedule in reverse order when decrypting.\n\n The second case requires a little work.\n\n The tables we built for performing rounds will take an input and then\n perform SubBytes() and MixColumns() or, for the decrypt version,\n InvSubBytes() and InvMixColumns(). But the decrypt algorithm requires\n us to AddRoundKey() before InvMixColumns(). This means we'll need to\n apply some transformations to the round key to inverse-mix its columns\n so they'll be correct for moving AddRoundKey() to after the state has\n had its columns inverse-mixed.\n\n To inverse-mix the columns of the state when we're decrypting we use a\n lookup table that will apply InvSubBytes() and InvMixColumns() at the\n same time. However, the round key's bytes are not inverse-substituted\n in the decryption algorithm. To get around this problem, we can first\n substitute the bytes in the round key so that when we apply the\n transformation via the InvSubBytes()+InvMixColumns() table, it will\n undo our substitution leaving us with the original value that we\n want -- and then inverse-mix that value.\n\n This change will correctly alter our key schedule so that we can XOR\n each round key with our already transformed decryption state. This\n allows us to use the same code path as the encryption algorithm.\n\n We make one more change to the decryption key. Since the decryption\n algorithm runs in reverse from the encryption algorithm, we reverse\n the order of the round keys to avoid having to iterate over the key\n schedule backwards when running the encryption algorithm later in\n decryption mode. In addition to reversing the order of the round keys,\n we also swap each round key's 2nd and 4th rows. See the comments\n section where rounds are performed for more details about why this is\n done. These changes are done inline with the other substitution\n described above.\n */\n if(decrypt) {\n var tmp;\n var m0 = imix[0];\n var m1 = imix[1];\n var m2 = imix[2];\n var m3 = imix[3];\n var wnew = w.slice(0);\n end = w.length;\n for(var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) {\n // do not sub the first or last round key (round keys are Nb\n // words) as no column mixing is performed before they are added,\n // but do change the key order\n if(i === 0 || i === (end - Nb)) {\n wnew[i] = w[wi];\n wnew[i + 1] = w[wi + 3];\n wnew[i + 2] = w[wi + 2];\n wnew[i + 3] = w[wi + 1];\n } else {\n // substitute each round key byte because the inverse-mix\n // table will inverse-substitute it (effectively cancel the\n // substitution because round key bytes aren't sub'd in\n // decryption mode) and swap indexes 3 and 1\n for(var n = 0; n < Nb; ++n) {\n tmp = w[wi + n];\n wnew[i + (3&-n)] =\n m0[sbox[tmp >>> 24]] ^\n m1[sbox[tmp >>> 16 & 255]] ^\n m2[sbox[tmp >>> 8 & 255]] ^\n m3[sbox[tmp & 255]];\n }\n }\n }\n w = wnew;\n }\n\n return w;\n}\n\n/**\n * Updates a single block (16 bytes) using AES. The update will either\n * encrypt or decrypt the block.\n *\n * @param w the key schedule.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(w, input, output, decrypt) {\n /*\n Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[0, Nb-1])\n for round = 1 step 1 to Nr-1\n SubBytes(state)\n ShiftRows(state)\n MixColumns(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n end for\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n out = state\n end\n\n InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])\n begin\n byte state[4,Nb]\n state = in\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n for round = Nr-1 step -1 downto 1\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])\n InvMixColumns(state)\n end for\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n out = state\n end\n */\n\n // Encrypt: AddRoundKey(state, w[0, Nb-1])\n // Decrypt: AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n var Nr = w.length / 4 - 1;\n var m0, m1, m2, m3, sub;\n if(decrypt) {\n m0 = imix[0];\n m1 = imix[1];\n m2 = imix[2];\n m3 = imix[3];\n sub = isbox;\n } else {\n m0 = mix[0];\n m1 = mix[1];\n m2 = mix[2];\n m3 = mix[3];\n sub = sbox;\n }\n var a, b, c, d, a2, b2, c2;\n a = input[0] ^ w[0];\n b = input[decrypt ? 3 : 1] ^ w[1];\n c = input[2] ^ w[2];\n d = input[decrypt ? 1 : 3] ^ w[3];\n var i = 3;\n\n /* In order to share code we follow the encryption algorithm when both\n encrypting and decrypting. To account for the changes required in the\n decryption algorithm, we use different lookup tables when decrypting\n and use a modified key schedule to account for the difference in the\n order of transformations applied when performing rounds. We also get\n key rounds in reverse order (relative to encryption). */\n for(var round = 1; round < Nr; ++round) {\n /* As described above, we'll be using table lookups to perform the\n column mixing. Each column is stored as a word in the state (the\n array 'input' has one column as a word at each index). In order to\n mix a column, we perform these transformations on each row in c,\n which is 1 byte in each word. The new column for c0 is c'0:\n\n m0 m1 m2 m3\n r0,c'0 = 2*r0,c0 + 3*r1,c0 + 1*r2,c0 + 1*r3,c0\n r1,c'0 = 1*r0,c0 + 2*r1,c0 + 3*r2,c0 + 1*r3,c0\n r2,c'0 = 1*r0,c0 + 1*r1,c0 + 2*r2,c0 + 3*r3,c0\n r3,c'0 = 3*r0,c0 + 1*r1,c0 + 1*r2,c0 + 2*r3,c0\n\n So using mix tables where c0 is a word with r0 being its upper\n 8 bits and r3 being its lower 8 bits:\n\n m0[c0 >> 24] will yield this word: [2*r0,1*r0,1*r0,3*r0]\n ...\n m3[c0 & 255] will yield this word: [1*r3,1*r3,3*r3,2*r3]\n\n Therefore to mix the columns in each word in the state we\n do the following (& 255 omitted for brevity):\n c'0,r0 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r1 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r2 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n c'0,r3 = m0[c0 >> 24] ^ m1[c1 >> 16] ^ m2[c2 >> 8] ^ m3[c3]\n\n However, before mixing, the algorithm requires us to perform\n ShiftRows(). The ShiftRows() transformation cyclically shifts the\n last 3 rows of the state over different offsets. The first row\n (r = 0) is not shifted.\n\n s'_r,c = s_r,(c + shift(r, Nb) mod Nb\n for 0 < r < 4 and 0 <= c < Nb and\n shift(1, 4) = 1\n shift(2, 4) = 2\n shift(3, 4) = 3.\n\n This causes the first byte in r = 1 to be moved to the end of\n the row, the first 2 bytes in r = 2 to be moved to the end of\n the row, the first 3 bytes in r = 3 to be moved to the end of\n the row:\n\n r1: [c0 c1 c2 c3] => [c1 c2 c3 c0]\n r2: [c0 c1 c2 c3] [c2 c3 c0 c1]\n r3: [c0 c1 c2 c3] [c3 c0 c1 c2]\n\n We can make these substitutions inline with our column mixing to\n generate an updated set of equations to produce each word in the\n state (note the columns have changed positions):\n\n c0 c1 c2 c3 => c0 c1 c2 c3\n c0 c1 c2 c3 c1 c2 c3 c0 (cycled 1 byte)\n c0 c1 c2 c3 c2 c3 c0 c1 (cycled 2 bytes)\n c0 c1 c2 c3 c3 c0 c1 c2 (cycled 3 bytes)\n\n Therefore:\n\n c'0 = 2*r0,c0 + 3*r1,c1 + 1*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 2*r1,c1 + 3*r2,c2 + 1*r3,c3\n c'0 = 1*r0,c0 + 1*r1,c1 + 2*r2,c2 + 3*r3,c3\n c'0 = 3*r0,c0 + 1*r1,c1 + 1*r2,c2 + 2*r3,c3\n\n c'1 = 2*r0,c1 + 3*r1,c2 + 1*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 2*r1,c2 + 3*r2,c3 + 1*r3,c0\n c'1 = 1*r0,c1 + 1*r1,c2 + 2*r2,c3 + 3*r3,c0\n c'1 = 3*r0,c1 + 1*r1,c2 + 1*r2,c3 + 2*r3,c0\n\n ... and so forth for c'2 and c'3. The important distinction is\n that the columns are cycling, with c0 being used with the m0\n map when calculating c0, but c1 being used with the m0 map when\n calculating c1 ... and so forth.\n\n When performing the inverse we transform the mirror image and\n skip the bottom row, instead of the top one, and move upwards:\n\n c3 c2 c1 c0 => c0 c3 c2 c1 (cycled 3 bytes) *same as encryption\n c3 c2 c1 c0 c1 c0 c3 c2 (cycled 2 bytes)\n c3 c2 c1 c0 c2 c1 c0 c3 (cycled 1 byte) *same as encryption\n c3 c2 c1 c0 c3 c2 c1 c0\n\n If you compare the resulting matrices for ShiftRows()+MixColumns()\n and for InvShiftRows()+InvMixColumns() the 2nd and 4th columns are\n different (in encrypt mode vs. decrypt mode). So in order to use\n the same code to handle both encryption and decryption, we will\n need to do some mapping.\n\n If in encryption mode we let a=c0, b=c1, c=c2, d=c3, and r be\n a row number in the state, then the resulting matrix in encryption\n mode for applying the above transformations would be:\n\n r1: a b c d\n r2: b c d a\n r3: c d a b\n r4: d a b c\n\n If we did the same in decryption mode we would get:\n\n r1: a d c b\n r2: b a d c\n r3: c b a d\n r4: d c b a\n\n If instead we swap d and b (set b=c3 and d=c1), then we get:\n\n r1: a b c d\n r2: d a b c\n r3: c d a b\n r4: b c d a\n\n Now the 1st and 3rd rows are the same as the encryption matrix. All\n we need to do then to make the mapping exactly the same is to swap\n the 2nd and 4th rows when in decryption mode. To do this without\n having to do it on each iteration, we swapped the 2nd and 4th rows\n in the decryption key schedule. We also have to do the swap above\n when we first pull in the input and when we set the final output. */\n a2 =\n m0[a >>> 24] ^\n m1[b >>> 16 & 255] ^\n m2[c >>> 8 & 255] ^\n m3[d & 255] ^ w[++i];\n b2 =\n m0[b >>> 24] ^\n m1[c >>> 16 & 255] ^\n m2[d >>> 8 & 255] ^\n m3[a & 255] ^ w[++i];\n c2 =\n m0[c >>> 24] ^\n m1[d >>> 16 & 255] ^\n m2[a >>> 8 & 255] ^\n m3[b & 255] ^ w[++i];\n d =\n m0[d >>> 24] ^\n m1[a >>> 16 & 255] ^\n m2[b >>> 8 & 255] ^\n m3[c & 255] ^ w[++i];\n a = a2;\n b = b2;\n c = c2;\n }\n\n /*\n Encrypt:\n SubBytes(state)\n ShiftRows(state)\n AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])\n\n Decrypt:\n InvShiftRows(state)\n InvSubBytes(state)\n AddRoundKey(state, w[0, Nb-1])\n */\n // Note: rows are shifted inline\n output[0] =\n (sub[a >>> 24] << 24) ^\n (sub[b >>> 16 & 255] << 16) ^\n (sub[c >>> 8 & 255] << 8) ^\n (sub[d & 255]) ^ w[++i];\n output[decrypt ? 3 : 1] =\n (sub[b >>> 24] << 24) ^\n (sub[c >>> 16 & 255] << 16) ^\n (sub[d >>> 8 & 255] << 8) ^\n (sub[a & 255]) ^ w[++i];\n output[2] =\n (sub[c >>> 24] << 24) ^\n (sub[d >>> 16 & 255] << 16) ^\n (sub[a >>> 8 & 255] << 8) ^\n (sub[b & 255]) ^ w[++i];\n output[decrypt ? 1 : 3] =\n (sub[d >>> 24] << 24) ^\n (sub[a >>> 16 & 255] << 16) ^\n (sub[b >>> 8 & 255] << 8) ^\n (sub[c & 255]) ^ w[++i];\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('AES-', key);\n * forge.cipher.createDecipher('AES-', key);\n *\n * Creates a deprecated AES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key and iv may be given as a string of bytes, an array of bytes, a\n * byte buffer, or an array of 32-bit words.\n *\n * @param options the options to use.\n * key the symmetric key to use.\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'AES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","/**\n * A Javascript implementation of AES Cipher Suites for TLS.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2015 Digital Bazaar, Inc.\n *\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./tls');\n\nvar tls = module.exports = forge.tls;\n\n/**\n * Supported cipher suites.\n */\ntls.CipherSuites['TLS_RSA_WITH_AES_128_CBC_SHA'] = {\n id: [0x00, 0x2f],\n name: 'TLS_RSA_WITH_AES_128_CBC_SHA',\n initSecurityParameters: function(sp) {\n sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;\n sp.cipher_type = tls.CipherType.block;\n sp.enc_key_length = 16;\n sp.block_length = 16;\n sp.fixed_iv_length = 16;\n sp.record_iv_length = 16;\n sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;\n sp.mac_length = 20;\n sp.mac_key_length = 20;\n },\n initConnectionState: initConnectionState\n};\ntls.CipherSuites['TLS_RSA_WITH_AES_256_CBC_SHA'] = {\n id: [0x00, 0x35],\n name: 'TLS_RSA_WITH_AES_256_CBC_SHA',\n initSecurityParameters: function(sp) {\n sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes;\n sp.cipher_type = tls.CipherType.block;\n sp.enc_key_length = 32;\n sp.block_length = 16;\n sp.fixed_iv_length = 16;\n sp.record_iv_length = 16;\n sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1;\n sp.mac_length = 20;\n sp.mac_key_length = 20;\n },\n initConnectionState: initConnectionState\n};\n\nfunction initConnectionState(state, c, sp) {\n var client = (c.entity === forge.tls.ConnectionEnd.client);\n\n // cipher setup\n state.read.cipherState = {\n init: false,\n cipher: forge.cipher.createDecipher('AES-CBC', client ?\n sp.keys.server_write_key : sp.keys.client_write_key),\n iv: client ? sp.keys.server_write_IV : sp.keys.client_write_IV\n };\n state.write.cipherState = {\n init: false,\n cipher: forge.cipher.createCipher('AES-CBC', client ?\n sp.keys.client_write_key : sp.keys.server_write_key),\n iv: client ? sp.keys.client_write_IV : sp.keys.server_write_IV\n };\n state.read.cipherFunction = decrypt_aes_cbc_sha1;\n state.write.cipherFunction = encrypt_aes_cbc_sha1;\n\n // MAC setup\n state.read.macLength = state.write.macLength = sp.mac_length;\n state.read.macFunction = state.write.macFunction = tls.hmac_sha1;\n}\n\n/**\n * Encrypts the TLSCompressed record into a TLSCipherText record using AES\n * in CBC mode.\n *\n * @param record the TLSCompressed record to encrypt.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nfunction encrypt_aes_cbc_sha1(record, s) {\n var rval = false;\n\n // append MAC to fragment, update sequence number\n var mac = s.macFunction(s.macKey, s.sequenceNumber, record);\n record.fragment.putBytes(mac);\n s.updateSequenceNumber();\n\n // TLS 1.1+ use an explicit IV every time to protect against CBC attacks\n var iv;\n if(record.version.minor === tls.Versions.TLS_1_0.minor) {\n // use the pre-generated IV when initializing for TLS 1.0, otherwise use\n // the residue from the previous encryption\n iv = s.cipherState.init ? null : s.cipherState.iv;\n } else {\n iv = forge.random.getBytesSync(16);\n }\n\n s.cipherState.init = true;\n\n // start cipher\n var cipher = s.cipherState.cipher;\n cipher.start({iv: iv});\n\n // TLS 1.1+ write IV into output\n if(record.version.minor >= tls.Versions.TLS_1_1.minor) {\n cipher.output.putBytes(iv);\n }\n\n // do encryption (default padding is appropriate)\n cipher.update(record.fragment);\n if(cipher.finish(encrypt_aes_cbc_sha1_padding)) {\n // set record fragment to encrypted output\n record.fragment = cipher.output;\n record.length = record.fragment.length();\n rval = true;\n }\n\n return rval;\n}\n\n/**\n * Handles padding for aes_cbc_sha1 in encrypt mode.\n *\n * @param blockSize the block size.\n * @param input the input buffer.\n * @param decrypt true in decrypt mode, false in encrypt mode.\n *\n * @return true on success, false on failure.\n */\nfunction encrypt_aes_cbc_sha1_padding(blockSize, input, decrypt) {\n /* The encrypted data length (TLSCiphertext.length) is one more than the sum\n of SecurityParameters.block_length, TLSCompressed.length,\n SecurityParameters.mac_length, and padding_length.\n\n The padding may be any length up to 255 bytes long, as long as it results in\n the TLSCiphertext.length being an integral multiple of the block length.\n Lengths longer than necessary might be desirable to frustrate attacks on a\n protocol based on analysis of the lengths of exchanged messages. Each uint8\n in the padding data vector must be filled with the padding length value.\n\n The padding length should be such that the total size of the\n GenericBlockCipher structure is a multiple of the cipher's block length.\n Legal values range from zero to 255, inclusive. This length specifies the\n length of the padding field exclusive of the padding_length field itself.\n\n This is slightly different from PKCS#7 because the padding value is 1\n less than the actual number of padding bytes if you include the\n padding_length uint8 itself as a padding byte. */\n if(!decrypt) {\n // get the number of padding bytes required to reach the blockSize and\n // subtract 1 for the padding value (to make room for the padding_length\n // uint8)\n var padding = blockSize - (input.length() % blockSize);\n input.fillWithByte(padding - 1, padding);\n }\n return true;\n}\n\n/**\n * Handles padding for aes_cbc_sha1 in decrypt mode.\n *\n * @param blockSize the block size.\n * @param output the output buffer.\n * @param decrypt true in decrypt mode, false in encrypt mode.\n *\n * @return true on success, false on failure.\n */\nfunction decrypt_aes_cbc_sha1_padding(blockSize, output, decrypt) {\n var rval = true;\n if(decrypt) {\n /* The last byte in the output specifies the number of padding bytes not\n including itself. Each of the padding bytes has the same value as that\n last byte (known as the padding_length). Here we check all padding\n bytes to ensure they have the value of padding_length even if one of\n them is bad in order to ward-off timing attacks. */\n var len = output.length();\n var paddingLength = output.last();\n for(var i = len - 1 - paddingLength; i < len - 1; ++i) {\n rval = rval && (output.at(i) == paddingLength);\n }\n if(rval) {\n // trim off padding bytes and last padding length byte\n output.truncate(paddingLength + 1);\n }\n }\n return rval;\n}\n\n/**\n * Decrypts a TLSCipherText record into a TLSCompressed record using\n * AES in CBC mode.\n *\n * @param record the TLSCipherText record to decrypt.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nfunction decrypt_aes_cbc_sha1(record, s) {\n var rval = false;\n\n var iv;\n if(record.version.minor === tls.Versions.TLS_1_0.minor) {\n // use pre-generated IV when initializing for TLS 1.0, otherwise use the\n // residue from the previous decryption\n iv = s.cipherState.init ? null : s.cipherState.iv;\n } else {\n // TLS 1.1+ use an explicit IV every time to protect against CBC attacks\n // that is appended to the record fragment\n iv = record.fragment.getBytes(16);\n }\n\n s.cipherState.init = true;\n\n // start cipher\n var cipher = s.cipherState.cipher;\n cipher.start({iv: iv});\n\n // do decryption\n cipher.update(record.fragment);\n rval = cipher.finish(decrypt_aes_cbc_sha1_padding);\n\n // even if decryption fails, keep going to minimize timing attacks\n\n // decrypted data:\n // first (len - 20) bytes = application data\n // last 20 bytes = MAC\n var macLen = s.macLength;\n\n // create a random MAC to check against should the mac length check fail\n // Note: do this regardless of the failure to keep timing consistent\n var mac = forge.random.getBytesSync(macLen);\n\n // get fragment and mac\n var len = cipher.output.length();\n if(len >= macLen) {\n record.fragment = cipher.output.getBytes(len - macLen);\n mac = cipher.output.getBytes(macLen);\n } else {\n // bad data, but get bytes anyway to try to keep timing consistent\n record.fragment = cipher.output.getBytes();\n }\n record.fragment = forge.util.createBuffer(record.fragment);\n record.length = record.fragment.length();\n\n // see if data integrity checks out, update sequence number\n var mac2 = s.macFunction(s.macKey, s.sequenceNumber, record);\n s.updateSequenceNumber();\n rval = compareMacs(s.macKey, mac, mac2) && rval;\n return rval;\n}\n\n/**\n * Safely compare two MACs. This function will compare two MACs in a way\n * that protects against timing attacks.\n *\n * TODO: Expose elsewhere as a utility API.\n *\n * See: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n *\n * @param key the MAC key to use.\n * @param mac1 as a binary-encoded string of bytes.\n * @param mac2 as a binary-encoded string of bytes.\n *\n * @return true if the MACs are the same, false if not.\n */\nfunction compareMacs(key, mac1, mac2) {\n var hmac = forge.hmac.create();\n\n hmac.start('SHA1', key);\n hmac.update(mac1);\n mac1 = hmac.digest().getBytes();\n\n hmac.start(null, null);\n hmac.update(mac2);\n mac2 = hmac.digest().getBytes();\n\n return mac1 === mac2;\n}\n","/**\n * Copyright (c) 2019 Digital Bazaar, Inc.\n */\n\nvar forge = require('./forge');\nrequire('./asn1');\nvar asn1 = forge.asn1;\n\nexports.privateKeyValidator = {\n // PrivateKeyInfo\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'PrivateKeyInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // privateKeyAlgorithm\n name: 'PrivateKeyInfo.privateKeyAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'privateKeyOid'\n }]\n }, {\n // PrivateKey\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'privateKey'\n }]\n};\n\nexports.publicKeyValidator = {\n name: 'SubjectPublicKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'subjectPublicKeyInfo',\n value: [{\n name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'publicKeyOid'\n }]\n },\n // capture group for ed25519PublicKey\n {\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n composed: true,\n captureBitStringValue: 'ed25519PublicKey'\n }\n // FIXME: this is capture group for rsaPublicKey, use it in this API or\n // discard?\n /* {\n // subjectPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n value: [{\n // RSAPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'rsaPublicKey'\n }]\n } */\n ]\n};\n","/**\n * Javascript implementation of Abstract Syntax Notation Number One.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n *\n * An API for storing data using the Abstract Syntax Notation Number One\n * format using DER (Distinguished Encoding Rules) encoding. This encoding is\n * commonly used to store data for PKI, i.e. X.509 Certificates, and this\n * implementation exists for that purpose.\n *\n * Abstract Syntax Notation Number One (ASN.1) is used to define the abstract\n * syntax of information without restricting the way the information is encoded\n * for transmission. It provides a standard that allows for open systems\n * communication. ASN.1 defines the syntax of information data and a number of\n * simple data types as well as a notation for describing them and specifying\n * values for them.\n *\n * The RSA algorithm creates public and private keys that are often stored in\n * X.509 or PKCS#X formats -- which use ASN.1 (encoded in DER format). This\n * class provides the most basic functionality required to store and load DSA\n * keys that are encoded according to ASN.1.\n *\n * The most common binary encodings for ASN.1 are BER (Basic Encoding Rules)\n * and DER (Distinguished Encoding Rules). DER is just a subset of BER that\n * has stricter requirements for how data must be encoded.\n *\n * Each ASN.1 structure has a tag (a byte identifying the ASN.1 structure type)\n * and a byte array for the value of this ASN1 structure which may be data or a\n * list of ASN.1 structures.\n *\n * Each ASN.1 structure using BER is (Tag-Length-Value):\n *\n * | byte 0 | bytes X | bytes Y |\n * |--------|---------|----------\n * | tag | length | value |\n *\n * ASN.1 allows for tags to be of \"High-tag-number form\" which allows a tag to\n * be two or more octets, but that is not supported by this class. A tag is\n * only 1 byte. Bits 1-5 give the tag number (ie the data type within a\n * particular 'class'), 6 indicates whether or not the ASN.1 value is\n * constructed from other ASN.1 values, and bits 7 and 8 give the 'class'. If\n * bits 7 and 8 are both zero, the class is UNIVERSAL. If only bit 7 is set,\n * then the class is APPLICATION. If only bit 8 is set, then the class is\n * CONTEXT_SPECIFIC. If both bits 7 and 8 are set, then the class is PRIVATE.\n * The tag numbers for the data types for the class UNIVERSAL are listed below:\n *\n * UNIVERSAL 0 Reserved for use by the encoding rules\n * UNIVERSAL 1 Boolean type\n * UNIVERSAL 2 Integer type\n * UNIVERSAL 3 Bitstring type\n * UNIVERSAL 4 Octetstring type\n * UNIVERSAL 5 Null type\n * UNIVERSAL 6 Object identifier type\n * UNIVERSAL 7 Object descriptor type\n * UNIVERSAL 8 External type and Instance-of type\n * UNIVERSAL 9 Real type\n * UNIVERSAL 10 Enumerated type\n * UNIVERSAL 11 Embedded-pdv type\n * UNIVERSAL 12 UTF8String type\n * UNIVERSAL 13 Relative object identifier type\n * UNIVERSAL 14-15 Reserved for future editions\n * UNIVERSAL 16 Sequence and Sequence-of types\n * UNIVERSAL 17 Set and Set-of types\n * UNIVERSAL 18-22, 25-30 Character string types\n * UNIVERSAL 23-24 Time types\n *\n * The length of an ASN.1 structure is specified after the tag identifier.\n * There is a definite form and an indefinite form. The indefinite form may\n * be used if the encoding is constructed and not all immediately available.\n * The indefinite form is encoded using a length byte with only the 8th bit\n * set. The end of the constructed object is marked using end-of-contents\n * octets (two zero bytes).\n *\n * The definite form looks like this:\n *\n * The length may take up 1 or more bytes, it depends on the length of the\n * value of the ASN.1 structure. DER encoding requires that if the ASN.1\n * structure has a value that has a length greater than 127, more than 1 byte\n * will be used to store its length, otherwise just one byte will be used.\n * This is strict.\n *\n * In the case that the length of the ASN.1 value is less than 127, 1 octet\n * (byte) is used to store the \"short form\" length. The 8th bit has a value of\n * 0 indicating the length is \"short form\" and not \"long form\" and bits 7-1\n * give the length of the data. (The 8th bit is the left-most, most significant\n * bit: also known as big endian or network format).\n *\n * In the case that the length of the ASN.1 value is greater than 127, 2 to\n * 127 octets (bytes) are used to store the \"long form\" length. The first\n * byte's 8th bit is set to 1 to indicate the length is \"long form.\" Bits 7-1\n * give the number of additional octets. All following octets are in base 256\n * with the most significant digit first (typical big-endian binary unsigned\n * integer storage). So, for instance, if the length of a value was 257, the\n * first byte would be set to:\n *\n * 10000010 = 130 = 0x82.\n *\n * This indicates there are 2 octets (base 256) for the length. The second and\n * third bytes (the octets just mentioned) would store the length in base 256:\n *\n * octet 2: 00000001 = 1 * 256^1 = 256\n * octet 3: 00000001 = 1 * 256^0 = 1\n * total = 257\n *\n * The algorithm for converting a js integer value of 257 to base-256 is:\n *\n * var value = 257;\n * var bytes = [];\n * bytes[0] = (value >>> 8) & 0xFF; // most significant byte first\n * bytes[1] = value & 0xFF; // least significant byte last\n *\n * On the ASN.1 UNIVERSAL Object Identifier (OID) type:\n *\n * An OID can be written like: \"value1.value2.value3...valueN\"\n *\n * The DER encoding rules:\n *\n * The first byte has the value 40 * value1 + value2.\n * The following bytes, if any, encode the remaining values. Each value is\n * encoded in base 128, most significant digit first (big endian), with as\n * few digits as possible, and the most significant bit of each byte set\n * to 1 except the last in each value's encoding. For example: Given the\n * OID \"1.2.840.113549\", its DER encoding is (remember each byte except the\n * last one in each encoding is OR'd with 0x80):\n *\n * byte 1: 40 * 1 + 2 = 42 = 0x2A.\n * bytes 2-3: 128 * 6 + 72 = 840 = 6 72 = 6 72 = 0x0648 = 0x8648\n * bytes 4-6: 16384 * 6 + 128 * 119 + 13 = 6 119 13 = 0x06770D = 0x86F70D\n *\n * The final value is: 0x2A864886F70D.\n * The full OID (including ASN.1 tag and length of 6 bytes) is:\n * 0x06062A864886F70D\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./oids');\n\n/* ASN.1 API */\nvar asn1 = module.exports = forge.asn1 = forge.asn1 || {};\n\n/**\n * ASN.1 classes.\n */\nasn1.Class = {\n UNIVERSAL: 0x00,\n APPLICATION: 0x40,\n CONTEXT_SPECIFIC: 0x80,\n PRIVATE: 0xC0\n};\n\n/**\n * ASN.1 types. Not all types are supported by this implementation, only\n * those necessary to implement a simple PKI are implemented.\n */\nasn1.Type = {\n NONE: 0,\n BOOLEAN: 1,\n INTEGER: 2,\n BITSTRING: 3,\n OCTETSTRING: 4,\n NULL: 5,\n OID: 6,\n ODESC: 7,\n EXTERNAL: 8,\n REAL: 9,\n ENUMERATED: 10,\n EMBEDDED: 11,\n UTF8: 12,\n ROID: 13,\n SEQUENCE: 16,\n SET: 17,\n PRINTABLESTRING: 19,\n IA5STRING: 22,\n UTCTIME: 23,\n GENERALIZEDTIME: 24,\n BMPSTRING: 30\n};\n\n/**\n * Creates a new asn1 object.\n *\n * @param tagClass the tag class for the object.\n * @param type the data type (tag number) for the object.\n * @param constructed true if the asn1 object is in constructed form.\n * @param value the value for the object, if it is not constructed.\n * @param [options] the options to use:\n * [bitStringContents] the plain BIT STRING content including padding\n * byte.\n *\n * @return the asn1 object.\n */\nasn1.create = function(tagClass, type, constructed, value, options) {\n /* An asn1 object has a tagClass, a type, a constructed flag, and a\n value. The value's type depends on the constructed flag. If\n constructed, it will contain a list of other asn1 objects. If not,\n it will contain the ASN.1 value as an array of bytes formatted\n according to the ASN.1 data type. */\n\n // remove undefined values\n if(forge.util.isArray(value)) {\n var tmp = [];\n for(var i = 0; i < value.length; ++i) {\n if(value[i] !== undefined) {\n tmp.push(value[i]);\n }\n }\n value = tmp;\n }\n\n var obj = {\n tagClass: tagClass,\n type: type,\n constructed: constructed,\n composed: constructed || forge.util.isArray(value),\n value: value\n };\n if(options && 'bitStringContents' in options) {\n // TODO: copy byte buffer if it's a buffer not a string\n obj.bitStringContents = options.bitStringContents;\n // TODO: add readonly flag to avoid this overhead\n // save copy to detect changes\n obj.original = asn1.copy(obj);\n }\n return obj;\n};\n\n/**\n * Copies an asn1 object.\n *\n * @param obj the asn1 object.\n * @param [options] copy options:\n * [excludeBitStringContents] true to not copy bitStringContents\n *\n * @return the a copy of the asn1 object.\n */\nasn1.copy = function(obj, options) {\n var copy;\n\n if(forge.util.isArray(obj)) {\n copy = [];\n for(var i = 0; i < obj.length; ++i) {\n copy.push(asn1.copy(obj[i], options));\n }\n return copy;\n }\n\n if(typeof obj === 'string') {\n // TODO: copy byte buffer if it's a buffer not a string\n return obj;\n }\n\n copy = {\n tagClass: obj.tagClass,\n type: obj.type,\n constructed: obj.constructed,\n composed: obj.composed,\n value: asn1.copy(obj.value, options)\n };\n if(options && !options.excludeBitStringContents) {\n // TODO: copy byte buffer if it's a buffer not a string\n copy.bitStringContents = obj.bitStringContents;\n }\n return copy;\n};\n\n/**\n * Compares asn1 objects for equality.\n *\n * Note this function does not run in constant time.\n *\n * @param obj1 the first asn1 object.\n * @param obj2 the second asn1 object.\n * @param [options] compare options:\n * [includeBitStringContents] true to compare bitStringContents\n *\n * @return true if the asn1 objects are equal.\n */\nasn1.equals = function(obj1, obj2, options) {\n if(forge.util.isArray(obj1)) {\n if(!forge.util.isArray(obj2)) {\n return false;\n }\n if(obj1.length !== obj2.length) {\n return false;\n }\n for(var i = 0; i < obj1.length; ++i) {\n if(!asn1.equals(obj1[i], obj2[i])) {\n return false;\n }\n }\n return true;\n }\n\n if(typeof obj1 !== typeof obj2) {\n return false;\n }\n\n if(typeof obj1 === 'string') {\n return obj1 === obj2;\n }\n\n var equal = obj1.tagClass === obj2.tagClass &&\n obj1.type === obj2.type &&\n obj1.constructed === obj2.constructed &&\n obj1.composed === obj2.composed &&\n asn1.equals(obj1.value, obj2.value);\n if(options && options.includeBitStringContents) {\n equal = equal && (obj1.bitStringContents === obj2.bitStringContents);\n }\n\n return equal;\n};\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param b the BER-encoded ASN.1 byte buffer, starting with the first\n * length byte.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nasn1.getBerValueLength = function(b) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n var b2 = b.getByte();\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n length = b.getInt((b2 & 0x7F) << 3);\n }\n return length;\n};\n\n/**\n * Check if the byte buffer has enough bytes. Throws an Error if not.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n * @param n the number of bytes the buffer must have.\n */\nfunction _checkBufferLength(bytes, remaining, n) {\n if(n > remaining) {\n var error = new Error('Too few bytes to parse DER.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = n;\n throw error;\n }\n}\n\n/**\n * Gets the length of a BER-encoded ASN.1 value.\n *\n * In case the length is not specified, undefined is returned.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the bytes remaining in the current parsing state.\n *\n * @return the length of the BER-encoded ASN.1 value or undefined.\n */\nvar _getValueLength = function(bytes, remaining) {\n // TODO: move this function and related DER/BER functions to a der.js\n // file; better abstract ASN.1 away from der/ber.\n // fromDer already checked that this byte exists\n var b2 = bytes.getByte();\n remaining--;\n if(b2 === 0x80) {\n return undefined;\n }\n\n // see if the length is \"short form\" or \"long form\" (bit 8 set)\n var length;\n var longForm = b2 & 0x80;\n if(!longForm) {\n // length is just the first byte\n length = b2;\n } else {\n // the number of bytes the length is specified in bits 7 through 1\n // and each length byte is in big-endian base-256\n var longFormBytes = b2 & 0x7F;\n _checkBufferLength(bytes, remaining, longFormBytes);\n length = bytes.getInt(longFormBytes << 3);\n }\n // FIXME: this will only happen for 32 bit getInt with high bit set\n if(length < 0) {\n throw new Error('Negative length: ' + length);\n }\n return length;\n};\n\n/**\n * Parses an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * @param [options] object with options or boolean strict flag\n * [strict] true to be strict when checking value lengths, false to\n * allow truncated values (default: true).\n * [parseAllBytes] true to ensure all bytes are parsed\n * (default: true)\n * [decodeBitStrings] true to attempt to decode the content of\n * BIT STRINGs (not OCTET STRINGs) using strict mode. Note that\n * without schema support to understand the data context this can\n * erroneously decode values that happen to be valid ASN.1. This\n * flag will be deprecated or removed as soon as schema support is\n * available. (default: true)\n *\n * @throws Will throw an error for various malformed input conditions.\n *\n * @return the parsed asn1 object.\n */\nasn1.fromDer = function(bytes, options) {\n if(options === undefined) {\n options = {\n strict: true,\n parseAllBytes: true,\n decodeBitStrings: true\n };\n }\n if(typeof options === 'boolean') {\n options = {\n strict: options,\n parseAllBytes: true,\n decodeBitStrings: true\n };\n }\n if(!('strict' in options)) {\n options.strict = true;\n }\n if(!('parseAllBytes' in options)) {\n options.parseAllBytes = true;\n }\n if(!('decodeBitStrings' in options)) {\n options.decodeBitStrings = true;\n }\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n var byteCount = bytes.length();\n var value = _fromDer(bytes, bytes.length(), 0, options);\n if(options.parseAllBytes && bytes.length() !== 0) {\n var error = new Error('Unparsed DER bytes remain after ASN.1 parsing.');\n error.byteCount = byteCount;\n error.remaining = bytes.length();\n throw error;\n }\n return value;\n};\n\n/**\n * Internal function to parse an asn1 object from a byte buffer in DER format.\n *\n * @param bytes the byte buffer to parse from.\n * @param remaining the number of bytes remaining for this chunk.\n * @param depth the current parsing depth.\n * @param options object with same options as fromDer().\n *\n * @return the parsed asn1 object.\n */\nfunction _fromDer(bytes, remaining, depth, options) {\n // temporary storage for consumption calculations\n var start;\n\n // minimum length for ASN.1 DER structure is 2\n _checkBufferLength(bytes, remaining, 2);\n\n // get the first byte\n var b1 = bytes.getByte();\n // consumed one byte\n remaining--;\n\n // get the tag class\n var tagClass = (b1 & 0xC0);\n\n // get the type (bits 1-5)\n var type = b1 & 0x1F;\n\n // get the variable value length and adjust remaining bytes\n start = bytes.length();\n var length = _getValueLength(bytes, remaining);\n remaining -= start - bytes.length();\n\n // ensure there are enough bytes to get the value\n if(length !== undefined && length > remaining) {\n if(options.strict) {\n var error = new Error('Too few bytes to read ASN.1 value.');\n error.available = bytes.length();\n error.remaining = remaining;\n error.requested = length;\n throw error;\n }\n // Note: be lenient with truncated values and use remaining state bytes\n length = remaining;\n }\n\n // value storage\n var value;\n // possible BIT STRING contents storage\n var bitStringContents;\n\n // constructed flag is bit 6 (32 = 0x20) of the first byte\n var constructed = ((b1 & 0x20) === 0x20);\n if(constructed) {\n // parse child asn1 objects from the value\n value = [];\n if(length === undefined) {\n // asn1 object of indefinite length, read until end tag\n for(;;) {\n _checkBufferLength(bytes, remaining, 2);\n if(bytes.bytes(2) === String.fromCharCode(0, 0)) {\n bytes.getBytes(2);\n remaining -= 2;\n break;\n }\n start = bytes.length();\n value.push(_fromDer(bytes, remaining, depth + 1, options));\n remaining -= start - bytes.length();\n }\n } else {\n // parsing asn1 object of definite length\n while(length > 0) {\n start = bytes.length();\n value.push(_fromDer(bytes, length, depth + 1, options));\n remaining -= start - bytes.length();\n length -= start - bytes.length();\n }\n }\n }\n\n // if a BIT STRING, save the contents including padding\n if(value === undefined && tagClass === asn1.Class.UNIVERSAL &&\n type === asn1.Type.BITSTRING) {\n bitStringContents = bytes.bytes(length);\n }\n\n // determine if a non-constructed value should be decoded as a composed\n // value that contains other ASN.1 objects. BIT STRINGs (and OCTET STRINGs)\n // can be used this way.\n if(value === undefined && options.decodeBitStrings &&\n tagClass === asn1.Class.UNIVERSAL &&\n // FIXME: OCTET STRINGs not yet supported here\n // .. other parts of forge expect to decode OCTET STRINGs manually\n (type === asn1.Type.BITSTRING /*|| type === asn1.Type.OCTETSTRING*/) &&\n length > 1) {\n // save read position\n var savedRead = bytes.read;\n var savedRemaining = remaining;\n var unused = 0;\n if(type === asn1.Type.BITSTRING) {\n /* The first octet gives the number of bits by which the length of the\n bit string is less than the next multiple of eight (this is called\n the \"number of unused bits\").\n\n The second and following octets give the value of the bit string\n converted to an octet string. */\n _checkBufferLength(bytes, remaining, 1);\n unused = bytes.getByte();\n remaining--;\n }\n // if all bits are used, maybe the BIT/OCTET STRING holds ASN.1 objs\n if(unused === 0) {\n try {\n // attempt to parse child asn1 object from the value\n // (stored in array to signal composed value)\n start = bytes.length();\n var subOptions = {\n // enforce strict mode to avoid parsing ASN.1 from plain data\n strict: true,\n decodeBitStrings: true\n };\n var composed = _fromDer(bytes, remaining, depth + 1, subOptions);\n var used = start - bytes.length();\n remaining -= used;\n if(type == asn1.Type.BITSTRING) {\n used++;\n }\n\n // if the data all decoded and the class indicates UNIVERSAL or\n // CONTEXT_SPECIFIC then assume we've got an encapsulated ASN.1 object\n var tc = composed.tagClass;\n if(used === length &&\n (tc === asn1.Class.UNIVERSAL || tc === asn1.Class.CONTEXT_SPECIFIC)) {\n value = [composed];\n }\n } catch(ex) {\n }\n }\n if(value === undefined) {\n // restore read position\n bytes.read = savedRead;\n remaining = savedRemaining;\n }\n }\n\n if(value === undefined) {\n // asn1 not constructed or composed, get raw value\n // TODO: do DER to OID conversion and vice-versa in .toDer?\n\n if(length === undefined) {\n if(options.strict) {\n throw new Error('Non-constructed ASN.1 object of indefinite length.');\n }\n // be lenient and use remaining state bytes\n length = remaining;\n }\n\n if(type === asn1.Type.BMPSTRING) {\n value = '';\n for(; length > 0; length -= 2) {\n _checkBufferLength(bytes, remaining, 2);\n value += String.fromCharCode(bytes.getInt16());\n remaining -= 2;\n }\n } else {\n value = bytes.getBytes(length);\n remaining -= length;\n }\n }\n\n // add BIT STRING contents if available\n var asn1Options = bitStringContents === undefined ? null : {\n bitStringContents: bitStringContents\n };\n\n // create and return asn1 object\n return asn1.create(tagClass, type, constructed, value, asn1Options);\n}\n\n/**\n * Converts the given asn1 object to a buffer of bytes in DER format.\n *\n * @param asn1 the asn1 object to convert to bytes.\n *\n * @return the buffer of bytes.\n */\nasn1.toDer = function(obj) {\n var bytes = forge.util.createBuffer();\n\n // build the first byte\n var b1 = obj.tagClass | obj.type;\n\n // for storing the ASN.1 value\n var value = forge.util.createBuffer();\n\n // use BIT STRING contents if available and data not changed\n var useBitStringContents = false;\n if('bitStringContents' in obj) {\n useBitStringContents = true;\n if(obj.original) {\n useBitStringContents = asn1.equals(obj, obj.original);\n }\n }\n\n if(useBitStringContents) {\n value.putBytes(obj.bitStringContents);\n } else if(obj.composed) {\n // if composed, use each child asn1 object's DER bytes as value\n // turn on 6th bit (0x20 = 32) to indicate asn1 is constructed\n // from other asn1 objects\n if(obj.constructed) {\n b1 |= 0x20;\n } else {\n // type is a bit string, add unused bits of 0x00\n value.putByte(0x00);\n }\n\n // add all of the child DER bytes together\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n value.putBuffer(asn1.toDer(obj.value[i]));\n }\n }\n } else {\n // use asn1.value directly\n if(obj.type === asn1.Type.BMPSTRING) {\n for(var i = 0; i < obj.value.length; ++i) {\n value.putInt16(obj.value.charCodeAt(i));\n }\n } else {\n // ensure integer is minimally-encoded\n // TODO: should all leading bytes be stripped vs just one?\n // .. ex '00 00 01' => '01'?\n if(obj.type === asn1.Type.INTEGER &&\n obj.value.length > 1 &&\n // leading 0x00 for positive integer\n ((obj.value.charCodeAt(0) === 0 &&\n (obj.value.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (obj.value.charCodeAt(0) === 0xFF &&\n (obj.value.charCodeAt(1) & 0x80) === 0x80))) {\n value.putBytes(obj.value.substr(1));\n } else {\n value.putBytes(obj.value);\n }\n }\n }\n\n // add tag byte\n bytes.putByte(b1);\n\n // use \"short form\" encoding\n if(value.length() <= 127) {\n // one byte describes the length\n // bit 8 = 0 and bits 7-1 = length\n bytes.putByte(value.length() & 0x7F);\n } else {\n // use \"long form\" encoding\n // 2 to 127 bytes describe the length\n // first byte: bit 8 = 1 and bits 7-1 = # of additional bytes\n // other bytes: length in base 256, big-endian\n var len = value.length();\n var lenBytes = '';\n do {\n lenBytes += String.fromCharCode(len & 0xFF);\n len = len >>> 8;\n } while(len > 0);\n\n // set first byte to # bytes used to store the length and turn on\n // bit 8 to indicate long-form length is used\n bytes.putByte(lenBytes.length | 0x80);\n\n // concatenate length bytes in reverse since they were generated\n // little endian and we need big endian\n for(var i = lenBytes.length - 1; i >= 0; --i) {\n bytes.putByte(lenBytes.charCodeAt(i));\n }\n }\n\n // concatenate value bytes\n bytes.putBuffer(value);\n return bytes;\n};\n\n/**\n * Converts an OID dot-separated string to a byte buffer. The byte buffer\n * contains only the DER-encoded value, not any tag or length bytes.\n *\n * @param oid the OID dot-separated string.\n *\n * @return the byte buffer.\n */\nasn1.oidToDer = function(oid) {\n // split OID into individual values\n var values = oid.split('.');\n var bytes = forge.util.createBuffer();\n\n // first byte is 40 * value1 + value2\n bytes.putByte(40 * parseInt(values[0], 10) + parseInt(values[1], 10));\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var last, valueBytes, value, b;\n for(var i = 2; i < values.length; ++i) {\n // produce value bytes in reverse because we don't know how many\n // bytes it will take to store the value\n last = true;\n valueBytes = [];\n value = parseInt(values[i], 10);\n do {\n b = value & 0x7F;\n value = value >>> 7;\n // if value is not last, then turn on 8th bit\n if(!last) {\n b |= 0x80;\n }\n valueBytes.push(b);\n last = false;\n } while(value > 0);\n\n // add value bytes in reverse (needs to be in big endian)\n for(var n = valueBytes.length - 1; n >= 0; --n) {\n bytes.putByte(valueBytes[n]);\n }\n }\n\n return bytes;\n};\n\n/**\n * Converts a DER-encoded byte buffer to an OID dot-separated string. The\n * byte buffer should contain only the DER-encoded value, not any tag or\n * length bytes.\n *\n * @param bytes the byte buffer.\n *\n * @return the OID dot-separated string.\n */\nasn1.derToOid = function(bytes) {\n var oid;\n\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n // first byte is 40 * value1 + value2\n var b = bytes.getByte();\n oid = Math.floor(b / 40) + '.' + (b % 40);\n\n // other bytes are each value in base 128 with 8th bit set except for\n // the last byte for each value\n var value = 0;\n while(bytes.length() > 0) {\n b = bytes.getByte();\n value = value << 7;\n // not the last byte for the value\n if(b & 0x80) {\n value += b & 0x7F;\n } else {\n // last byte\n oid += '.' + (value + b);\n value = 0;\n }\n }\n\n return oid;\n};\n\n/**\n * Converts a UTCTime value to a date.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Parsing that structure hasn't been implemented yet.\n *\n * @param utc the UTCTime value to convert.\n *\n * @return the date.\n */\nasn1.utcTimeToDate = function(utc) {\n /* The following formats can be used:\n\n YYMMDDhhmmZ\n YYMMDDhhmm+hh'mm'\n YYMMDDhhmm-hh'mm'\n YYMMDDhhmmssZ\n YYMMDDhhmmss+hh'mm'\n YYMMDDhhmmss-hh'mm'\n\n Where:\n\n YY is the least significant two digits of the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n // if YY >= 50 use 19xx, if YY < 50 use 20xx\n var year = parseInt(utc.substr(0, 2), 10);\n year = (year >= 50) ? 1900 + year : 2000 + year;\n var MM = parseInt(utc.substr(2, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(utc.substr(4, 2), 10);\n var hh = parseInt(utc.substr(6, 2), 10);\n var mm = parseInt(utc.substr(8, 2), 10);\n var ss = 0;\n\n // not just YYMMDDhhmmZ\n if(utc.length > 11) {\n // get character after minutes\n var c = utc.charAt(10);\n var end = 10;\n\n // see if seconds are present\n if(c !== '+' && c !== '-') {\n // get seconds\n ss = parseInt(utc.substr(10, 2), 10);\n end += 2;\n }\n }\n\n // update date\n date.setUTCFullYear(year, MM, DD);\n date.setUTCHours(hh, mm, ss, 0);\n\n if(end) {\n // get +/- after end of time\n c = utc.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(utc.substr(end + 1, 2), 10);\n var mmoffset = parseInt(utc.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n var offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n date.setTime(+date - offset);\n } else {\n date.setTime(+date + offset);\n }\n }\n }\n\n return date;\n};\n\n/**\n * Converts a GeneralizedTime value to a date.\n *\n * @param gentime the GeneralizedTime value to convert.\n *\n * @return the date.\n */\nasn1.generalizedTimeToDate = function(gentime) {\n /* The following formats can be used:\n\n YYYYMMDDHHMMSS\n YYYYMMDDHHMMSS.fff\n YYYYMMDDHHMMSSZ\n YYYYMMDDHHMMSS.fffZ\n YYYYMMDDHHMMSS+hh'mm'\n YYYYMMDDHHMMSS.fff+hh'mm'\n YYYYMMDDHHMMSS-hh'mm'\n YYYYMMDDHHMMSS.fff-hh'mm'\n\n Where:\n\n YYYY is the year\n MM is the month (01 to 12)\n DD is the day (01 to 31)\n hh is the hour (00 to 23)\n mm are the minutes (00 to 59)\n ss are the seconds (00 to 59)\n .fff is the second fraction, accurate to three decimal places\n Z indicates that local time is GMT, + indicates that local time is\n later than GMT, and - indicates that local time is earlier than GMT\n hh' is the absolute value of the offset from GMT in hours\n mm' is the absolute value of the offset from GMT in minutes */\n var date = new Date();\n\n var YYYY = parseInt(gentime.substr(0, 4), 10);\n var MM = parseInt(gentime.substr(4, 2), 10) - 1; // use 0-11 for month\n var DD = parseInt(gentime.substr(6, 2), 10);\n var hh = parseInt(gentime.substr(8, 2), 10);\n var mm = parseInt(gentime.substr(10, 2), 10);\n var ss = parseInt(gentime.substr(12, 2), 10);\n var fff = 0;\n var offset = 0;\n var isUTC = false;\n\n if(gentime.charAt(gentime.length - 1) === 'Z') {\n isUTC = true;\n }\n\n var end = gentime.length - 5, c = gentime.charAt(end);\n if(c === '+' || c === '-') {\n // get hours+minutes offset\n var hhoffset = parseInt(gentime.substr(end + 1, 2), 10);\n var mmoffset = parseInt(gentime.substr(end + 4, 2), 10);\n\n // calculate offset in milliseconds\n offset = hhoffset * 60 + mmoffset;\n offset *= 60000;\n\n // apply offset\n if(c === '+') {\n offset *= -1;\n }\n\n isUTC = true;\n }\n\n // check for second fraction\n if(gentime.charAt(14) === '.') {\n fff = parseFloat(gentime.substr(14), 10) * 1000;\n }\n\n if(isUTC) {\n date.setUTCFullYear(YYYY, MM, DD);\n date.setUTCHours(hh, mm, ss, fff);\n\n // apply offset\n date.setTime(+date + offset);\n } else {\n date.setFullYear(YYYY, MM, DD);\n date.setHours(hh, mm, ss, fff);\n }\n\n return date;\n};\n\n/**\n * Converts a date to a UTCTime value.\n *\n * Note: GeneralizedTime has 4 digits for the year and is used for X.509\n * dates past 2049. Converting to a GeneralizedTime hasn't been\n * implemented yet.\n *\n * @param date the date to convert.\n *\n * @return the UTCTime value.\n */\nasn1.dateToUtcTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYMMDDhhmmssZ\n var format = [];\n format.push(('' + date.getUTCFullYear()).substr(2));\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a date to a GeneralizedTime value.\n *\n * @param date the date to convert.\n *\n * @return the GeneralizedTime value as a string.\n */\nasn1.dateToGeneralizedTime = function(date) {\n // TODO: validate; currently assumes proper format\n if(typeof date === 'string') {\n return date;\n }\n\n var rval = '';\n\n // create format YYYYMMDDHHMMSSZ\n var format = [];\n format.push('' + date.getUTCFullYear());\n format.push('' + (date.getUTCMonth() + 1));\n format.push('' + date.getUTCDate());\n format.push('' + date.getUTCHours());\n format.push('' + date.getUTCMinutes());\n format.push('' + date.getUTCSeconds());\n\n // ensure 2 digits are used for each format entry\n for(var i = 0; i < format.length; ++i) {\n if(format[i].length < 2) {\n rval += '0';\n }\n rval += format[i];\n }\n rval += 'Z';\n\n return rval;\n};\n\n/**\n * Converts a javascript integer to a DER-encoded byte buffer to be used\n * as the value for an INTEGER type.\n *\n * @param x the integer.\n *\n * @return the byte buffer.\n */\nasn1.integerToDer = function(x) {\n var rval = forge.util.createBuffer();\n if(x >= -0x80 && x < 0x80) {\n return rval.putSignedInt(x, 8);\n }\n if(x >= -0x8000 && x < 0x8000) {\n return rval.putSignedInt(x, 16);\n }\n if(x >= -0x800000 && x < 0x800000) {\n return rval.putSignedInt(x, 24);\n }\n if(x >= -0x80000000 && x < 0x80000000) {\n return rval.putSignedInt(x, 32);\n }\n var error = new Error('Integer too large; max is 32-bits.');\n error.integer = x;\n throw error;\n};\n\n/**\n * Converts a DER-encoded byte buffer to a javascript integer. This is\n * typically used to decode the value of an INTEGER type.\n *\n * @param bytes the byte buffer.\n *\n * @return the integer.\n */\nasn1.derToInteger = function(bytes) {\n // wrap in buffer if needed\n if(typeof bytes === 'string') {\n bytes = forge.util.createBuffer(bytes);\n }\n\n var n = bytes.length() * 8;\n if(n > 32) {\n throw new Error('Integer too large; max is 32-bits.');\n }\n return bytes.getSignedInt(n);\n};\n\n/**\n * Validates that the given ASN.1 object is at least a super set of the\n * given ASN.1 structure. Only tag classes and types are checked. An\n * optional map may also be provided to capture ASN.1 values while the\n * structure is checked.\n *\n * To capture an ASN.1 value, set an object in the validator's 'capture'\n * parameter to the key to use in the capture map. To capture the full\n * ASN.1 object, specify 'captureAsn1'. To capture BIT STRING bytes, including\n * the leading unused bits counter byte, specify 'captureBitStringContents'.\n * To capture BIT STRING bytes, without the leading unused bits counter byte,\n * specify 'captureBitStringValue'.\n *\n * Objects in the validator may set a field 'optional' to true to indicate\n * that it isn't necessary to pass validation.\n *\n * @param obj the ASN.1 object to validate.\n * @param v the ASN.1 structure validator.\n * @param capture an optional map to capture values in.\n * @param errors an optional array for storing validation errors.\n *\n * @return true on success, false on failure.\n */\nasn1.validate = function(obj, v, capture, errors) {\n var rval = false;\n\n // ensure tag class and type are the same if specified\n if((obj.tagClass === v.tagClass || typeof(v.tagClass) === 'undefined') &&\n (obj.type === v.type || typeof(v.type) === 'undefined')) {\n // ensure constructed flag is the same if specified\n if(obj.constructed === v.constructed ||\n typeof(v.constructed) === 'undefined') {\n rval = true;\n\n // handle sub values\n if(v.value && forge.util.isArray(v.value)) {\n var j = 0;\n for(var i = 0; rval && i < v.value.length; ++i) {\n rval = v.value[i].optional || false;\n if(obj.value[j]) {\n rval = asn1.validate(obj.value[j], v.value[i], capture, errors);\n if(rval) {\n ++j;\n } else if(v.value[i].optional) {\n rval = true;\n }\n }\n if(!rval && errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Tag class \"' + v.tagClass + '\", type \"' +\n v.type + '\" expected value length \"' +\n v.value.length + '\", got \"' +\n obj.value.length + '\"');\n }\n }\n }\n\n if(rval && capture) {\n if(v.capture) {\n capture[v.capture] = obj.value;\n }\n if(v.captureAsn1) {\n capture[v.captureAsn1] = obj;\n }\n if(v.captureBitStringContents && 'bitStringContents' in obj) {\n capture[v.captureBitStringContents] = obj.bitStringContents;\n }\n if(v.captureBitStringValue && 'bitStringContents' in obj) {\n var value;\n if(obj.bitStringContents.length < 2) {\n capture[v.captureBitStringValue] = '';\n } else {\n // FIXME: support unused bits with data shifting\n var unused = obj.bitStringContents.charCodeAt(0);\n if(unused !== 0) {\n throw new Error(\n 'captureBitStringValue only supported for zero unused bits');\n }\n capture[v.captureBitStringValue] = obj.bitStringContents.slice(1);\n }\n }\n }\n } else if(errors) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected constructed \"' + v.constructed + '\", got \"' +\n obj.constructed + '\"');\n }\n } else if(errors) {\n if(obj.tagClass !== v.tagClass) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected tag class \"' + v.tagClass + '\", got \"' +\n obj.tagClass + '\"');\n }\n if(obj.type !== v.type) {\n errors.push(\n '[' + v.name + '] ' +\n 'Expected type \"' + v.type + '\", got \"' + obj.type + '\"');\n }\n }\n return rval;\n};\n\n// regex for testing for non-latin characters\nvar _nonLatinRegex = /[^\\\\u0000-\\\\u00ff]/;\n\n/**\n * Pretty prints an ASN.1 object to a string.\n *\n * @param obj the object to write out.\n * @param level the level in the tree.\n * @param indentation the indentation to use.\n *\n * @return the string.\n */\nasn1.prettyPrint = function(obj, level, indentation) {\n var rval = '';\n\n // set default level and indentation\n level = level || 0;\n indentation = indentation || 2;\n\n // start new line for deep levels\n if(level > 0) {\n rval += '\\n';\n }\n\n // create indent\n var indent = '';\n for(var i = 0; i < level * indentation; ++i) {\n indent += ' ';\n }\n\n // print class:type\n rval += indent + 'Tag: ';\n switch(obj.tagClass) {\n case asn1.Class.UNIVERSAL:\n rval += 'Universal:';\n break;\n case asn1.Class.APPLICATION:\n rval += 'Application:';\n break;\n case asn1.Class.CONTEXT_SPECIFIC:\n rval += 'Context-Specific:';\n break;\n case asn1.Class.PRIVATE:\n rval += 'Private:';\n break;\n }\n\n if(obj.tagClass === asn1.Class.UNIVERSAL) {\n rval += obj.type;\n\n // known types\n switch(obj.type) {\n case asn1.Type.NONE:\n rval += ' (None)';\n break;\n case asn1.Type.BOOLEAN:\n rval += ' (Boolean)';\n break;\n case asn1.Type.INTEGER:\n rval += ' (Integer)';\n break;\n case asn1.Type.BITSTRING:\n rval += ' (Bit string)';\n break;\n case asn1.Type.OCTETSTRING:\n rval += ' (Octet string)';\n break;\n case asn1.Type.NULL:\n rval += ' (Null)';\n break;\n case asn1.Type.OID:\n rval += ' (Object Identifier)';\n break;\n case asn1.Type.ODESC:\n rval += ' (Object Descriptor)';\n break;\n case asn1.Type.EXTERNAL:\n rval += ' (External or Instance of)';\n break;\n case asn1.Type.REAL:\n rval += ' (Real)';\n break;\n case asn1.Type.ENUMERATED:\n rval += ' (Enumerated)';\n break;\n case asn1.Type.EMBEDDED:\n rval += ' (Embedded PDV)';\n break;\n case asn1.Type.UTF8:\n rval += ' (UTF8)';\n break;\n case asn1.Type.ROID:\n rval += ' (Relative Object Identifier)';\n break;\n case asn1.Type.SEQUENCE:\n rval += ' (Sequence)';\n break;\n case asn1.Type.SET:\n rval += ' (Set)';\n break;\n case asn1.Type.PRINTABLESTRING:\n rval += ' (Printable String)';\n break;\n case asn1.Type.IA5String:\n rval += ' (IA5String (ASCII))';\n break;\n case asn1.Type.UTCTIME:\n rval += ' (UTC time)';\n break;\n case asn1.Type.GENERALIZEDTIME:\n rval += ' (Generalized time)';\n break;\n case asn1.Type.BMPSTRING:\n rval += ' (BMP String)';\n break;\n }\n } else {\n rval += obj.type;\n }\n\n rval += '\\n';\n rval += indent + 'Constructed: ' + obj.constructed + '\\n';\n\n if(obj.composed) {\n var subvalues = 0;\n var sub = '';\n for(var i = 0; i < obj.value.length; ++i) {\n if(obj.value[i] !== undefined) {\n subvalues += 1;\n sub += asn1.prettyPrint(obj.value[i], level + 1, indentation);\n if((i + 1) < obj.value.length) {\n sub += ',';\n }\n }\n }\n rval += indent + 'Sub values: ' + subvalues + sub;\n } else {\n rval += indent + 'Value: ';\n if(obj.type === asn1.Type.OID) {\n var oid = asn1.derToOid(obj.value);\n rval += oid;\n if(forge.pki && forge.pki.oids) {\n if(oid in forge.pki.oids) {\n rval += ' (' + forge.pki.oids[oid] + ') ';\n }\n }\n }\n if(obj.type === asn1.Type.INTEGER) {\n try {\n rval += asn1.derToInteger(obj.value);\n } catch(ex) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n }\n } else if(obj.type === asn1.Type.BITSTRING) {\n // TODO: shift bits as needed to display without padding\n if(obj.value.length > 1) {\n // remove unused bits field\n rval += '0x' + forge.util.bytesToHex(obj.value.slice(1));\n } else {\n rval += '(none)';\n }\n // show unused bit count\n if(obj.value.length > 0) {\n var unused = obj.value.charCodeAt(0);\n if(unused == 1) {\n rval += ' (1 unused bit shown)';\n } else if(unused > 1) {\n rval += ' (' + unused + ' unused bits shown)';\n }\n }\n } else if(obj.type === asn1.Type.OCTETSTRING) {\n if(!_nonLatinRegex.test(obj.value)) {\n rval += '(' + obj.value + ') ';\n }\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.type === asn1.Type.UTF8) {\n try {\n rval += forge.util.decodeUtf8(obj.value);\n } catch(e) {\n if(e.message === 'URI malformed') {\n rval +=\n '0x' + forge.util.bytesToHex(obj.value) + ' (malformed UTF8)';\n } else {\n throw e;\n }\n }\n } else if(obj.type === asn1.Type.PRINTABLESTRING ||\n obj.type === asn1.Type.IA5String) {\n rval += obj.value;\n } else if(_nonLatinRegex.test(obj.value)) {\n rval += '0x' + forge.util.bytesToHex(obj.value);\n } else if(obj.value.length === 0) {\n rval += '[null]';\n } else {\n rval += obj.value;\n }\n }\n\n return rval;\n};\n","/**\n * Base-N/Base-X encoding/decoding functions.\n *\n * Original implementation from base-x:\n * https://github.com/cryptocoinjs/base-x\n *\n * Which is MIT licensed:\n *\n * The MIT License (MIT)\n *\n * Copyright base-x contributors (c) 2016\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n * DEALINGS IN THE SOFTWARE.\n */\nvar api = {};\nmodule.exports = api;\n\n// baseN alphabet indexes\nvar _reverseAlphabets = {};\n\n/**\n * BaseN-encodes a Uint8Array using the given alphabet.\n *\n * @param input the Uint8Array to encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the baseN-encoded output string.\n */\napi.encode = function(input, alphabet, maxline) {\n if(typeof alphabet !== 'string') {\n throw new TypeError('\"alphabet\" must be a string.');\n }\n if(maxline !== undefined && typeof maxline !== 'number') {\n throw new TypeError('\"maxline\" must be a number.');\n }\n\n var output = '';\n\n if(!(input instanceof Uint8Array)) {\n // assume forge byte buffer\n output = _encodeWithByteBuffer(input, alphabet);\n } else {\n var i = 0;\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var digits = [0];\n for(i = 0; i < input.length; ++i) {\n for(var j = 0, carry = input[i]; j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % base;\n carry = (carry / base) | 0;\n }\n\n while(carry > 0) {\n digits.push(carry % base);\n carry = (carry / base) | 0;\n }\n }\n\n // deal with leading zeros\n for(i = 0; input[i] === 0 && i < input.length - 1; ++i) {\n output += first;\n }\n // convert digits to a string\n for(i = digits.length - 1; i >= 0; --i) {\n output += alphabet[digits[i]];\n }\n }\n\n if(maxline) {\n var regex = new RegExp('.{1,' + maxline + '}', 'g');\n output = output.match(regex).join('\\r\\n');\n }\n\n return output;\n};\n\n/**\n * Decodes a baseN-encoded (using the given alphabet) string to a\n * Uint8Array.\n *\n * @param input the baseN-encoded input string.\n *\n * @return the Uint8Array.\n */\napi.decode = function(input, alphabet) {\n if(typeof input !== 'string') {\n throw new TypeError('\"input\" must be a string.');\n }\n if(typeof alphabet !== 'string') {\n throw new TypeError('\"alphabet\" must be a string.');\n }\n\n var table = _reverseAlphabets[alphabet];\n if(!table) {\n // compute reverse alphabet\n table = _reverseAlphabets[alphabet] = [];\n for(var i = 0; i < alphabet.length; ++i) {\n table[alphabet.charCodeAt(i)] = i;\n }\n }\n\n // remove whitespace characters\n input = input.replace(/\\s/g, '');\n\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var bytes = [0];\n for(var i = 0; i < input.length; i++) {\n var value = table[input.charCodeAt(i)];\n if(value === undefined) {\n return;\n }\n\n for(var j = 0, carry = value; j < bytes.length; ++j) {\n carry += bytes[j] * base;\n bytes[j] = carry & 0xff;\n carry >>= 8;\n }\n\n while(carry > 0) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n // deal with leading zeros\n for(var k = 0; input[k] === first && k < input.length - 1; ++k) {\n bytes.push(0);\n }\n\n if(typeof Buffer !== 'undefined') {\n return Buffer.from(bytes.reverse());\n }\n\n return new Uint8Array(bytes.reverse());\n};\n\nfunction _encodeWithByteBuffer(input, alphabet) {\n var i = 0;\n var base = alphabet.length;\n var first = alphabet.charAt(0);\n var digits = [0];\n for(i = 0; i < input.length(); ++i) {\n for(var j = 0, carry = input.at(i); j < digits.length; ++j) {\n carry += digits[j] << 8;\n digits[j] = carry % base;\n carry = (carry / base) | 0;\n }\n\n while(carry > 0) {\n digits.push(carry % base);\n carry = (carry / base) | 0;\n }\n }\n\n var output = '';\n\n // deal with leading zeros\n for(i = 0; input.at(i) === 0 && i < input.length() - 1; ++i) {\n output += first;\n }\n // convert digits to a string\n for(i = digits.length - 1; i >= 0; --i) {\n output += alphabet[digits[i]];\n }\n\n return output;\n}\n","/**\n * Cipher base API.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nmodule.exports = forge.cipher = forge.cipher || {};\n\n// registered algorithms\nforge.cipher.algorithms = forge.cipher.algorithms || {};\n\n/**\n * Creates a cipher object that can be used to encrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createCipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: false\n });\n};\n\n/**\n * Creates a decipher object that can be used to decrypt data using the given\n * algorithm and key. The algorithm may be provided as a string value for a\n * previously registered algorithm or it may be given as a cipher algorithm\n * API object.\n *\n * @param algorithm the algorithm to use, either a string or an algorithm API\n * object.\n * @param key the key to use, as a binary-encoded string of bytes or a\n * byte buffer.\n *\n * @return the cipher.\n */\nforge.cipher.createDecipher = function(algorithm, key) {\n var api = algorithm;\n if(typeof api === 'string') {\n api = forge.cipher.getAlgorithm(api);\n if(api) {\n api = api();\n }\n }\n if(!api) {\n throw new Error('Unsupported algorithm: ' + algorithm);\n }\n\n // assume block cipher\n return new forge.cipher.BlockCipher({\n algorithm: api,\n key: key,\n decrypt: true\n });\n};\n\n/**\n * Registers an algorithm by name. If the name was already registered, the\n * algorithm API object will be overwritten.\n *\n * @param name the name of the algorithm.\n * @param algorithm the algorithm API object.\n */\nforge.cipher.registerAlgorithm = function(name, algorithm) {\n name = name.toUpperCase();\n forge.cipher.algorithms[name] = algorithm;\n};\n\n/**\n * Gets a registered algorithm by name.\n *\n * @param name the name of the algorithm.\n *\n * @return the algorithm, if found, null if not.\n */\nforge.cipher.getAlgorithm = function(name) {\n name = name.toUpperCase();\n if(name in forge.cipher.algorithms) {\n return forge.cipher.algorithms[name];\n }\n return null;\n};\n\nvar BlockCipher = forge.cipher.BlockCipher = function(options) {\n this.algorithm = options.algorithm;\n this.mode = this.algorithm.mode;\n this.blockSize = this.mode.blockSize;\n this._finish = false;\n this._input = null;\n this.output = null;\n this._op = options.decrypt ? this.mode.decrypt : this.mode.encrypt;\n this._decrypt = options.decrypt;\n this.algorithm.initialize(options);\n};\n\n/**\n * Starts or restarts the encryption or decryption process, whichever\n * was previously configured.\n *\n * For non-GCM mode, the IV may be a binary-encoded string of bytes, an array\n * of bytes, a byte buffer, or an array of 32-bit integers. If the IV is in\n * bytes, then it must be Nb (16) bytes in length. If the IV is given in as\n * 32-bit integers, then it must be 4 integers long.\n *\n * Note: an IV is not required or used in ECB mode.\n *\n * For GCM-mode, the IV must be given as a binary-encoded string of bytes or\n * a byte buffer. The number of bytes should be 12 (96 bits) as recommended\n * by NIST SP-800-38D but another length may be given.\n *\n * @param options the options to use:\n * iv the initialization vector to use as a binary-encoded string of\n * bytes, null to reuse the last ciphered block from a previous\n * update() (this \"residue\" method is for legacy support only).\n * additionalData additional authentication data as a binary-encoded\n * string of bytes, for 'GCM' mode, (default: none).\n * tagLength desired length of authentication tag, in bits, for\n * 'GCM' mode (0-128, default: 128).\n * tag the authentication tag to check if decrypting, as a\n * binary-encoded string of bytes.\n * output the output the buffer to write to, null to create one.\n */\nBlockCipher.prototype.start = function(options) {\n options = options || {};\n var opts = {};\n for(var key in options) {\n opts[key] = options[key];\n }\n opts.decrypt = this._decrypt;\n this._finish = false;\n this._input = forge.util.createBuffer();\n this.output = options.output || forge.util.createBuffer();\n this.mode.start(opts);\n};\n\n/**\n * Updates the next block according to the cipher mode.\n *\n * @param input the buffer to read from.\n */\nBlockCipher.prototype.update = function(input) {\n if(input) {\n // input given, so empty it into the input buffer\n this._input.putBuffer(input);\n }\n\n // do cipher operation until it needs more input and not finished\n while(!this._op.call(this.mode, this._input, this.output, this._finish) &&\n !this._finish) {}\n\n // free consumed memory from input buffer\n this._input.compact();\n};\n\n/**\n * Finishes encrypting or decrypting.\n *\n * @param pad a padding function to use in CBC mode, null for default,\n * signature(blockSize, buffer, decrypt).\n *\n * @return true if successful, false on error.\n */\nBlockCipher.prototype.finish = function(pad) {\n // backwards-compatibility w/deprecated padding API\n // Note: will overwrite padding functions even after another start() call\n if(pad && (this.mode.name === 'ECB' || this.mode.name === 'CBC')) {\n this.mode.pad = function(input) {\n return pad(this.blockSize, input, false);\n };\n this.mode.unpad = function(output) {\n return pad(this.blockSize, output, true);\n };\n }\n\n // build options for padding and afterFinish functions\n var options = {};\n options.decrypt = this._decrypt;\n\n // get # of bytes that won't fill a block\n options.overflow = this._input.length() % this.blockSize;\n\n if(!this._decrypt && this.mode.pad) {\n if(!this.mode.pad(this._input, options)) {\n return false;\n }\n }\n\n // do final update\n this._finish = true;\n this.update();\n\n if(this._decrypt && this.mode.unpad) {\n if(!this.mode.unpad(this.output, options)) {\n return false;\n }\n }\n\n if(this.mode.afterFinish) {\n if(!this.mode.afterFinish(this.output, options)) {\n return false;\n }\n }\n\n return true;\n};\n","/**\n * Supported cipher modes.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nforge.cipher = forge.cipher || {};\n\n// supported cipher modes\nvar modes = module.exports = forge.cipher.modes = forge.cipher.modes || {};\n\n/** Electronic codebook (ECB) (Don't use this; it's not secure) **/\n\nmodes.ecb = function(options) {\n options = options || {};\n this.name = 'ECB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.ecb.prototype.start = function(options) {};\n\nmodes.ecb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n};\n\nmodes.ecb.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.ecb.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher-block Chaining (CBC) **/\n\nmodes.cbc = function(options) {\n options = options || {};\n this.name = 'CBC';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n};\n\nmodes.cbc.prototype.start = function(options) {\n // Note: legacy support for using IV residue (has security flaws)\n // if IV is null, reuse block from previous processing\n if(options.iv === null) {\n // must have a previous block\n if(!this._prev) {\n throw new Error('Invalid IV parameter.');\n }\n this._iv = this._prev.slice(0);\n } else if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n } else {\n // save IV as \"previous\" block\n this._iv = transformIV(options.iv, this.blockSize);\n this._prev = this._iv.slice(0);\n }\n};\n\nmodes.cbc.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n // CBC XOR's IV (or previous block) with plaintext\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._prev[i] ^ input.getInt32();\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // write output, save previous block\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i]);\n }\n this._prev = this._outBlock;\n};\n\nmodes.cbc.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n if(input.length() < this.blockSize && !(finish && input.length() > 0)) {\n return true;\n }\n\n // get next block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n }\n\n // decrypt block\n this.cipher.decrypt(this._inBlock, this._outBlock);\n\n // write output, save previous ciphered block\n // CBC XOR's IV (or previous block) with ciphertext\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._prev[i] ^ this._outBlock[i]);\n }\n this._prev = this._inBlock.slice(0);\n};\n\nmodes.cbc.prototype.pad = function(input, options) {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (input.length() === this.blockSize ?\n this.blockSize : (this.blockSize - input.length()));\n input.fillWithByte(padding, padding);\n return true;\n};\n\nmodes.cbc.prototype.unpad = function(output, options) {\n // check for error: input data not a multiple of blockSize\n if(options.overflow > 0) {\n return false;\n }\n\n // ensure padding byte count is valid\n var len = output.length();\n var count = output.at(len - 1);\n if(count > (this.blockSize << 2)) {\n return false;\n }\n\n // trim off padding bytes\n output.truncate(count);\n return true;\n};\n\n/** Cipher feedback (CFB) **/\n\nmodes.cfb = function(options) {\n options = options || {};\n this.name = 'CFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32() ^ this._outBlock[i];\n output.putInt32(this._inBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32() ^ this._outBlock[i];\n this._partialOutput.putInt32(this._partialBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.cfb.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output, write input as output\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = input.getInt32();\n output.putInt32(this._inBlock[i] ^ this._outBlock[i]);\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output, write input as partial output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialBlock[i] = input.getInt32();\n this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._partialBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\n/** Output feedback (OFB) **/\n\nmodes.ofb = function(options) {\n options = options || {};\n this.name = 'OFB';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(input.length() === 0) {\n return true;\n }\n\n // encrypt block (OFB always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output and update next input\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n this._inBlock[i] = this._outBlock[i];\n }\n return;\n }\n\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n } else {\n // block complete, update input block\n for(var i = 0; i < this._ints; ++i) {\n this._inBlock[i] = this._outBlock[i];\n }\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n};\n\nmodes.ofb.prototype.decrypt = modes.ofb.prototype.encrypt;\n\n/** Counter (CTR) **/\n\nmodes.ctr = function(options) {\n options = options || {};\n this.name = 'CTR';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = null;\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // use IV as first input\n this._iv = transformIV(options.iv, this.blockSize);\n this._inBlock = this._iv.slice(0);\n this._partialBytes = 0;\n};\n\nmodes.ctr.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block (CTR always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes > 0) {\n // block still incomplete, restore input buffer\n input.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // block complete, increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.ctr.prototype.decrypt = modes.ctr.prototype.encrypt;\n\n/** Galois/Counter Mode (GCM) **/\n\nmodes.gcm = function(options) {\n options = options || {};\n this.name = 'GCM';\n this.cipher = options.cipher;\n this.blockSize = options.blockSize || 16;\n this._ints = this.blockSize / 4;\n this._inBlock = new Array(this._ints);\n this._outBlock = new Array(this._ints);\n this._partialOutput = forge.util.createBuffer();\n this._partialBytes = 0;\n\n // R is actually this value concatenated with 120 more zero bits, but\n // we only XOR against R so the other zeros have no effect -- we just\n // apply this value to the first integer in a block\n this._R = 0xE1000000;\n};\n\nmodes.gcm.prototype.start = function(options) {\n if(!('iv' in options)) {\n throw new Error('Invalid IV parameter.');\n }\n // ensure IV is a byte buffer\n var iv = forge.util.createBuffer(options.iv);\n\n // no ciphered data processed yet\n this._cipherLength = 0;\n\n // default additional data is none\n var additionalData;\n if('additionalData' in options) {\n additionalData = forge.util.createBuffer(options.additionalData);\n } else {\n additionalData = forge.util.createBuffer();\n }\n\n // default tag length is 128 bits\n if('tagLength' in options) {\n this._tagLength = options.tagLength;\n } else {\n this._tagLength = 128;\n }\n\n // if tag is given, ensure tag matches tag length\n this._tag = null;\n if(options.decrypt) {\n // save tag to check later\n this._tag = forge.util.createBuffer(options.tag).getBytes();\n if(this._tag.length !== (this._tagLength / 8)) {\n throw new Error('Authentication tag does not match tag length.');\n }\n }\n\n // create tmp storage for hash calculation\n this._hashBlock = new Array(this._ints);\n\n // no tag generated yet\n this.tag = null;\n\n // generate hash subkey\n // (apply block cipher to \"zero\" block)\n this._hashSubkey = new Array(this._ints);\n this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey);\n\n // generate table M\n // use 4-bit tables (32 component decomposition of a 16 byte value)\n // 8-bit tables take more space and are known to have security\n // vulnerabilities (in native implementations)\n this.componentBits = 4;\n this._m = this.generateHashTable(this._hashSubkey, this.componentBits);\n\n // Note: support IV length different from 96 bits? (only supporting\n // 96 bits is recommended by NIST SP-800-38D)\n // generate J_0\n var ivLength = iv.length();\n if(ivLength === 12) {\n // 96-bit IV\n this._j0 = [iv.getInt32(), iv.getInt32(), iv.getInt32(), 1];\n } else {\n // IV is NOT 96-bits\n this._j0 = [0, 0, 0, 0];\n while(iv.length() > 0) {\n this._j0 = this.ghash(\n this._hashSubkey, this._j0,\n [iv.getInt32(), iv.getInt32(), iv.getInt32(), iv.getInt32()]);\n }\n this._j0 = this.ghash(\n this._hashSubkey, this._j0, [0, 0].concat(from64To32(ivLength * 8)));\n }\n\n // generate ICB (initial counter block)\n this._inBlock = this._j0.slice(0);\n inc32(this._inBlock);\n this._partialBytes = 0;\n\n // consume authentication data\n additionalData = forge.util.createBuffer(additionalData);\n // save additional data length as a BE 64-bit number\n this._aDataLength = from64To32(additionalData.length() * 8);\n // pad additional data to 128 bit (16 byte) block size\n var overflow = additionalData.length() % this.blockSize;\n if(overflow) {\n additionalData.fillWithByte(0, this.blockSize - overflow);\n }\n this._s = [0, 0, 0, 0];\n while(additionalData.length() > 0) {\n this._s = this.ghash(this._hashSubkey, this._s, [\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32(),\n additionalData.getInt32()\n ]);\n }\n};\n\nmodes.gcm.prototype.encrypt = function(input, output, finish) {\n // not enough input to encrypt\n var inputLength = input.length();\n if(inputLength === 0) {\n return true;\n }\n\n // encrypt block\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // handle full block\n if(this._partialBytes === 0 && inputLength >= this.blockSize) {\n // XOR input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^= input.getInt32());\n }\n this._cipherLength += this.blockSize;\n } else {\n // handle partial block\n var partialBytes = (this.blockSize - inputLength) % this.blockSize;\n if(partialBytes > 0) {\n partialBytes = this.blockSize - partialBytes;\n }\n\n // XOR input with output\n this._partialOutput.clear();\n for(var i = 0; i < this._ints; ++i) {\n this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]);\n }\n\n if(partialBytes <= 0 || finish) {\n // handle overflow prior to hashing\n if(finish) {\n // get block overflow\n var overflow = inputLength % this.blockSize;\n this._cipherLength += overflow;\n // truncate for hash function\n this._partialOutput.truncate(this.blockSize - overflow);\n } else {\n this._cipherLength += this.blockSize;\n }\n\n // get output block for hashing\n for(var i = 0; i < this._ints; ++i) {\n this._outBlock[i] = this._partialOutput.getInt32();\n }\n this._partialOutput.read -= this.blockSize;\n }\n\n // skip any previous partial bytes\n if(this._partialBytes > 0) {\n this._partialOutput.getBytes(this._partialBytes);\n }\n\n if(partialBytes > 0 && !finish) {\n // block still incomplete, restore input buffer, get partial output,\n // and return early\n input.read -= this.blockSize;\n output.putBytes(this._partialOutput.getBytes(\n partialBytes - this._partialBytes));\n this._partialBytes = partialBytes;\n return true;\n }\n\n output.putBytes(this._partialOutput.getBytes(\n inputLength - this._partialBytes));\n this._partialBytes = 0;\n }\n\n // update hash block S\n this._s = this.ghash(this._hashSubkey, this._s, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n};\n\nmodes.gcm.prototype.decrypt = function(input, output, finish) {\n // not enough input to decrypt\n var inputLength = input.length();\n if(inputLength < this.blockSize && !(finish && inputLength > 0)) {\n return true;\n }\n\n // encrypt block (GCM always uses encryption mode)\n this.cipher.encrypt(this._inBlock, this._outBlock);\n\n // increment counter (input block)\n inc32(this._inBlock);\n\n // update hash block S\n this._hashBlock[0] = input.getInt32();\n this._hashBlock[1] = input.getInt32();\n this._hashBlock[2] = input.getInt32();\n this._hashBlock[3] = input.getInt32();\n this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock);\n\n // XOR hash input with output\n for(var i = 0; i < this._ints; ++i) {\n output.putInt32(this._outBlock[i] ^ this._hashBlock[i]);\n }\n\n // increment cipher data length\n if(inputLength < this.blockSize) {\n this._cipherLength += inputLength % this.blockSize;\n } else {\n this._cipherLength += this.blockSize;\n }\n};\n\nmodes.gcm.prototype.afterFinish = function(output, options) {\n var rval = true;\n\n // handle overflow\n if(options.decrypt && options.overflow) {\n output.truncate(this.blockSize - options.overflow);\n }\n\n // handle authentication tag\n this.tag = forge.util.createBuffer();\n\n // concatenate additional data length with cipher length\n var lengths = this._aDataLength.concat(from64To32(this._cipherLength * 8));\n\n // include lengths in hash\n this._s = this.ghash(this._hashSubkey, this._s, lengths);\n\n // do GCTR(J_0, S)\n var tag = [];\n this.cipher.encrypt(this._j0, tag);\n for(var i = 0; i < this._ints; ++i) {\n this.tag.putInt32(this._s[i] ^ tag[i]);\n }\n\n // trim tag to length\n this.tag.truncate(this.tag.length() % (this._tagLength / 8));\n\n // check authentication tag\n if(options.decrypt && this.tag.bytes() !== this._tag) {\n rval = false;\n }\n\n return rval;\n};\n\n/**\n * See NIST SP-800-38D 6.3 (Algorithm 1). This function performs Galois\n * field multiplication. The field, GF(2^128), is defined by the polynomial:\n *\n * x^128 + x^7 + x^2 + x + 1\n *\n * Which is represented in little-endian binary form as: 11100001 (0xe1). When\n * the value of a coefficient is 1, a bit is set. The value R, is the\n * concatenation of this value and 120 zero bits, yielding a 128-bit value\n * which matches the block size.\n *\n * This function will multiply two elements (vectors of bytes), X and Y, in\n * the field GF(2^128). The result is initialized to zero. For each bit of\n * X (out of 128), x_i, if x_i is set, then the result is multiplied (XOR'd)\n * by the current value of Y. For each bit, the value of Y will be raised by\n * a power of x (multiplied by the polynomial x). This can be achieved by\n * shifting Y once to the right. If the current value of Y, prior to being\n * multiplied by x, has 0 as its LSB, then it is a 127th degree polynomial.\n * Otherwise, we must divide by R after shifting to find the remainder.\n *\n * @param x the first block to multiply by the second.\n * @param y the second block to multiply by the first.\n *\n * @return the block result of the multiplication.\n */\nmodes.gcm.prototype.multiply = function(x, y) {\n var z_i = [0, 0, 0, 0];\n var v_i = y.slice(0);\n\n // calculate Z_128 (block has 128 bits)\n for(var i = 0; i < 128; ++i) {\n // if x_i is 0, Z_{i+1} = Z_i (unchanged)\n // else Z_{i+1} = Z_i ^ V_i\n // get x_i by finding 32-bit int position, then left shift 1 by remainder\n var x_i = x[(i / 32) | 0] & (1 << (31 - i % 32));\n if(x_i) {\n z_i[0] ^= v_i[0];\n z_i[1] ^= v_i[1];\n z_i[2] ^= v_i[2];\n z_i[3] ^= v_i[3];\n }\n\n // if LSB(V_i) is 1, V_i = V_i >> 1\n // else V_i = (V_i >> 1) ^ R\n this.pow(v_i, v_i);\n }\n\n return z_i;\n};\n\nmodes.gcm.prototype.pow = function(x, out) {\n // if LSB(x) is 1, x = x >>> 1\n // else x = (x >>> 1) ^ R\n var lsb = x[3] & 1;\n\n // always do x >>> 1:\n // starting with the rightmost integer, shift each integer to the right\n // one bit, pulling in the bit from the integer to the left as its top\n // most bit (do this for the last 3 integers)\n for(var i = 3; i > 0; --i) {\n out[i] = (x[i] >>> 1) | ((x[i - 1] & 1) << 31);\n }\n // shift the first integer normally\n out[0] = x[0] >>> 1;\n\n // if lsb was not set, then polynomial had a degree of 127 and doesn't\n // need to divided; otherwise, XOR with R to find the remainder; we only\n // need to XOR the first integer since R technically ends w/120 zero bits\n if(lsb) {\n out[0] ^= this._R;\n }\n};\n\nmodes.gcm.prototype.tableMultiply = function(x) {\n // assumes 4-bit tables are used\n var z = [0, 0, 0, 0];\n for(var i = 0; i < 32; ++i) {\n var idx = (i / 8) | 0;\n var x_i = (x[idx] >>> ((7 - (i % 8)) * 4)) & 0xF;\n var ah = this._m[i][x_i];\n z[0] ^= ah[0];\n z[1] ^= ah[1];\n z[2] ^= ah[2];\n z[3] ^= ah[3];\n }\n return z;\n};\n\n/**\n * A continuing version of the GHASH algorithm that operates on a single\n * block. The hash block, last hash value (Ym) and the new block to hash\n * are given.\n *\n * @param h the hash block.\n * @param y the previous value for Ym, use [0, 0, 0, 0] for a new hash.\n * @param x the block to hash.\n *\n * @return the hashed value (Ym).\n */\nmodes.gcm.prototype.ghash = function(h, y, x) {\n y[0] ^= x[0];\n y[1] ^= x[1];\n y[2] ^= x[2];\n y[3] ^= x[3];\n return this.tableMultiply(y);\n //return this.multiply(y, h);\n};\n\n/**\n * Precomputes a table for multiplying against the hash subkey. This\n * mechanism provides a substantial speed increase over multiplication\n * performed without a table. The table-based multiplication this table is\n * for solves X * H by multiplying each component of X by H and then\n * composing the results together using XOR.\n *\n * This function can be used to generate tables with different bit sizes\n * for the components, however, this implementation assumes there are\n * 32 components of X (which is a 16 byte vector), therefore each component\n * takes 4-bits (so the table is constructed with bits=4).\n *\n * @param h the hash subkey.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateHashTable = function(h, bits) {\n // TODO: There are further optimizations that would use only the\n // first table M_0 (or some variant) along with a remainder table;\n // this can be explored in the future\n var multiplier = 8 / bits;\n var perInt = 4 * multiplier;\n var size = 16 * multiplier;\n var m = new Array(size);\n for(var i = 0; i < size; ++i) {\n var tmp = [0, 0, 0, 0];\n var idx = (i / perInt) | 0;\n var shft = ((perInt - 1 - (i % perInt)) * bits);\n tmp[idx] = (1 << (bits - 1)) << shft;\n m[i] = this.generateSubHashTable(this.multiply(tmp, h), bits);\n }\n return m;\n};\n\n/**\n * Generates a table for multiplying against the hash subkey for one\n * particular component (out of all possible component values).\n *\n * @param mid the pre-multiplied value for the middle key of the table.\n * @param bits the bit size for a component.\n */\nmodes.gcm.prototype.generateSubHashTable = function(mid, bits) {\n // compute the table quickly by minimizing the number of\n // POW operations -- they only need to be performed for powers of 2,\n // all other entries can be composed from those powers using XOR\n var size = 1 << bits;\n var half = size >>> 1;\n var m = new Array(size);\n m[half] = mid.slice(0);\n var i = half >>> 1;\n while(i > 0) {\n // raise m0[2 * i] and store in m0[i]\n this.pow(m[2 * i], m[i] = []);\n i >>= 1;\n }\n i = 2;\n while(i < half) {\n for(var j = 1; j < i; ++j) {\n var m_i = m[i];\n var m_j = m[j];\n m[i + j] = [\n m_i[0] ^ m_j[0],\n m_i[1] ^ m_j[1],\n m_i[2] ^ m_j[2],\n m_i[3] ^ m_j[3]\n ];\n }\n i *= 2;\n }\n m[0] = [0, 0, 0, 0];\n /* Note: We could avoid storing these by doing composition during multiply\n calculate top half using composition by speed is preferred. */\n for(i = half + 1; i < size; ++i) {\n var c = m[i ^ half];\n m[i] = [mid[0] ^ c[0], mid[1] ^ c[1], mid[2] ^ c[2], mid[3] ^ c[3]];\n }\n return m;\n};\n\n/** Utility functions */\n\nfunction transformIV(iv, blockSize) {\n if(typeof iv === 'string') {\n // convert iv string into byte buffer\n iv = forge.util.createBuffer(iv);\n }\n\n if(forge.util.isArray(iv) && iv.length > 4) {\n // convert iv byte array into byte buffer\n var tmp = iv;\n iv = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n iv.putByte(tmp[i]);\n }\n }\n\n if(iv.length() < blockSize) {\n throw new Error(\n 'Invalid IV length; got ' + iv.length() +\n ' bytes and expected ' + blockSize + ' bytes.');\n }\n\n if(!forge.util.isArray(iv)) {\n // convert iv byte buffer into 32-bit integer array\n var ints = [];\n var blocks = blockSize / 4;\n for(var i = 0; i < blocks; ++i) {\n ints.push(iv.getInt32());\n }\n iv = ints;\n }\n\n return iv;\n}\n\nfunction inc32(block) {\n // increment last 32 bits of block only\n block[block.length - 1] = (block[block.length - 1] + 1) & 0xFFFFFFFF;\n}\n\nfunction from64To32(num) {\n // convert 64-bit number to two BE Int32s\n return [(num / 0x100000000) | 0, num & 0xFFFFFFFF];\n}\n","/**\n * DES (Data Encryption Standard) implementation.\n *\n * This implementation supports DES as well as 3DES-EDE in ECB and CBC mode.\n * It is based on the BSD-licensed implementation by Paul Tero:\n *\n * Paul Tero, July 2001\n * http://www.tero.co.uk/des/\n *\n * Optimised for performance with large blocks by\n * Michael Hayworth, November 2001\n * http://www.netdealing.com\n *\n * THIS SOFTWARE IS PROVIDED \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl \n * Copyright (c) 2012-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./cipher');\nrequire('./cipherModes');\nrequire('./util');\n\n/* DES API */\nmodule.exports = forge.des = forge.des || {};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-', key);\n * cipher.start({iv: iv});\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startEncrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: false,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var cipher = forge.cipher.createCipher('DES-', key);\n *\n * Creates an DES cipher object to encrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createEncryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: false,\n mode: mode\n });\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-', key);\n * decipher.start({iv: iv});\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n * The output will be stored in the 'output' member of the returned cipher.\n *\n * The key and iv may be given as binary-encoded strings of bytes or\n * byte buffers.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n * @param mode the cipher mode to use (default: 'CBC' if IV is\n * given, 'ECB' if null).\n *\n * @return the cipher.\n */\nforge.des.startDecrypting = function(key, iv, output, mode) {\n var cipher = _createCipher({\n key: key,\n output: output,\n decrypt: true,\n mode: mode || (iv === null ? 'ECB' : 'CBC')\n });\n cipher.start(iv);\n return cipher;\n};\n\n/**\n * Deprecated. Instead, use:\n *\n * var decipher = forge.cipher.createDecipher('DES-', key);\n *\n * Creates an DES cipher object to decrypt data using the given symmetric key.\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param key the symmetric key to use (64 or 192 bits).\n * @param mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nforge.des.createDecryptionCipher = function(key, mode) {\n return _createCipher({\n key: key,\n output: null,\n decrypt: true,\n mode: mode\n });\n};\n\n/**\n * Creates a new DES cipher algorithm object.\n *\n * @param name the name of the algorithm.\n * @param mode the mode factory function.\n *\n * @return the DES algorithm object.\n */\nforge.des.Algorithm = function(name, mode) {\n var self = this;\n self.name = name;\n self.mode = new mode({\n blockSize: 8,\n cipher: {\n encrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, false);\n },\n decrypt: function(inBlock, outBlock) {\n return _updateBlock(self._keys, inBlock, outBlock, true);\n }\n }\n });\n self._init = false;\n};\n\n/**\n * Initializes this DES algorithm by expanding its key.\n *\n * @param options the options to use.\n * key the key to use with this algorithm.\n * decrypt true if the algorithm should be initialized for decryption,\n * false for encryption.\n */\nforge.des.Algorithm.prototype.initialize = function(options) {\n if(this._init) {\n return;\n }\n\n var key = forge.util.createBuffer(options.key);\n if(this.name.indexOf('3DES') === 0) {\n if(key.length() !== 24) {\n throw new Error('Invalid Triple-DES key size: ' + key.length() * 8);\n }\n }\n\n // do key expansion to 16 or 48 subkeys (single or triple DES)\n this._keys = _createKeys(key);\n this._init = true;\n};\n\n/** Register DES algorithms **/\n\nregisterAlgorithm('DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('DES-CTR', forge.cipher.modes.ctr);\n\nregisterAlgorithm('3DES-ECB', forge.cipher.modes.ecb);\nregisterAlgorithm('3DES-CBC', forge.cipher.modes.cbc);\nregisterAlgorithm('3DES-CFB', forge.cipher.modes.cfb);\nregisterAlgorithm('3DES-OFB', forge.cipher.modes.ofb);\nregisterAlgorithm('3DES-CTR', forge.cipher.modes.ctr);\n\nfunction registerAlgorithm(name, mode) {\n var factory = function() {\n return new forge.des.Algorithm(name, mode);\n };\n forge.cipher.registerAlgorithm(name, factory);\n}\n\n/** DES implementation **/\n\nvar spfunction1 = [0x1010400,0,0x10000,0x1010404,0x1010004,0x10404,0x4,0x10000,0x400,0x1010400,0x1010404,0x400,0x1000404,0x1010004,0x1000000,0x4,0x404,0x1000400,0x1000400,0x10400,0x10400,0x1010000,0x1010000,0x1000404,0x10004,0x1000004,0x1000004,0x10004,0,0x404,0x10404,0x1000000,0x10000,0x1010404,0x4,0x1010000,0x1010400,0x1000000,0x1000000,0x400,0x1010004,0x10000,0x10400,0x1000004,0x400,0x4,0x1000404,0x10404,0x1010404,0x10004,0x1010000,0x1000404,0x1000004,0x404,0x10404,0x1010400,0x404,0x1000400,0x1000400,0,0x10004,0x10400,0,0x1010004];\nvar spfunction2 = [-0x7fef7fe0,-0x7fff8000,0x8000,0x108020,0x100000,0x20,-0x7fefffe0,-0x7fff7fe0,-0x7fffffe0,-0x7fef7fe0,-0x7fef8000,-0x80000000,-0x7fff8000,0x100000,0x20,-0x7fefffe0,0x108000,0x100020,-0x7fff7fe0,0,-0x80000000,0x8000,0x108020,-0x7ff00000,0x100020,-0x7fffffe0,0,0x108000,0x8020,-0x7fef8000,-0x7ff00000,0x8020,0,0x108020,-0x7fefffe0,0x100000,-0x7fff7fe0,-0x7ff00000,-0x7fef8000,0x8000,-0x7ff00000,-0x7fff8000,0x20,-0x7fef7fe0,0x108020,0x20,0x8000,-0x80000000,0x8020,-0x7fef8000,0x100000,-0x7fffffe0,0x100020,-0x7fff7fe0,-0x7fffffe0,0x100020,0x108000,0,-0x7fff8000,0x8020,-0x80000000,-0x7fefffe0,-0x7fef7fe0,0x108000];\nvar spfunction3 = [0x208,0x8020200,0,0x8020008,0x8000200,0,0x20208,0x8000200,0x20008,0x8000008,0x8000008,0x20000,0x8020208,0x20008,0x8020000,0x208,0x8000000,0x8,0x8020200,0x200,0x20200,0x8020000,0x8020008,0x20208,0x8000208,0x20200,0x20000,0x8000208,0x8,0x8020208,0x200,0x8000000,0x8020200,0x8000000,0x20008,0x208,0x20000,0x8020200,0x8000200,0,0x200,0x20008,0x8020208,0x8000200,0x8000008,0x200,0,0x8020008,0x8000208,0x20000,0x8000000,0x8020208,0x8,0x20208,0x20200,0x8000008,0x8020000,0x8000208,0x208,0x8020000,0x20208,0x8,0x8020008,0x20200];\nvar spfunction4 = [0x802001,0x2081,0x2081,0x80,0x802080,0x800081,0x800001,0x2001,0,0x802000,0x802000,0x802081,0x81,0,0x800080,0x800001,0x1,0x2000,0x800000,0x802001,0x80,0x800000,0x2001,0x2080,0x800081,0x1,0x2080,0x800080,0x2000,0x802080,0x802081,0x81,0x800080,0x800001,0x802000,0x802081,0x81,0,0,0x802000,0x2080,0x800080,0x800081,0x1,0x802001,0x2081,0x2081,0x80,0x802081,0x81,0x1,0x2000,0x800001,0x2001,0x802080,0x800081,0x2001,0x2080,0x800000,0x802001,0x80,0x800000,0x2000,0x802080];\nvar spfunction5 = [0x100,0x2080100,0x2080000,0x42000100,0x80000,0x100,0x40000000,0x2080000,0x40080100,0x80000,0x2000100,0x40080100,0x42000100,0x42080000,0x80100,0x40000000,0x2000000,0x40080000,0x40080000,0,0x40000100,0x42080100,0x42080100,0x2000100,0x42080000,0x40000100,0,0x42000000,0x2080100,0x2000000,0x42000000,0x80100,0x80000,0x42000100,0x100,0x2000000,0x40000000,0x2080000,0x42000100,0x40080100,0x2000100,0x40000000,0x42080000,0x2080100,0x40080100,0x100,0x2000000,0x42080000,0x42080100,0x80100,0x42000000,0x42080100,0x2080000,0,0x40080000,0x42000000,0x80100,0x2000100,0x40000100,0x80000,0,0x40080000,0x2080100,0x40000100];\nvar spfunction6 = [0x20000010,0x20400000,0x4000,0x20404010,0x20400000,0x10,0x20404010,0x400000,0x20004000,0x404010,0x400000,0x20000010,0x400010,0x20004000,0x20000000,0x4010,0,0x400010,0x20004010,0x4000,0x404000,0x20004010,0x10,0x20400010,0x20400010,0,0x404010,0x20404000,0x4010,0x404000,0x20404000,0x20000000,0x20004000,0x10,0x20400010,0x404000,0x20404010,0x400000,0x4010,0x20000010,0x400000,0x20004000,0x20000000,0x4010,0x20000010,0x20404010,0x404000,0x20400000,0x404010,0x20404000,0,0x20400010,0x10,0x4000,0x20400000,0x404010,0x4000,0x400010,0x20004010,0,0x20404000,0x20000000,0x400010,0x20004010];\nvar spfunction7 = [0x200000,0x4200002,0x4000802,0,0x800,0x4000802,0x200802,0x4200800,0x4200802,0x200000,0,0x4000002,0x2,0x4000000,0x4200002,0x802,0x4000800,0x200802,0x200002,0x4000800,0x4000002,0x4200000,0x4200800,0x200002,0x4200000,0x800,0x802,0x4200802,0x200800,0x2,0x4000000,0x200800,0x4000000,0x200800,0x200000,0x4000802,0x4000802,0x4200002,0x4200002,0x2,0x200002,0x4000000,0x4000800,0x200000,0x4200800,0x802,0x200802,0x4200800,0x802,0x4000002,0x4200802,0x4200000,0x200800,0,0x2,0x4200802,0,0x200802,0x4200000,0x800,0x4000002,0x4000800,0x800,0x200002];\nvar spfunction8 = [0x10001040,0x1000,0x40000,0x10041040,0x10000000,0x10001040,0x40,0x10000000,0x40040,0x10040000,0x10041040,0x41000,0x10041000,0x41040,0x1000,0x40,0x10040000,0x10000040,0x10001000,0x1040,0x41000,0x40040,0x10040040,0x10041000,0x1040,0,0,0x10040040,0x10000040,0x10001000,0x41040,0x40000,0x41040,0x40000,0x10041000,0x1000,0x40,0x10040040,0x1000,0x41040,0x10001000,0x40,0x10000040,0x10040000,0x10040040,0x10000000,0x40000,0x10001040,0,0x10041040,0x40040,0x10000040,0x10040000,0x10001000,0x10001040,0,0x10041040,0x41000,0x41000,0x1040,0x1040,0x40040,0x10000000,0x10041000];\n\n/**\n * Create necessary sub keys.\n *\n * @param key the 64-bit or 192-bit key.\n *\n * @return the expanded keys.\n */\nfunction _createKeys(key) {\n var pc2bytes0 = [0,0x4,0x20000000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,0x20010200,0x20010204],\n pc2bytes1 = [0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101,0x4000100,0x4000101,0x4100100,0x4100101],\n pc2bytes2 = [0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808],\n pc2bytes3 = [0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000,0x8220000,0x22000,0x222000,0x8022000,0x8222000],\n pc2bytes4 = [0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,0x1010,0x41010],\n pc2bytes5 = [0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000,0x2000400,0x2000020,0x2000420],\n pc2bytes6 = [0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002],\n pc2bytes7 = [0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,0x30800,0x20020000,0x20030000,0x20020800,0x20030800],\n pc2bytes8 = [0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002,0x2040002,0x2000002,0x2040002],\n pc2bytes9 = [0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,0x400,0x10000400,0x408,0x10000408],\n pc2bytes10 = [0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,0x102020,0x102000,0x102020],\n pc2bytes11 = [0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,0x4000200,0x5000200,0x4200000,0x5200000,0x4200200,0x5200200],\n pc2bytes12 = [0,0x1000,0x8000000,0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,0x8081010],\n pc2bytes13 = [0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105];\n\n // how many iterations (1 for des, 3 for triple des)\n // changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys\n var iterations = key.length() > 8 ? 3 : 1;\n\n // stores the return keys\n var keys = [];\n\n // now define the left shifts which need to be done\n var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0];\n\n var n = 0, tmp;\n for(var j = 0; j < iterations; j++) {\n var left = key.getInt32();\n var right = key.getInt32();\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 2) ^ right) & 0x33333333;\n right ^= tmp;\n left ^= (tmp << 2);\n\n tmp = ((right >>> -16) ^ left) & 0x0000ffff;\n left ^= tmp;\n right ^= (tmp << -16);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // right needs to be shifted and OR'd with last four bits of left\n tmp = (left << 8) | ((right >>> 20) & 0x000000f0);\n\n // left needs to be put upside down\n left = ((right << 24) | ((right << 8) & 0xff0000) |\n ((right >>> 8) & 0xff00) | ((right >>> 24) & 0xf0));\n right = tmp;\n\n // now go through and perform these shifts on the left and right keys\n for(var i = 0; i < shifts.length; ++i) {\n //shift the keys either one or two bits to the left\n if(shifts[i]) {\n left = (left << 2) | (left >>> 26);\n right = (right << 2) | (right >>> 26);\n } else {\n left = (left << 1) | (left >>> 27);\n right = (right << 1) | (right >>> 27);\n }\n left &= -0xf;\n right &= -0xf;\n\n // now apply PC-2, in such a way that E is easier when encrypting or\n // decrypting this conversion will look like PC-2 except only the last 6\n // bits of each byte are used rather than 48 consecutive bits and the\n // order of lines will be according to how the S selection functions will\n // be applied: S2, S4, S6, S8, S1, S3, S5, S7\n var lefttmp = (\n pc2bytes0[left >>> 28] | pc2bytes1[(left >>> 24) & 0xf] |\n pc2bytes2[(left >>> 20) & 0xf] | pc2bytes3[(left >>> 16) & 0xf] |\n pc2bytes4[(left >>> 12) & 0xf] | pc2bytes5[(left >>> 8) & 0xf] |\n pc2bytes6[(left >>> 4) & 0xf]);\n var righttmp = (\n pc2bytes7[right >>> 28] | pc2bytes8[(right >>> 24) & 0xf] |\n pc2bytes9[(right >>> 20) & 0xf] | pc2bytes10[(right >>> 16) & 0xf] |\n pc2bytes11[(right >>> 12) & 0xf] | pc2bytes12[(right >>> 8) & 0xf] |\n pc2bytes13[(right >>> 4) & 0xf]);\n tmp = ((righttmp >>> 16) ^ lefttmp) & 0x0000ffff;\n keys[n++] = lefttmp ^ tmp;\n keys[n++] = righttmp ^ (tmp << 16);\n }\n }\n\n return keys;\n}\n\n/**\n * Updates a single block (1 byte) using DES. The update will either\n * encrypt or decrypt the block.\n *\n * @param keys the expanded keys.\n * @param input the input block (an array of 32-bit words).\n * @param output the updated output block.\n * @param decrypt true to decrypt the block, false to encrypt it.\n */\nfunction _updateBlock(keys, input, output, decrypt) {\n // set up loops for single or triple DES\n var iterations = keys.length === 32 ? 3 : 9;\n var looping;\n if(iterations === 3) {\n looping = decrypt ? [30, -2, -2] : [0, 32, 2];\n } else {\n looping = (decrypt ?\n [94, 62, -2, 32, 64, 2, 30, -2, -2] :\n [0, 32, 2, 62, 30, -2, 64, 96, 2]);\n }\n\n var tmp;\n\n var left = input[0];\n var right = input[1];\n\n // first each 64 bit chunk of the message must be permuted according to IP\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n // rotate left 1 bit\n left = ((left << 1) | (left >>> 31));\n right = ((right << 1) | (right >>> 31));\n\n for(var j = 0; j < iterations; j += 3) {\n var endloop = looping[j + 1];\n var loopinc = looping[j + 2];\n\n // now go through and perform the encryption or decryption\n for(var i = looping[j]; i != endloop; i += loopinc) {\n var right1 = right ^ keys[i];\n var right2 = ((right >>> 4) | (right << 28)) ^ keys[i + 1];\n\n // passing these bytes through the S selection functions\n tmp = left;\n left = right;\n right = tmp ^ (\n spfunction2[(right1 >>> 24) & 0x3f] |\n spfunction4[(right1 >>> 16) & 0x3f] |\n spfunction6[(right1 >>> 8) & 0x3f] |\n spfunction8[right1 & 0x3f] |\n spfunction1[(right2 >>> 24) & 0x3f] |\n spfunction3[(right2 >>> 16) & 0x3f] |\n spfunction5[(right2 >>> 8) & 0x3f] |\n spfunction7[right2 & 0x3f]);\n }\n // unreverse left and right\n tmp = left;\n left = right;\n right = tmp;\n }\n\n // rotate right 1 bit\n left = ((left >>> 1) | (left << 31));\n right = ((right >>> 1) | (right << 31));\n\n // now perform IP-1, which is IP in the opposite direction\n tmp = ((left >>> 1) ^ right) & 0x55555555;\n right ^= tmp;\n left ^= (tmp << 1);\n\n tmp = ((right >>> 8) ^ left) & 0x00ff00ff;\n left ^= tmp;\n right ^= (tmp << 8);\n\n tmp = ((right >>> 2) ^ left) & 0x33333333;\n left ^= tmp;\n right ^= (tmp << 2);\n\n tmp = ((left >>> 16) ^ right) & 0x0000ffff;\n right ^= tmp;\n left ^= (tmp << 16);\n\n tmp = ((left >>> 4) ^ right) & 0x0f0f0f0f;\n right ^= tmp;\n left ^= (tmp << 4);\n\n output[0] = left;\n output[1] = right;\n}\n\n/**\n * Deprecated. Instead, use:\n *\n * forge.cipher.createCipher('DES-', key);\n * forge.cipher.createDecipher('DES-', key);\n *\n * Creates a deprecated DES cipher object. This object's mode will default to\n * CBC (cipher-block-chaining).\n *\n * The key may be given as a binary-encoded string of bytes or a byte buffer.\n *\n * @param options the options to use.\n * key the symmetric key to use (64 or 192 bits).\n * output the buffer to write to.\n * decrypt true for decryption, false for encryption.\n * mode the cipher mode to use (default: 'CBC').\n *\n * @return the cipher.\n */\nfunction _createCipher(options) {\n options = options || {};\n var mode = (options.mode || 'CBC').toUpperCase();\n var algorithm = 'DES-' + mode;\n\n var cipher;\n if(options.decrypt) {\n cipher = forge.cipher.createDecipher(algorithm, options.key);\n } else {\n cipher = forge.cipher.createCipher(algorithm, options.key);\n }\n\n // backwards compatible start API\n var start = cipher.start;\n cipher.start = function(iv, options) {\n // backwards compatibility: support second arg as output buffer\n var output = null;\n if(options instanceof forge.util.ByteBuffer) {\n output = options;\n options = {};\n }\n options = options || {};\n options.output = output;\n options.iv = iv;\n start.call(cipher, options);\n };\n\n return cipher;\n}\n","/**\n * JavaScript implementation of Ed25519.\n *\n * Copyright (c) 2017-2019 Digital Bazaar, Inc.\n *\n * This implementation is based on the most excellent TweetNaCl which is\n * in the public domain. Many thanks to its contributors:\n *\n * https://github.com/dchest/tweetnacl-js\n */\nvar forge = require('./forge');\nrequire('./jsbn');\nrequire('./random');\nrequire('./sha512');\nrequire('./util');\nvar asn1Validator = require('./asn1-validator');\nvar publicKeyValidator = asn1Validator.publicKeyValidator;\nvar privateKeyValidator = asn1Validator.privateKeyValidator;\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\nvar ByteBuffer = forge.util.ByteBuffer;\nvar NativeBuffer = typeof Buffer === 'undefined' ? Uint8Array : Buffer;\n\n/*\n * Ed25519 algorithms, see RFC 8032:\n * https://tools.ietf.org/html/rfc8032\n */\nforge.pki = forge.pki || {};\nmodule.exports = forge.pki.ed25519 = forge.ed25519 = forge.ed25519 || {};\nvar ed25519 = forge.ed25519;\n\ned25519.constants = {};\ned25519.constants.PUBLIC_KEY_BYTE_LENGTH = 32;\ned25519.constants.PRIVATE_KEY_BYTE_LENGTH = 64;\ned25519.constants.SEED_BYTE_LENGTH = 32;\ned25519.constants.SIGN_BYTE_LENGTH = 64;\ned25519.constants.HASH_BYTE_LENGTH = 64;\n\ned25519.generateKeyPair = function(options) {\n options = options || {};\n var seed = options.seed;\n if(seed === undefined) {\n // generate seed\n seed = forge.random.getBytesSync(ed25519.constants.SEED_BYTE_LENGTH);\n } else if(typeof seed === 'string') {\n if(seed.length !== ed25519.constants.SEED_BYTE_LENGTH) {\n throw new TypeError(\n '\"seed\" must be ' + ed25519.constants.SEED_BYTE_LENGTH +\n ' bytes in length.');\n }\n } else if(!(seed instanceof Uint8Array)) {\n throw new TypeError(\n '\"seed\" must be a node.js Buffer, Uint8Array, or a binary string.');\n }\n\n seed = messageToNativeBuffer({message: seed, encoding: 'binary'});\n\n var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);\n var sk = new NativeBuffer(ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);\n for(var i = 0; i < 32; ++i) {\n sk[i] = seed[i];\n }\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, privateKey: sk};\n};\n\n/**\n * Converts a private key from a RFC8410 ASN.1 encoding.\n *\n * @param obj - The asn1 representation of a private key.\n *\n * @returns {Object} keyInfo - The key information.\n * @returns {Buffer|Uint8Array} keyInfo.privateKeyBytes - 32 private key bytes.\n */\ned25519.privateKeyFromAsn1 = function(obj) {\n var capture = {};\n var errors = [];\n var valid = forge.asn1.validate(obj, privateKeyValidator, capture, errors);\n if(!valid) {\n var error = new Error('Invalid Key.');\n error.errors = errors;\n throw error;\n }\n var oid = forge.asn1.derToOid(capture.privateKeyOid);\n var ed25519Oid = forge.oids.EdDSA25519;\n if(oid !== ed25519Oid) {\n throw new Error('Invalid OID \"' + oid + '\"; OID must be \"' +\n ed25519Oid + '\".');\n }\n var privateKey = capture.privateKey;\n // manually extract the private key bytes from nested octet string, see FIXME:\n // https://github.com/digitalbazaar/forge/blob/master/lib/asn1.js#L542\n var privateKeyBytes = messageToNativeBuffer({\n message: forge.asn1.fromDer(privateKey).value,\n encoding: 'binary'\n });\n // TODO: RFC8410 specifies a format for encoding the public key bytes along\n // with the private key bytes. `publicKeyBytes` can be returned in the\n // future. https://tools.ietf.org/html/rfc8410#section-10.3\n return {privateKeyBytes: privateKeyBytes};\n};\n\n/**\n * Converts a public key from a RFC8410 ASN.1 encoding.\n *\n * @param obj - The asn1 representation of a public key.\n *\n * @return {Buffer|Uint8Array} - 32 public key bytes.\n */\ned25519.publicKeyFromAsn1 = function(obj) {\n // get SubjectPublicKeyInfo\n var capture = {};\n var errors = [];\n var valid = forge.asn1.validate(obj, publicKeyValidator, capture, errors);\n if(!valid) {\n var error = new Error('Invalid Key.');\n error.errors = errors;\n throw error;\n }\n var oid = forge.asn1.derToOid(capture.publicKeyOid);\n var ed25519Oid = forge.oids.EdDSA25519;\n if(oid !== ed25519Oid) {\n throw new Error('Invalid OID \"' + oid + '\"; OID must be \"' +\n ed25519Oid + '\".');\n }\n var publicKeyBytes = capture.ed25519PublicKey;\n if(publicKeyBytes.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) {\n throw new Error('Key length is invalid.');\n }\n return messageToNativeBuffer({\n message: publicKeyBytes,\n encoding: 'binary'\n });\n};\n\ned25519.publicKeyFromPrivateKey = function(options) {\n options = options || {};\n var privateKey = messageToNativeBuffer({\n message: options.privateKey, encoding: 'binary'\n });\n if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.privateKey\" must have a byte length of ' +\n ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);\n }\n\n var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);\n for(var i = 0; i < pk.length; ++i) {\n pk[i] = privateKey[32 + i];\n }\n return pk;\n};\n\ned25519.sign = function(options) {\n options = options || {};\n var msg = messageToNativeBuffer(options);\n var privateKey = messageToNativeBuffer({\n message: options.privateKey,\n encoding: 'binary'\n });\n if(privateKey.length === ed25519.constants.SEED_BYTE_LENGTH) {\n var keyPair = ed25519.generateKeyPair({seed: privateKey});\n privateKey = keyPair.privateKey;\n } else if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.privateKey\" must have a byte length of ' +\n ed25519.constants.SEED_BYTE_LENGTH + ' or ' +\n ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);\n }\n\n var signedMsg = new NativeBuffer(\n ed25519.constants.SIGN_BYTE_LENGTH + msg.length);\n crypto_sign(signedMsg, msg, msg.length, privateKey);\n\n var sig = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH);\n for(var i = 0; i < sig.length; ++i) {\n sig[i] = signedMsg[i];\n }\n return sig;\n};\n\ned25519.verify = function(options) {\n options = options || {};\n var msg = messageToNativeBuffer(options);\n if(options.signature === undefined) {\n throw new TypeError(\n '\"options.signature\" must be a node.js Buffer, a Uint8Array, a forge ' +\n 'ByteBuffer, or a binary string.');\n }\n var sig = messageToNativeBuffer({\n message: options.signature,\n encoding: 'binary'\n });\n if(sig.length !== ed25519.constants.SIGN_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.signature\" must have a byte length of ' +\n ed25519.constants.SIGN_BYTE_LENGTH);\n }\n var publicKey = messageToNativeBuffer({\n message: options.publicKey,\n encoding: 'binary'\n });\n if(publicKey.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) {\n throw new TypeError(\n '\"options.publicKey\" must have a byte length of ' +\n ed25519.constants.PUBLIC_KEY_BYTE_LENGTH);\n }\n\n var sm = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length);\n var m = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length);\n var i;\n for(i = 0; i < ed25519.constants.SIGN_BYTE_LENGTH; ++i) {\n sm[i] = sig[i];\n }\n for(i = 0; i < msg.length; ++i) {\n sm[i + ed25519.constants.SIGN_BYTE_LENGTH] = msg[i];\n }\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nfunction messageToNativeBuffer(options) {\n var message = options.message;\n if(message instanceof Uint8Array || message instanceof NativeBuffer) {\n return message;\n }\n\n var encoding = options.encoding;\n if(message === undefined) {\n if(options.md) {\n // TODO: more rigorous validation that `md` is a MessageDigest\n message = options.md.digest().getBytes();\n encoding = 'binary';\n } else {\n throw new TypeError('\"options.message\" or \"options.md\" not specified.');\n }\n }\n\n if(typeof message === 'string' && !encoding) {\n throw new TypeError('\"options.encoding\" must be \"binary\" or \"utf8\".');\n }\n\n if(typeof message === 'string') {\n if(typeof Buffer !== 'undefined') {\n return Buffer.from(message, encoding);\n }\n message = new ByteBuffer(message, encoding);\n } else if(!(message instanceof ByteBuffer)) {\n throw new TypeError(\n '\"options.message\" must be a node.js Buffer, a Uint8Array, a forge ' +\n 'ByteBuffer, or a string with \"options.encoding\" specifying its ' +\n 'encoding.');\n }\n\n // convert to native buffer\n var buffer = new NativeBuffer(message.length());\n for(var i = 0; i < buffer.length; ++i) {\n buffer[i] = message.at(i);\n }\n return buffer;\n}\n\nvar gf0 = gf();\nvar gf1 = gf([1]);\nvar D = gf([\n 0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070,\n 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]);\nvar D2 = gf([\n 0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0,\n 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]);\nvar X = gf([\n 0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c,\n 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]);\nvar Y = gf([\n 0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666,\n 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]);\nvar L = new Float64Array([\n 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58,\n 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\nvar I = gf([\n 0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43,\n 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\n// TODO: update forge buffer implementation to use `Buffer` or `Uint8Array`,\n// whichever is available, to improve performance\nfunction sha512(msg, msgLen) {\n // Note: `out` and `msg` are NativeBuffer\n var md = forge.md.sha512.create();\n var buffer = new ByteBuffer(msg);\n md.update(buffer.getBytes(msgLen), 'binary');\n var hash = md.digest().getBytes();\n if(typeof Buffer !== 'undefined') {\n return Buffer.from(hash, 'binary');\n }\n var out = new NativeBuffer(ed25519.constants.HASH_BYTE_LENGTH);\n for(var i = 0; i < 64; ++i) {\n out[i] = hash.charCodeAt(i);\n }\n return out;\n}\n\nfunction crypto_sign_keypair(pk, sk) {\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n var d = sha512(sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for(i = 0; i < 32; ++i) {\n sk[i + 32] = pk[i];\n }\n return 0;\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n var d = sha512(sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for(i = 0; i < n; ++i) {\n sm[64 + i] = m[i];\n }\n for(i = 0; i < 32; ++i) {\n sm[32 + i] = d[32 + i];\n }\n\n var r = sha512(sm.subarray(32), n + 32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for(i = 32; i < 64; ++i) {\n sm[i] = sk[i];\n }\n var h = sha512(sm, n + 64);\n reduce(h);\n\n for(i = 32; i < 64; ++i) {\n x[i] = 0;\n }\n for(i = 0; i < 32; ++i) {\n x[i] = r[i];\n }\n for(i = 0; i < 32; ++i) {\n for(j = 0; j < 32; j++) {\n x[i + j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i, mlen;\n var t = new NativeBuffer(32);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n mlen = -1;\n if(n < 64) {\n return -1;\n }\n\n if(unpackneg(q, pk)) {\n return -1;\n }\n\n for(i = 0; i < n; ++i) {\n m[i] = sm[i];\n }\n for(i = 0; i < 32; ++i) {\n m[i + 32] = pk[i];\n }\n var h = sha512(m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if(crypto_verify_32(sm, 0, t, 0)) {\n for(i = 0; i < n; ++i) {\n m[i] = 0;\n }\n return -1;\n }\n\n for(i = 0; i < n; ++i) {\n m[i] = sm[i + 64];\n }\n mlen = n;\n return mlen;\n}\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for(i = 63; i >= 32; --i) {\n carry = 0;\n for(j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = (x[j] + 128) >> 8;\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for(j = 0; j < 32; ++j) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for(j = 0; j < 32; ++j) {\n x[j] -= carry * L[j];\n }\n for(i = 0; i < 32; ++i) {\n x[i + 1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64);\n for(var i = 0; i < 64; ++i) {\n x[i] = r[i];\n r[i] = 0;\n }\n modL(r, x);\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n for(var i = 0; i < 4; ++i) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for(i = 0; i < 16; ++i) {\n t[i] = n[i];\n }\n car25519(t);\n car25519(t);\n car25519(t);\n for(j = 0; j < 2; ++j) {\n m[0] = t[0] - 0xffed;\n for(i = 1; i < 15; ++i) {\n m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);\n b = (m[15] >> 16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1 - b);\n }\n for (i = 0; i < 16; i++) {\n o[2 * i] = t[i] & 0xff;\n o[2 * i + 1] = t[i] >> 8;\n }\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if(neq25519(chk, num)) {\n M(r[0], r[0], I);\n }\n\n S(chk, r[0]);\n M(chk, chk, den);\n if(neq25519(chk, num)) {\n return -1;\n }\n\n if(par25519(r[0]) === (p[31] >> 7)) {\n Z(r[0], gf0, r[0]);\n }\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for(i = 0; i < 16; ++i) {\n o[i] = n[2 * i] + (n[2 * i + 1] << 8);\n }\n o[15] &= 0x7fff;\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for(a = 0; a < 16; ++a) {\n c[a] = i[a];\n }\n for(a = 250; a >= 0; --a) {\n S(c, c);\n if(a !== 1) {\n M(c, c, i);\n }\n }\n for(a = 0; a < 16; ++a) {\n o[a] = c[a];\n }\n}\n\nfunction neq25519(a, b) {\n var c = new NativeBuffer(32);\n var d = new NativeBuffer(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x, xi, y, yi, 32);\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i, d = 0;\n for(i = 0; i < n; ++i) {\n d |= x[xi + i] ^ y[yi + i];\n }\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction par25519(a) {\n var d = new NativeBuffer(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for(i = 255; i >= 0; --i) {\n b = (s[(i / 8)|0] >> (i & 7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction set25519(r, a) {\n var i;\n for(i = 0; i < 16; i++) {\n r[i] = a[i] | 0;\n }\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for(a = 0; a < 16; ++a) {\n c[a] = i[a];\n }\n for(a = 253; a >= 0; --a) {\n S(c, c);\n if(a !== 2 && a !== 4) {\n M(c, c, i);\n }\n }\n for(a = 0; a < 16; ++a) {\n o[a] = c[a];\n }\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for(i = 0; i < 16; ++i) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c - 1 + 37 * (c - 1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b - 1);\n for(var i = 0; i < 16; ++i) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction gf(init) {\n var i, r = new Float64Array(16);\n if(init) {\n for(i = 0; i < init.length; ++i) {\n r[i] = init[i];\n }\n }\n return r;\n}\n\nfunction A(o, a, b) {\n for(var i = 0; i < 16; ++i) {\n o[i] = a[i] + b[i];\n }\n}\n\nfunction Z(o, a, b) {\n for(var i = 0; i < 16; ++i) {\n o[i] = a[i] - b[i];\n }\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n","/**\n * Node.js module for Forge.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2016 Digital Bazaar, Inc.\n */\nmodule.exports = {\n // default options\n options: {\n usePureJavaScript: false\n }\n};\n","/**\n * Hash-based Message Authentication Code implementation. Requires a message\n * digest object that can be obtained, for example, from forge.md.sha1 or\n * forge.md.md5.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2012 Digital Bazaar, Inc. All rights reserved.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\n/* HMAC API */\nvar hmac = module.exports = forge.hmac = forge.hmac || {};\n\n/**\n * Creates an HMAC object that uses the given message digest object.\n *\n * @return an HMAC object.\n */\nhmac.create = function() {\n // the hmac key to use\n var _key = null;\n\n // the message digest to use\n var _md = null;\n\n // the inner padding\n var _ipadding = null;\n\n // the outer padding\n var _opadding = null;\n\n // hmac context\n var ctx = {};\n\n /**\n * Starts or restarts the HMAC with the given key and message digest.\n *\n * @param md the message digest to use, null to reuse the previous one,\n * a string to use builtin 'sha1', 'md5', 'sha256'.\n * @param key the key to use as a string, array of bytes, byte buffer,\n * or null to reuse the previous key.\n */\n ctx.start = function(md, key) {\n if(md !== null) {\n if(typeof md === 'string') {\n // create builtin message digest\n md = md.toLowerCase();\n if(md in forge.md.algorithms) {\n _md = forge.md.algorithms[md].create();\n } else {\n throw new Error('Unknown hash algorithm \"' + md + '\"');\n }\n } else {\n // store message digest\n _md = md;\n }\n }\n\n if(key === null) {\n // reuse previous key\n key = _key;\n } else {\n if(typeof key === 'string') {\n // convert string into byte buffer\n key = forge.util.createBuffer(key);\n } else if(forge.util.isArray(key)) {\n // convert byte array into byte buffer\n var tmp = key;\n key = forge.util.createBuffer();\n for(var i = 0; i < tmp.length; ++i) {\n key.putByte(tmp[i]);\n }\n }\n\n // if key is longer than blocksize, hash it\n var keylen = key.length();\n if(keylen > _md.blockLength) {\n _md.start();\n _md.update(key.bytes());\n key = _md.digest();\n }\n\n // mix key into inner and outer padding\n // ipadding = [0x36 * blocksize] ^ key\n // opadding = [0x5C * blocksize] ^ key\n _ipadding = forge.util.createBuffer();\n _opadding = forge.util.createBuffer();\n keylen = key.length();\n for(var i = 0; i < keylen; ++i) {\n var tmp = key.at(i);\n _ipadding.putByte(0x36 ^ tmp);\n _opadding.putByte(0x5C ^ tmp);\n }\n\n // if key is shorter than blocksize, add additional padding\n if(keylen < _md.blockLength) {\n var tmp = _md.blockLength - keylen;\n for(var i = 0; i < tmp; ++i) {\n _ipadding.putByte(0x36);\n _opadding.putByte(0x5C);\n }\n }\n _key = key;\n _ipadding = _ipadding.bytes();\n _opadding = _opadding.bytes();\n }\n\n // digest is done like so: hash(opadding | hash(ipadding | message))\n\n // prepare to do inner hash\n // hash(ipadding | message)\n _md.start();\n _md.update(_ipadding);\n };\n\n /**\n * Updates the HMAC with the given message bytes.\n *\n * @param bytes the bytes to update with.\n */\n ctx.update = function(bytes) {\n _md.update(bytes);\n };\n\n /**\n * Produces the Message Authentication Code (MAC).\n *\n * @return a byte buffer containing the digest value.\n */\n ctx.getMac = function() {\n // digest is done like so: hash(opadding | hash(ipadding | message))\n // here we do the outer hashing\n var inner = _md.digest().bytes();\n _md.start();\n _md.update(_opadding);\n _md.update(inner);\n return _md.digest();\n };\n // alias for getMac\n ctx.digest = ctx.getMac;\n\n return ctx;\n};\n","/**\n * Node.js module for Forge.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2016 Digital Bazaar, Inc.\n */\nmodule.exports = require('./forge');\nrequire('./aes');\nrequire('./aesCipherSuites');\nrequire('./asn1');\nrequire('./cipher');\nrequire('./des');\nrequire('./ed25519');\nrequire('./hmac');\nrequire('./kem');\nrequire('./log');\nrequire('./md.all');\nrequire('./mgf1');\nrequire('./pbkdf2');\nrequire('./pem');\nrequire('./pkcs1');\nrequire('./pkcs12');\nrequire('./pkcs7');\nrequire('./pki');\nrequire('./prime');\nrequire('./prng');\nrequire('./pss');\nrequire('./random');\nrequire('./rc2');\nrequire('./ssh');\nrequire('./tls');\nrequire('./util');\n","// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n/*\nLicensing (LICENSE)\n-------------------\n\nThis software is covered under the following copyright:\n*/\n/*\n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n/*\nAddress all questions regarding this license to:\n\n Tom Wu\n tjw@cs.Stanford.EDU\n*/\nvar forge = require('./forge');\n\nmodule.exports = forge.jsbn = forge.jsbn || {};\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary&0xffffff)==0xefcafe);\n\n// (public) Constructor\nfunction BigInteger(a,b,c) {\n this.data = [];\n if(a != null)\n if(\"number\" == typeof a) this.fromNumber(a,b,c);\n else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n else this.fromString(a,b);\n}\nforge.jsbn.BigInteger = BigInteger;\n\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this.data[i++]+w.data[j]+c;\n c = Math.floor(v/0x4000000);\n w.data[j++] = v&0x3ffffff;\n }\n return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this.data[i]&0x7fff;\n var h = this.data[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w.data[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w.data[j++] = l&0x3fffffff;\n }\n return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this.data[i]&0x3fff;\n var h = this.data[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w.data[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w.data[j++] = l&0xfffffff;\n }\n return c;\n}\n\n// node.js (no browser)\nif(typeof(navigator) === 'undefined')\n{\n BigInteger.prototype.am = am3;\n dbits = 28;\n} else if(j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if(j_lm && (navigator.appName != \"Netscape\")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1<= 0; --i) r.data[i] = this.data[i];\n r.t = this.t;\n r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this.data[0] = x;\n else if(x < -1) this.data[0] = x+this.DV;\n else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n// (protected) set from string and radix\nfunction bnpFromString(s,b) {\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 256) k = 8; // byte array\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else { this.fromRadix(s,b); return; }\n this.t = 0;\n this.s = 0;\n var i = s.length, mi = false, sh = 0;\n while(--i >= 0) {\n var x = (k==8)?s[i]&0xff:intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if(sh == 0)\n this.data[this.t++] = x;\n else if(sh+k > this.DB) {\n this.data[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh));\n } else\n this.data[this.t-1] |= x<= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this.data[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this.data[this.t-1] == c) --this.t;\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n if(this.s < 0) return \"-\"+this.negate().toString(b);\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1< 0) {\n if(p < this.DB && (d = this.data[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this.data[i]&((1<>(p+=this.DB-k);\n } else {\n d = (this.data[i]>>(p-=k))&km;\n if(p <= 0) { p += this.DB; --i; }\n }\n if(d > 0) m = true;\n if(m) r += int2char(d);\n }\n }\n return m?r:\"0\";\n}\n\n// (public) -this\nfunction bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n// (public) |this|\nfunction bnAbs() { return (this.s<0)?this.negate():this; }\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n var r = this.s-a.s;\n if(r != 0) return r;\n var i = this.t;\n r = i-a.t;\n if(r != 0) return (this.s<0)?-r:r;\n while(--i >= 0) if((r=this.data[i]-a.data[i]) != 0) return r;\n return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1, t;\n if((t=x>>>16) != 0) { x = t; r += 16; }\n if((t=x>>8) != 0) { x = t; r += 8; }\n if((t=x>>4) != 0) { x = t; r += 4; }\n if((t=x>>2) != 0) { x = t; r += 2; }\n if((t=x>>1) != 0) { x = t; r += 1; }\n return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this.data[this.t-1]^(this.s&this.DM));\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r.data[i+n] = this.data[i];\n for(i = n-1; i >= 0; --i) r.data[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r.data[i-n] = this.data[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<= 0; --i) {\n r.data[i+ds+1] = (this.data[i]>>cbs)|c;\n c = (this.data[i]&bm)<= 0; --i) r.data[i] = 0;\n r.data[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n,r) {\n r.s = this.s;\n var ds = Math.floor(n/this.DB);\n if(ds >= this.t) { r.t = 0; return; }\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r.data[i-ds-1] |= (this.data[i]&bm)<>bs;\n }\n if(bs > 0) r.data[this.t-ds-1] |= (this.s&bm)<>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while(i < a.t) {\n c -= a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c<0)?-1:0;\n if(c < -1) r.data[i++] = this.DV+c;\n else if(c > 0) r.data[i++] = c;\n r.t = i;\n r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a,r) {\n var x = this.abs(), y = a.abs();\n var i = x.t;\n r.t = i+y.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < y.t; ++i) r.data[i+x.t] = x.am(0,y.data[i],r,i,0,x.t);\n r.s = 0;\n r.clamp();\n if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r.data[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x.data[i],r,2*i,0,1);\n if((r.data[i+x.t]+=x.am(i+1,2*x.data[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r.data[i+x.t] -= x.DV;\n r.data[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r.data[r.t-1] += x.am(i,x.data[i],r,2*i,0,1);\n r.s = 0;\n r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\nfunction bnpDivRemTo(m,q,r) {\n var pm = m.abs();\n if(pm.t <= 0) return;\n var pt = this.abs();\n if(pt.t < pm.t) {\n if(q != null) q.fromInt(0);\n if(r != null) this.copyTo(r);\n return;\n }\n if(r == null) r = nbi();\n var y = nbi(), ts = this.s, ms = m.s;\n var nsh = this.DB-nbits(pm.data[pm.t-1]);\t// normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y.data[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<1)?y.data[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<= 0) {\n r.data[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y);\t// \"negative\" y so we can replace sub with am later\n while(y.t < ys) y.data[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r.data[--i]==y0)?this.DM:Math.floor(r.data[i]*d1+(r.data[i-1]+e)*d2);\n if((r.data[i]+=y.am(0,qd,r,j,0,ys)) < qd) {\t// Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r.data[i] < --qd) r.subTo(t,r);\n }\n }\n if(q != null) {\n r.drShiftTo(ys,q);\n if(ts != ms) BigInteger.ZERO.subTo(q,q);\n }\n r.t = ys;\n r.clamp();\n if(nsh > 0) r.rShiftTo(nsh,r);\t// Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a,null,r);\n if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n return r;\n}\n\n// Modular reduction using \"classic\" algorithm\nfunction Classic(m) { this.m = m; }\nfunction cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n}\nfunction cRevert(x) { return x; }\nfunction cReduce(x) { x.divRemTo(this.m,null,x); }\nfunction cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\nfunction cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this.data[0];\n if((x&1) == 0) return 0;\n var y = x&3;\t\t// y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf;\t// y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff;\t// y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;\t// y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y*(2-x*y%this.DV))%this.DV;\t\t// y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y>0)?this.DV-y:-y;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp&0x7fff;\n this.mph = this.mp>>15;\n this.um = (1<<(m.DB-15))-1;\n this.mt2 = 2*m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t,r);\n r.divRemTo(this.m,null,r);\n if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n while(x.t <= this.mt2)\t// pad x so am has enough room later\n x.data[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x.data[i]*mp mod DV\n var j = x.data[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x.data[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i+this.m.t;\n x.data[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x.data[j] >= x.DV) { x.data[j] -= x.DV; x.data[++j]++; }\n }\n x.clamp();\n x.drShiftTo(this.m.t,x);\n if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (protected) true iff this is even\nfunction bnpIsEven() { return ((this.t>0)?(this.data[0]&1):this.s) == 0; }\n\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\nfunction bnpExp(e,z) {\n if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n g.copyTo(r);\n while(--i >= 0) {\n z.sqrTo(r,r2);\n if((e&(1< 0) z.mulTo(r2,g,r);\n else { var t = r; r = r2; r2 = t; }\n }\n return z.revert(r);\n}\n\n// (public) this^e % m, 0 <= e < 2^32\nfunction bnModPowInt(e,m) {\n var z;\n if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n return this.exp(e,z);\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n// jsbn2 lib\n\n//Copyright (c) 2005-2009 Tom Wu\n//All Rights Reserved.\n//See \"LICENSE\" for details (See jsbn.js for LICENSE).\n\n//Extended JavaScript BN functions, required for RSA private ops.\n\n//Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n\n//(public)\nfunction bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n//(public) return value as integer\nfunction bnIntValue() {\nif(this.s < 0) {\n if(this.t == 1) return this.data[0]-this.DV;\n else if(this.t == 0) return -1;\n} else if(this.t == 1) return this.data[0];\nelse if(this.t == 0) return 0;\n// assumes 16 < DB < 32\nreturn ((this.data[1]&((1<<(32-this.DB))-1))<>24; }\n\n//(public) return value as short (assumes DB>=16)\nfunction bnShortValue() { return (this.t==0)?this.s:(this.data[0]<<16)>>16; }\n\n//(protected) return x s.t. r^x < DV\nfunction bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n//(public) 0 if this == 0, 1 if this > 0\nfunction bnSigNum() {\nif(this.s < 0) return -1;\nelse if(this.t <= 0 || (this.t == 1 && this.data[0] <= 0)) return 0;\nelse return 1;\n}\n\n//(protected) convert to radix string\nfunction bnpToRadix(b) {\nif(b == null) b = 10;\nif(this.signum() == 0 || b < 2 || b > 36) return \"0\";\nvar cs = this.chunkSize(b);\nvar a = Math.pow(b,cs);\nvar d = nbv(a), y = nbi(), z = nbi(), r = \"\";\nthis.divRemTo(d,y,z);\nwhile(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n}\nreturn z.intValue().toString(b) + r;\n}\n\n//(protected) convert from radix string\nfunction bnpFromRadix(s,b) {\nthis.fromInt(0);\nif(b == null) b = 10;\nvar cs = this.chunkSize(b);\nvar d = Math.pow(b,cs), mi = false, j = 0, w = 0;\nfor(var i = 0; i < s.length; ++i) {\n var x = intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n continue;\n }\n w = b*w+x;\n if(++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w,0);\n j = 0;\n w = 0;\n }\n}\nif(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n}\nif(mi) BigInteger.ZERO.subTo(this,this);\n}\n\n//(protected) alternate constructor\nfunction bnpFromNumber(a,b,c) {\nif(\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if(a < 2) this.fromInt(1);\n else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1)) // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n if(this.isEven()) this.dAddOffset(1,0); // force odd\n while(!this.isProbablePrime(b)) {\n this.dAddOffset(2,0);\n if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n }\n }\n} else {\n // new BigInteger(int,RNG)\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1< 0) {\n if(p < this.DB && (d = this.data[i]>>p) != (this.s&this.DM)>>p)\n r[k++] = d|(this.s<<(this.DB-p));\n while(i >= 0) {\n if(p < 8) {\n d = (this.data[i]&((1<>(p+=this.DB-8);\n } else {\n d = (this.data[i]>>(p-=8))&0xff;\n if(p <= 0) { p += this.DB; --i; }\n }\n if((d&0x80) != 0) d |= -256;\n if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n if(k > 0 || d != this.s) r[k++] = d;\n }\n}\nreturn r;\n}\n\nfunction bnEquals(a) { return(this.compareTo(a)==0); }\nfunction bnMin(a) { return(this.compareTo(a)<0)?this:a; }\nfunction bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n//(protected) r = this op a (bitwise)\nfunction bnpBitwiseTo(a,op,r) {\nvar i, f, m = Math.min(a.t,this.t);\nfor(i = 0; i < m; ++i) r.data[i] = op(this.data[i],a.data[i]);\nif(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r.data[i] = op(this.data[i],f);\n r.t = this.t;\n} else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r.data[i] = op(f,a.data[i]);\n r.t = a.t;\n}\nr.s = op(this.s,a.s);\nr.clamp();\n}\n\n//(public) this & a\nfunction op_and(x,y) { return x&y; }\nfunction bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n//(public) this | a\nfunction op_or(x,y) { return x|y; }\nfunction bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n//(public) this ^ a\nfunction op_xor(x,y) { return x^y; }\nfunction bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n//(public) this & ~a\nfunction op_andnot(x,y) { return x&~y; }\nfunction bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n//(public) ~this\nfunction bnNot() {\nvar r = nbi();\nfor(var i = 0; i < this.t; ++i) r.data[i] = this.DM&~this.data[i];\nr.t = this.t;\nr.s = ~this.s;\nreturn r;\n}\n\n//(public) this << n\nfunction bnShiftLeft(n) {\nvar r = nbi();\nif(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\nreturn r;\n}\n\n//(public) this >> n\nfunction bnShiftRight(n) {\nvar r = nbi();\nif(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\nreturn r;\n}\n\n//return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\nif(x == 0) return -1;\nvar r = 0;\nif((x&0xffff) == 0) { x >>= 16; r += 16; }\nif((x&0xff) == 0) { x >>= 8; r += 8; }\nif((x&0xf) == 0) { x >>= 4; r += 4; }\nif((x&3) == 0) { x >>= 2; r += 2; }\nif((x&1) == 0) ++r;\nreturn r;\n}\n\n//(public) returns index of lowest 1-bit (or -1 if none)\nfunction bnGetLowestSetBit() {\nfor(var i = 0; i < this.t; ++i)\n if(this.data[i] != 0) return i*this.DB+lbit(this.data[i]);\nif(this.s < 0) return this.t*this.DB;\nreturn -1;\n}\n\n//return number of 1 bits in x\nfunction cbit(x) {\nvar r = 0;\nwhile(x != 0) { x &= x-1; ++r; }\nreturn r;\n}\n\n//(public) return number of set bits\nfunction bnBitCount() {\nvar r = 0, x = this.s&this.DM;\nfor(var i = 0; i < this.t; ++i) r += cbit(this.data[i]^x);\nreturn r;\n}\n\n//(public) true iff nth bit is set\nfunction bnTestBit(n) {\nvar j = Math.floor(n/this.DB);\nif(j >= this.t) return(this.s!=0);\nreturn((this.data[j]&(1<<(n%this.DB)))!=0);\n}\n\n//(protected) this op (1<>= this.DB;\n}\nif(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n} else {\n c += this.s;\n while(i < a.t) {\n c += a.data[i];\n r.data[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n}\nr.s = (c<0)?-1:0;\nif(c > 0) r.data[i++] = c;\nelse if(c < -1) r.data[i++] = this.DV+c;\nr.t = i;\nr.clamp();\n}\n\n//(public) this + a\nfunction bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n//(public) this - a\nfunction bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n//(public) this * a\nfunction bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n//(public) this / a\nfunction bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n//(public) this % a\nfunction bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n//(public) [this/a,this%a]\nfunction bnDivideAndRemainder(a) {\nvar q = nbi(), r = nbi();\nthis.divRemTo(a,q,r);\nreturn new Array(q,r);\n}\n\n//(protected) this *= n, this >= 0, 1 < n < DV\nfunction bnpDMultiply(n) {\nthis.data[this.t] = this.am(0,n-1,this,0,0,this.t);\n++this.t;\nthis.clamp();\n}\n\n//(protected) this += n << w words, this >= 0\nfunction bnpDAddOffset(n,w) {\nif(n == 0) return;\nwhile(this.t <= w) this.data[this.t++] = 0;\nthis.data[w] += n;\nwhile(this.data[w] >= this.DV) {\n this.data[w] -= this.DV;\n if(++w >= this.t) this.data[this.t++] = 0;\n ++this.data[w];\n}\n}\n\n//A \"null\" reducer\nfunction NullExp() {}\nfunction nNop(x) { return x; }\nfunction nMulTo(x,y,r) { x.multiplyTo(y,r); }\nfunction nSqrTo(x,r) { x.squareTo(r); }\n\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\n\n//(public) this^e\nfunction bnPow(e) { return this.exp(e,new NullExp()); }\n\n//(protected) r = lower n words of \"this * a\", a.t <= n\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyLowerTo(a,n,r) {\nvar i = Math.min(this.t+a.t,n);\nr.s = 0; // assumes a,this >= 0\nr.t = i;\nwhile(i > 0) r.data[--i] = 0;\nvar j;\nfor(j = r.t-this.t; i < j; ++i) r.data[i+this.t] = this.am(0,a.data[i],r,i,0,this.t);\nfor(j = Math.min(a.t,n); i < j; ++i) this.am(0,a.data[i],r,i,0,n-i);\nr.clamp();\n}\n\n//(protected) r = \"this * a\" without lower n words, n > 0\n//\"this\" should be the larger one if appropriate.\nfunction bnpMultiplyUpperTo(a,n,r) {\n--n;\nvar i = r.t = this.t+a.t-n;\nr.s = 0; // assumes a,this >= 0\nwhile(--i >= 0) r.data[i] = 0;\nfor(i = Math.max(n-this.t,0); i < a.t; ++i)\n r.data[this.t+i-n] = this.am(n-i,a.data[i],r,0,0,this.t+i-n);\nr.clamp();\nr.drShiftTo(1,r);\n}\n\n//Barrett modular reduction\nfunction Barrett(m) {\n// setup Barrett\nthis.r2 = nbi();\nthis.q3 = nbi();\nBigInteger.ONE.dlShiftTo(2*m.t,this.r2);\nthis.mu = this.r2.divide(m);\nthis.m = m;\n}\n\nfunction barrettConvert(x) {\nif(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\nelse if(x.compareTo(this.m) < 0) return x;\nelse { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n}\n\nfunction barrettRevert(x) { return x; }\n\n//x = x mod m (HAC 14.42)\nfunction barrettReduce(x) {\nx.drShiftTo(this.m.t-1,this.r2);\nif(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\nthis.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\nthis.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\nwhile(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\nx.subTo(this.r2,x);\nwhile(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n//r = x^2 mod m; x != r\nfunction barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n//r = x*y mod m; x,y != r\nfunction barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\n\n//(public) this^e % m (HAC 14.85)\nfunction bnModPow(e,m) {\nvar i = e.bitLength(), k, r = nbv(1), z;\nif(i <= 0) return r;\nelse if(i < 18) k = 1;\nelse if(i < 48) k = 3;\nelse if(i < 144) k = 4;\nelse if(i < 768) k = 5;\nelse k = 6;\nif(i < 8)\n z = new Classic(m);\nelse if(m.isEven())\n z = new Barrett(m);\nelse\n z = new Montgomery(m);\n\n// precomputation\nvar g = new Array(), n = 3, k1 = k-1, km = (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1],g2);\n while(n <= km) {\n g[n] = nbi();\n z.mulTo(g2,g[n-2],g[n]);\n n += 2;\n }\n}\n\nvar j = e.t-1, w, is1 = true, r2 = nbi(), t;\ni = nbits(e.data[j])-1;\nwhile(j >= 0) {\n if(i >= k1) w = (e.data[j]>>(i-k1))&km;\n else {\n w = (e.data[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e.data[j-1]>>(this.DB+i-k1);\n }\n\n n = k;\n while((w&1) == 0) { w >>= 1; --n; }\n if((i -= n) < 0) { i += this.DB; --j; }\n if(is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n z.mulTo(r2,g[w],r);\n }\n\n while(j >= 0 && (e.data[j]&(1< 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n}\nwhile(x.signum() > 0) {\n if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n if(x.compareTo(y) >= 0) {\n x.subTo(y,x);\n x.rShiftTo(1,x);\n } else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n}\nif(g > 0) y.lShiftTo(g,y);\nreturn y;\n}\n\n//(protected) this % n, n < 2^26\nfunction bnpModInt(n) {\nif(n <= 0) return 0;\nvar d = this.DV%n, r = (this.s<0)?n-1:0;\nif(this.t > 0)\n if(d == 0) r = this.data[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this.data[i])%n;\nreturn r;\n}\n\n//(public) 1/this % m (HAC 14.61)\nfunction bnModInverse(m) {\nvar ac = m.isEven();\nif((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\nvar u = m.clone(), v = this.clone();\nvar a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\nwhile(u.signum() != 0) {\n while(u.isEven()) {\n u.rShiftTo(1,u);\n if(ac) {\n if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n a.rShiftTo(1,a);\n } else if(!b.isEven()) b.subTo(m,b);\n b.rShiftTo(1,b);\n }\n while(v.isEven()) {\n v.rShiftTo(1,v);\n if(ac) {\n if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n c.rShiftTo(1,c);\n } else if(!d.isEven()) d.subTo(m,d);\n d.rShiftTo(1,d);\n }\n if(u.compareTo(v) >= 0) {\n u.subTo(v,u);\n if(ac) a.subTo(c,a);\n b.subTo(d,b);\n } else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n}\nif(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\nif(d.compareTo(m) >= 0) return d.subtract(m);\nif(d.signum() < 0) d.addTo(m,d); else return d;\nif(d.signum() < 0) return d.add(m); else return d;\n}\n\nvar lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];\nvar lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n//(public) test primality with certainty >= 1-.5^t\nfunction bnIsProbablePrime(t) {\nvar i, x = this.abs();\nif(x.t == 1 && x.data[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x.data[0] == lowprimes[i]) return true;\n return false;\n}\nif(x.isEven()) return false;\ni = 1;\nwhile(i < lowprimes.length) {\n var m = lowprimes[i], j = i+1;\n while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while(i < j) if(m%lowprimes[i++] == 0) return false;\n}\nreturn x.millerRabin(t);\n}\n\n//(protected) true if probably prime (HAC 4.24, Miller-Rabin)\nfunction bnpMillerRabin(t) {\nvar n1 = this.subtract(BigInteger.ONE);\nvar k = n1.getLowestSetBit();\nif(k <= 0) return false;\nvar r = n1.shiftRight(k);\nvar prng = bnGetPrng();\nvar a;\nfor(var i = 0; i < t; ++i) {\n // select witness 'a' at random from between 1 and n1\n do {\n a = new BigInteger(this.bitLength(), prng);\n }\n while(a.compareTo(BigInteger.ONE) <= 0 || a.compareTo(n1) >= 0);\n var y = a.modPow(r,this);\n if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while(j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2,this);\n if(y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if(y.compareTo(n1) != 0) return false;\n }\n}\nreturn true;\n}\n\n// get pseudo random number generator\nfunction bnGetPrng() {\n // create prng with api that matches BigInteger secure random\n return {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n for(var i = 0; i < x.length; ++i) {\n x[i] = Math.floor(Math.random() * 0x0100);\n }\n }\n };\n}\n\n//protected\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\n\n//public\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n//BigInteger interfaces not implemented in jsbn:\n\n//BigInteger(int signum, byte[] magnitude)\n//double doubleValue()\n//float floatValue()\n//int hashCode()\n//long longValue()\n//static BigInteger valueOf(long val)\n","/**\n * Javascript implementation of RSA-KEM.\n *\n * @author Lautaro Cozzani Rodriguez\n * @author Dave Longley\n *\n * Copyright (c) 2014 Lautaro Cozzani \n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./random');\nrequire('./jsbn');\n\nmodule.exports = forge.kem = forge.kem || {};\n\nvar BigInteger = forge.jsbn.BigInteger;\n\n/**\n * The API for the RSA Key Encapsulation Mechanism (RSA-KEM) from ISO 18033-2.\n */\nforge.kem.rsa = {};\n\n/**\n * Creates an RSA KEM API object for generating a secret asymmetric key.\n *\n * The symmetric key may be generated via a call to 'encrypt', which will\n * produce a ciphertext to be transmitted to the recipient and a key to be\n * kept secret. The ciphertext is a parameter to be passed to 'decrypt' which\n * will produce the same secret key for the recipient to use to decrypt a\n * message that was encrypted with the secret key.\n *\n * @param kdf the KDF API to use (eg: new forge.kem.kdf1()).\n * @param options the options to use.\n * [prng] a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n */\nforge.kem.rsa.create = function(kdf, options) {\n options = options || {};\n var prng = options.prng || forge.random;\n\n var kem = {};\n\n /**\n * Generates a secret key and its encapsulation.\n *\n * @param publicKey the RSA public key to encrypt with.\n * @param keyLength the length, in bytes, of the secret key to generate.\n *\n * @return an object with:\n * encapsulation: the ciphertext for generating the secret key, as a\n * binary-encoded string of bytes.\n * key: the secret key to use for encrypting a message.\n */\n kem.encrypt = function(publicKey, keyLength) {\n // generate a random r where 1 < r < n\n var byteLength = Math.ceil(publicKey.n.bitLength() / 8);\n var r;\n do {\n r = new BigInteger(\n forge.util.bytesToHex(prng.getBytesSync(byteLength)),\n 16).mod(publicKey.n);\n } while(r.compareTo(BigInteger.ONE) <= 0);\n\n // prepend r with zeros\n r = forge.util.hexToBytes(r.toString(16));\n var zeros = byteLength - r.length;\n if(zeros > 0) {\n r = forge.util.fillString(String.fromCharCode(0), zeros) + r;\n }\n\n // encrypt the random\n var encapsulation = publicKey.encrypt(r, 'NONE');\n\n // generate the secret key\n var key = kdf.generate(r, keyLength);\n\n return {encapsulation: encapsulation, key: key};\n };\n\n /**\n * Decrypts an encapsulated secret key.\n *\n * @param privateKey the RSA private key to decrypt with.\n * @param encapsulation the ciphertext for generating the secret key, as\n * a binary-encoded string of bytes.\n * @param keyLength the length, in bytes, of the secret key to generate.\n *\n * @return the secret key as a binary-encoded string of bytes.\n */\n kem.decrypt = function(privateKey, encapsulation, keyLength) {\n // decrypt the encapsulation and generate the secret key\n var r = privateKey.decrypt(encapsulation, 'NONE');\n return kdf.generate(r, keyLength);\n };\n\n return kem;\n};\n\n// TODO: add forge.kem.kdf.create('KDF1', {md: ..., ...}) API?\n\n/**\n * Creates a key derivation API object that implements KDF1 per ISO 18033-2.\n *\n * @param md the hash API to use.\n * @param [digestLength] an optional digest length that must be positive and\n * less than or equal to md.digestLength.\n *\n * @return a KDF1 API object.\n */\nforge.kem.kdf1 = function(md, digestLength) {\n _createKDF(this, md, 0, digestLength || md.digestLength);\n};\n\n/**\n * Creates a key derivation API object that implements KDF2 per ISO 18033-2.\n *\n * @param md the hash API to use.\n * @param [digestLength] an optional digest length that must be positive and\n * less than or equal to md.digestLength.\n *\n * @return a KDF2 API object.\n */\nforge.kem.kdf2 = function(md, digestLength) {\n _createKDF(this, md, 1, digestLength || md.digestLength);\n};\n\n/**\n * Creates a KDF1 or KDF2 API object.\n *\n * @param md the hash API to use.\n * @param counterStart the starting index for the counter.\n * @param digestLength the digest length to use.\n *\n * @return the KDF API object.\n */\nfunction _createKDF(kdf, md, counterStart, digestLength) {\n /**\n * Generate a key of the specified length.\n *\n * @param x the binary-encoded byte string to generate a key from.\n * @param length the number of bytes to generate (the size of the key).\n *\n * @return the key as a binary-encoded string.\n */\n kdf.generate = function(x, length) {\n var key = new forge.util.ByteBuffer();\n\n // run counter from counterStart to ceil(length / Hash.len)\n var k = Math.ceil(length / digestLength) + counterStart;\n\n var c = new forge.util.ByteBuffer();\n for(var i = counterStart; i < k; ++i) {\n // I2OSP(i, 4): convert counter to an octet string of 4 octets\n c.putInt32(i);\n\n // digest 'x' and the counter and add the result to the key\n md.start();\n md.update(x + c.getBytes());\n var hash = md.digest();\n key.putBytes(hash.getBytes(digestLength));\n }\n\n // truncate to the correct key length\n key.truncate(key.length() - length);\n return key.getBytes();\n };\n}\n","/**\n * Cross-browser support for logging in a web application.\n *\n * @author David I. Lehn \n *\n * Copyright (c) 2008-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\n/* LOG API */\nmodule.exports = forge.log = forge.log || {};\n\n/**\n * Application logging system.\n *\n * Each logger level available as it's own function of the form:\n * forge.log.level(category, args...)\n * The category is an arbitrary string, and the args are the same as\n * Firebug's console.log API. By default the call will be output as:\n * 'LEVEL [category] , args[1], ...'\n * This enables proper % formatting via the first argument.\n * Each category is enabled by default but can be enabled or disabled with\n * the setCategoryEnabled() function.\n */\n// list of known levels\nforge.log.levels = [\n 'none', 'error', 'warning', 'info', 'debug', 'verbose', 'max'];\n// info on the levels indexed by name:\n// index: level index\n// name: uppercased display name\nvar sLevelInfo = {};\n// list of loggers\nvar sLoggers = [];\n/**\n * Standard console logger. If no console support is enabled this will\n * remain null. Check before using.\n */\nvar sConsoleLogger = null;\n\n// logger flags\n/**\n * Lock the level at the current value. Used in cases where user config may\n * set the level such that only critical messages are seen but more verbose\n * messages are needed for debugging or other purposes.\n */\nforge.log.LEVEL_LOCKED = (1 << 1);\n/**\n * Always call log function. By default, the logging system will check the\n * message level against logger.level before calling the log function. This\n * flag allows the function to do its own check.\n */\nforge.log.NO_LEVEL_CHECK = (1 << 2);\n/**\n * Perform message interpolation with the passed arguments. \"%\" style\n * fields in log messages will be replaced by arguments as needed. Some\n * loggers, such as Firebug, may do this automatically. The original log\n * message will be available as 'message' and the interpolated version will\n * be available as 'fullMessage'.\n */\nforge.log.INTERPOLATE = (1 << 3);\n\n// setup each log level\nfor(var i = 0; i < forge.log.levels.length; ++i) {\n var level = forge.log.levels[i];\n sLevelInfo[level] = {\n index: i,\n name: level.toUpperCase()\n };\n}\n\n/**\n * Message logger. Will dispatch a message to registered loggers as needed.\n *\n * @param message message object\n */\nforge.log.logMessage = function(message) {\n var messageLevelIndex = sLevelInfo[message.level].index;\n for(var i = 0; i < sLoggers.length; ++i) {\n var logger = sLoggers[i];\n if(logger.flags & forge.log.NO_LEVEL_CHECK) {\n logger.f(message);\n } else {\n // get logger level\n var loggerLevelIndex = sLevelInfo[logger.level].index;\n // check level\n if(messageLevelIndex <= loggerLevelIndex) {\n // message critical enough, call logger\n logger.f(logger, message);\n }\n }\n }\n};\n\n/**\n * Sets the 'standard' key on a message object to:\n * \"LEVEL [category] \" + message\n *\n * @param message a message log object\n */\nforge.log.prepareStandard = function(message) {\n if(!('standard' in message)) {\n message.standard =\n sLevelInfo[message.level].name +\n //' ' + +message.timestamp +\n ' [' + message.category + '] ' +\n message.message;\n }\n};\n\n/**\n * Sets the 'full' key on a message object to the original message\n * interpolated via % formatting with the message arguments.\n *\n * @param message a message log object.\n */\nforge.log.prepareFull = function(message) {\n if(!('full' in message)) {\n // copy args and insert message at the front\n var args = [message.message];\n args = args.concat([] || message['arguments']);\n // format the message\n message.full = forge.util.format.apply(this, args);\n }\n};\n\n/**\n * Applies both preparseStandard() and prepareFull() to a message object and\n * store result in 'standardFull'.\n *\n * @param message a message log object.\n */\nforge.log.prepareStandardFull = function(message) {\n if(!('standardFull' in message)) {\n // FIXME implement 'standardFull' logging\n forge.log.prepareStandard(message);\n message.standardFull = message.standard;\n }\n};\n\n// create log level functions\nif(true) {\n // levels for which we want functions\n var levels = ['error', 'warning', 'info', 'debug', 'verbose'];\n for(var i = 0; i < levels.length; ++i) {\n // wrap in a function to ensure proper level var is passed\n (function(level) {\n // create function for this level\n forge.log[level] = function(category, message/*, args...*/) {\n // convert arguments to real array, remove category and message\n var args = Array.prototype.slice.call(arguments).slice(2);\n // create message object\n // Note: interpolation and standard formatting is done lazily\n var msg = {\n timestamp: new Date(),\n level: level,\n category: category,\n message: message,\n 'arguments': args\n /*standard*/\n /*full*/\n /*fullMessage*/\n };\n // process this message\n forge.log.logMessage(msg);\n };\n })(levels[i]);\n }\n}\n\n/**\n * Creates a new logger with specified custom logging function.\n *\n * The logging function has a signature of:\n * function(logger, message)\n * logger: current logger\n * message: object:\n * level: level id\n * category: category\n * message: string message\n * arguments: Array of extra arguments\n * fullMessage: interpolated message and arguments if INTERPOLATE flag set\n *\n * @param logFunction a logging function which takes a log message object\n * as a parameter.\n *\n * @return a logger object.\n */\nforge.log.makeLogger = function(logFunction) {\n var logger = {\n flags: 0,\n f: logFunction\n };\n forge.log.setLevel(logger, 'none');\n return logger;\n};\n\n/**\n * Sets the current log level on a logger.\n *\n * @param logger the target logger.\n * @param level the new maximum log level as a string.\n *\n * @return true if set, false if not.\n */\nforge.log.setLevel = function(logger, level) {\n var rval = false;\n if(logger && !(logger.flags & forge.log.LEVEL_LOCKED)) {\n for(var i = 0; i < forge.log.levels.length; ++i) {\n var aValidLevel = forge.log.levels[i];\n if(level == aValidLevel) {\n // set level\n logger.level = level;\n rval = true;\n break;\n }\n }\n }\n\n return rval;\n};\n\n/**\n * Locks the log level at its current value.\n *\n * @param logger the target logger.\n * @param lock boolean lock value, default to true.\n */\nforge.log.lock = function(logger, lock) {\n if(typeof lock === 'undefined' || lock) {\n logger.flags |= forge.log.LEVEL_LOCKED;\n } else {\n logger.flags &= ~forge.log.LEVEL_LOCKED;\n }\n};\n\n/**\n * Adds a logger.\n *\n * @param logger the logger object.\n */\nforge.log.addLogger = function(logger) {\n sLoggers.push(logger);\n};\n\n// setup the console logger if possible, else create fake console.log\nif(typeof(console) !== 'undefined' && 'log' in console) {\n var logger;\n if(console.error && console.warn && console.info && console.debug) {\n // looks like Firebug-style logging is available\n // level handlers map\n var levelHandlers = {\n error: console.error,\n warning: console.warn,\n info: console.info,\n debug: console.debug,\n verbose: console.debug\n };\n var f = function(logger, message) {\n forge.log.prepareStandard(message);\n var handler = levelHandlers[message.level];\n // prepend standard message and concat args\n var args = [message.standard];\n args = args.concat(message['arguments'].slice());\n // apply to low-level console function\n handler.apply(console, args);\n };\n logger = forge.log.makeLogger(f);\n } else {\n // only appear to have basic console.log\n var f = function(logger, message) {\n forge.log.prepareStandardFull(message);\n console.log(message.standardFull);\n };\n logger = forge.log.makeLogger(f);\n }\n forge.log.setLevel(logger, 'debug');\n forge.log.addLogger(logger);\n sConsoleLogger = logger;\n} else {\n // define fake console.log to avoid potential script errors on\n // browsers that do not have console logging\n console = {\n log: function() {}\n };\n}\n\n/*\n * Check for logging control query vars in current URL.\n *\n * console.level=\n * Set's the console log level by name. Useful to override defaults and\n * allow more verbose logging before a user config is loaded.\n *\n * console.lock=\n * Lock the console log level at whatever level it is set at. This is run\n * after console.level is processed. Useful to force a level of verbosity\n * that could otherwise be limited by a user config.\n */\nif(sConsoleLogger !== null &&\n typeof window !== 'undefined' && window.location\n) {\n var query = new URL(window.location.href).searchParams;\n if(query.has('console.level')) {\n // set with last value\n forge.log.setLevel(\n sConsoleLogger, query.get('console.level').slice(-1)[0]);\n }\n if(query.has('console.lock')) {\n // set with last value\n var lock = query.get('console.lock').slice(-1)[0];\n if(lock == 'true') {\n forge.log.lock(sConsoleLogger);\n }\n }\n}\n\n// provide public access to console logger\nforge.log.consoleLogger = sConsoleLogger;\n","/**\n * Node.js module for all known Forge message digests.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2017 Digital Bazaar, Inc.\n */\nmodule.exports = require('./md');\n\nrequire('./md5');\nrequire('./sha1');\nrequire('./sha256');\nrequire('./sha512');\n","/**\n * Node.js module for Forge message digests.\n *\n * @author Dave Longley\n *\n * Copyright 2011-2017 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nmodule.exports = forge.md = forge.md || {};\nforge.md.algorithms = forge.md.algorithms || {};\n","/**\n * Message Digest Algorithm 5 with 128-bit digest (MD5) implementation.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar md5 = module.exports = forge.md5 = forge.md5 || {};\nforge.md.md5 = forge.md.algorithms.md5 = md5;\n\n/**\n * Creates an MD5 message digest object.\n *\n * @return a message digest object.\n */\nmd5.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // MD5 state contains four 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(16);\n\n // message digest object\n var md = {\n algorithm: 'md5',\n blockLength: 64,\n digestLength: 16,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x67452301,\n h1: 0xEFCDAB89,\n h2: 0x98BADCFE,\n h3: 0x10325476\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = (len[1] / 0x100000000) >>> 0;\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate MD5 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in little-endian order; since length\n // is stored in bytes we multiply by 8 and add carry\n var bits, carry = 0;\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n bits = md.fullMessageLength[i] * 8 + carry;\n carry = (bits / 0x100000000) >>> 0;\n finalBlock.putInt32Le(bits >>> 0);\n }\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32Le(s2.h0);\n rval.putInt32Le(s2.h1);\n rval.putInt32Le(s2.h2);\n rval.putInt32Le(s2.h3);\n return rval;\n };\n\n return md;\n};\n\n// padding, constant tables for calculating md5\nvar _padding = null;\nvar _g = null;\nvar _r = null;\nvar _k = null;\nvar _initialized = false;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // g values\n _g = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12,\n 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2,\n 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9];\n\n // rounds table\n _r = [\n 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,\n 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,\n 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,\n 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21];\n\n // get the result of abs(sin(i + 1)) as a 32-bit integer\n _k = new Array(64);\n for(var i = 0; i < 64; ++i) {\n _k[i] = Math.floor(Math.abs(Math.sin(i + 1)) * 0x100000000);\n }\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates an MD5 state with the given byte buffer.\n *\n * @param s the MD5 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t, a, b, c, d, f, r, i;\n var len = bytes.length();\n while(len >= 64) {\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n\n // round 1\n for(i = 0; i < 16; ++i) {\n w[i] = bytes.getInt32Le();\n f = d ^ (b & (c ^ d));\n t = (a + f + _k[i] + w[i]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n // round 2\n for(; i < 32; ++i) {\n f = c ^ (d & (b ^ c));\n t = (a + f + _k[i] + w[_g[i]]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n // round 3\n for(; i < 48; ++i) {\n f = b ^ c ^ d;\n t = (a + f + _k[i] + w[_g[i]]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n // round 4\n for(; i < 64; ++i) {\n f = c ^ (b | ~d);\n t = (a + f + _k[i] + w[_g[i]]);\n r = _r[i];\n a = d;\n d = c;\n c = b;\n b += (t << r) | (t >>> (32 - r));\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n\n len -= 64;\n }\n}\n","/**\n * Node.js module for Forge mask generation functions.\n *\n * @author Stefan Siegl\n *\n * Copyright 2012 Stefan Siegl \n */\nvar forge = require('./forge');\nrequire('./mgf1');\n\nmodule.exports = forge.mgf = forge.mgf || {};\nforge.mgf.mgf1 = forge.mgf1;\n","/**\n * Javascript implementation of mask generation function MGF1.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl \n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nforge.mgf = forge.mgf || {};\nvar mgf1 = module.exports = forge.mgf.mgf1 = forge.mgf1 = forge.mgf1 || {};\n\n/**\n * Creates a MGF1 mask generation function object.\n *\n * @param md the message digest API to use (eg: forge.md.sha1.create()).\n *\n * @return a mask generation function object.\n */\nmgf1.create = function(md) {\n var mgf = {\n /**\n * Generate mask of specified length.\n *\n * @param {String} seed The seed for mask generation.\n * @param maskLen Number of bytes to generate.\n * @return {String} The generated mask.\n */\n generate: function(seed, maskLen) {\n /* 2. Let T be the empty octet string. */\n var t = new forge.util.ByteBuffer();\n\n /* 3. For counter from 0 to ceil(maskLen / hLen), do the following: */\n var len = Math.ceil(maskLen / md.digestLength);\n for(var i = 0; i < len; i++) {\n /* a. Convert counter to an octet string C of length 4 octets */\n var c = new forge.util.ByteBuffer();\n c.putInt32(i);\n\n /* b. Concatenate the hash of the seed mgfSeed and C to the octet\n * string T: */\n md.start();\n md.update(seed + c.getBytes());\n t.putBuffer(md.digest());\n }\n\n /* Output the leading maskLen octets of T as the octet string mask. */\n t.truncate(t.length() - maskLen);\n return t.getBytes();\n }\n };\n\n return mgf;\n};\n","/**\n * Object IDs for ASN.1.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\n\nforge.pki = forge.pki || {};\nvar oids = module.exports = forge.pki.oids = forge.oids = forge.oids || {};\n\n// set id to name mapping and name to id mapping\nfunction _IN(id, name) {\n oids[id] = name;\n oids[name] = id;\n}\n// set id to name mapping only\nfunction _I_(id, name) {\n oids[id] = name;\n}\n\n// algorithm OIDs\n_IN('1.2.840.113549.1.1.1', 'rsaEncryption');\n// Note: md2 & md4 not implemented\n//_IN('1.2.840.113549.1.1.2', 'md2WithRSAEncryption');\n//_IN('1.2.840.113549.1.1.3', 'md4WithRSAEncryption');\n_IN('1.2.840.113549.1.1.4', 'md5WithRSAEncryption');\n_IN('1.2.840.113549.1.1.5', 'sha1WithRSAEncryption');\n_IN('1.2.840.113549.1.1.7', 'RSAES-OAEP');\n_IN('1.2.840.113549.1.1.8', 'mgf1');\n_IN('1.2.840.113549.1.1.9', 'pSpecified');\n_IN('1.2.840.113549.1.1.10', 'RSASSA-PSS');\n_IN('1.2.840.113549.1.1.11', 'sha256WithRSAEncryption');\n_IN('1.2.840.113549.1.1.12', 'sha384WithRSAEncryption');\n_IN('1.2.840.113549.1.1.13', 'sha512WithRSAEncryption');\n// Edwards-curve Digital Signature Algorithm (EdDSA) Ed25519\n_IN('1.3.101.112', 'EdDSA25519');\n\n_IN('1.2.840.10040.4.3', 'dsa-with-sha1');\n\n_IN('1.3.14.3.2.7', 'desCBC');\n\n_IN('1.3.14.3.2.26', 'sha1');\n// Deprecated equivalent of sha1WithRSAEncryption\n_IN('1.3.14.3.2.29', 'sha1WithRSASignature');\n_IN('2.16.840.1.101.3.4.2.1', 'sha256');\n_IN('2.16.840.1.101.3.4.2.2', 'sha384');\n_IN('2.16.840.1.101.3.4.2.3', 'sha512');\n_IN('2.16.840.1.101.3.4.2.4', 'sha224');\n_IN('2.16.840.1.101.3.4.2.5', 'sha512-224');\n_IN('2.16.840.1.101.3.4.2.6', 'sha512-256');\n_IN('1.2.840.113549.2.2', 'md2');\n_IN('1.2.840.113549.2.5', 'md5');\n\n// pkcs#7 content types\n_IN('1.2.840.113549.1.7.1', 'data');\n_IN('1.2.840.113549.1.7.2', 'signedData');\n_IN('1.2.840.113549.1.7.3', 'envelopedData');\n_IN('1.2.840.113549.1.7.4', 'signedAndEnvelopedData');\n_IN('1.2.840.113549.1.7.5', 'digestedData');\n_IN('1.2.840.113549.1.7.6', 'encryptedData');\n\n// pkcs#9 oids\n_IN('1.2.840.113549.1.9.1', 'emailAddress');\n_IN('1.2.840.113549.1.9.2', 'unstructuredName');\n_IN('1.2.840.113549.1.9.3', 'contentType');\n_IN('1.2.840.113549.1.9.4', 'messageDigest');\n_IN('1.2.840.113549.1.9.5', 'signingTime');\n_IN('1.2.840.113549.1.9.6', 'counterSignature');\n_IN('1.2.840.113549.1.9.7', 'challengePassword');\n_IN('1.2.840.113549.1.9.8', 'unstructuredAddress');\n_IN('1.2.840.113549.1.9.14', 'extensionRequest');\n\n_IN('1.2.840.113549.1.9.20', 'friendlyName');\n_IN('1.2.840.113549.1.9.21', 'localKeyId');\n_IN('1.2.840.113549.1.9.22.1', 'x509Certificate');\n\n// pkcs#12 safe bags\n_IN('1.2.840.113549.1.12.10.1.1', 'keyBag');\n_IN('1.2.840.113549.1.12.10.1.2', 'pkcs8ShroudedKeyBag');\n_IN('1.2.840.113549.1.12.10.1.3', 'certBag');\n_IN('1.2.840.113549.1.12.10.1.4', 'crlBag');\n_IN('1.2.840.113549.1.12.10.1.5', 'secretBag');\n_IN('1.2.840.113549.1.12.10.1.6', 'safeContentsBag');\n\n// password-based-encryption for pkcs#12\n_IN('1.2.840.113549.1.5.13', 'pkcs5PBES2');\n_IN('1.2.840.113549.1.5.12', 'pkcs5PBKDF2');\n\n_IN('1.2.840.113549.1.12.1.1', 'pbeWithSHAAnd128BitRC4');\n_IN('1.2.840.113549.1.12.1.2', 'pbeWithSHAAnd40BitRC4');\n_IN('1.2.840.113549.1.12.1.3', 'pbeWithSHAAnd3-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.4', 'pbeWithSHAAnd2-KeyTripleDES-CBC');\n_IN('1.2.840.113549.1.12.1.5', 'pbeWithSHAAnd128BitRC2-CBC');\n_IN('1.2.840.113549.1.12.1.6', 'pbewithSHAAnd40BitRC2-CBC');\n\n// hmac OIDs\n_IN('1.2.840.113549.2.7', 'hmacWithSHA1');\n_IN('1.2.840.113549.2.8', 'hmacWithSHA224');\n_IN('1.2.840.113549.2.9', 'hmacWithSHA256');\n_IN('1.2.840.113549.2.10', 'hmacWithSHA384');\n_IN('1.2.840.113549.2.11', 'hmacWithSHA512');\n\n// symmetric key algorithm oids\n_IN('1.2.840.113549.3.7', 'des-EDE3-CBC');\n_IN('2.16.840.1.101.3.4.1.2', 'aes128-CBC');\n_IN('2.16.840.1.101.3.4.1.22', 'aes192-CBC');\n_IN('2.16.840.1.101.3.4.1.42', 'aes256-CBC');\n\n// certificate issuer/subject OIDs\n_IN('2.5.4.3', 'commonName');\n_IN('2.5.4.4', 'surname');\n_IN('2.5.4.5', 'serialNumber');\n_IN('2.5.4.6', 'countryName');\n_IN('2.5.4.7', 'localityName');\n_IN('2.5.4.8', 'stateOrProvinceName');\n_IN('2.5.4.9', 'streetAddress');\n_IN('2.5.4.10', 'organizationName');\n_IN('2.5.4.11', 'organizationalUnitName');\n_IN('2.5.4.12', 'title');\n_IN('2.5.4.13', 'description');\n_IN('2.5.4.15', 'businessCategory');\n_IN('2.5.4.17', 'postalCode');\n_IN('2.5.4.42', 'givenName');\n_IN('1.3.6.1.4.1.311.60.2.1.2', 'jurisdictionOfIncorporationStateOrProvinceName');\n_IN('1.3.6.1.4.1.311.60.2.1.3', 'jurisdictionOfIncorporationCountryName');\n\n// X.509 extension OIDs\n_IN('2.16.840.1.113730.1.1', 'nsCertType');\n_IN('2.16.840.1.113730.1.13', 'nsComment'); // deprecated in theory; still widely used\n_I_('2.5.29.1', 'authorityKeyIdentifier'); // deprecated, use .35\n_I_('2.5.29.2', 'keyAttributes'); // obsolete use .37 or .15\n_I_('2.5.29.3', 'certificatePolicies'); // deprecated, use .32\n_I_('2.5.29.4', 'keyUsageRestriction'); // obsolete use .37 or .15\n_I_('2.5.29.5', 'policyMapping'); // deprecated use .33\n_I_('2.5.29.6', 'subtreesConstraint'); // obsolete use .30\n_I_('2.5.29.7', 'subjectAltName'); // deprecated use .17\n_I_('2.5.29.8', 'issuerAltName'); // deprecated use .18\n_I_('2.5.29.9', 'subjectDirectoryAttributes');\n_I_('2.5.29.10', 'basicConstraints'); // deprecated use .19\n_I_('2.5.29.11', 'nameConstraints'); // deprecated use .30\n_I_('2.5.29.12', 'policyConstraints'); // deprecated use .36\n_I_('2.5.29.13', 'basicConstraints'); // deprecated use .19\n_IN('2.5.29.14', 'subjectKeyIdentifier');\n_IN('2.5.29.15', 'keyUsage');\n_I_('2.5.29.16', 'privateKeyUsagePeriod');\n_IN('2.5.29.17', 'subjectAltName');\n_IN('2.5.29.18', 'issuerAltName');\n_IN('2.5.29.19', 'basicConstraints');\n_I_('2.5.29.20', 'cRLNumber');\n_I_('2.5.29.21', 'cRLReason');\n_I_('2.5.29.22', 'expirationDate');\n_I_('2.5.29.23', 'instructionCode');\n_I_('2.5.29.24', 'invalidityDate');\n_I_('2.5.29.25', 'cRLDistributionPoints'); // deprecated use .31\n_I_('2.5.29.26', 'issuingDistributionPoint'); // deprecated use .28\n_I_('2.5.29.27', 'deltaCRLIndicator');\n_I_('2.5.29.28', 'issuingDistributionPoint');\n_I_('2.5.29.29', 'certificateIssuer');\n_I_('2.5.29.30', 'nameConstraints');\n_IN('2.5.29.31', 'cRLDistributionPoints');\n_IN('2.5.29.32', 'certificatePolicies');\n_I_('2.5.29.33', 'policyMappings');\n_I_('2.5.29.34', 'policyConstraints'); // deprecated use .36\n_IN('2.5.29.35', 'authorityKeyIdentifier');\n_I_('2.5.29.36', 'policyConstraints');\n_IN('2.5.29.37', 'extKeyUsage');\n_I_('2.5.29.46', 'freshestCRL');\n_I_('2.5.29.54', 'inhibitAnyPolicy');\n\n// extKeyUsage purposes\n_IN('1.3.6.1.4.1.11129.2.4.2', 'timestampList');\n_IN('1.3.6.1.5.5.7.1.1', 'authorityInfoAccess');\n_IN('1.3.6.1.5.5.7.3.1', 'serverAuth');\n_IN('1.3.6.1.5.5.7.3.2', 'clientAuth');\n_IN('1.3.6.1.5.5.7.3.3', 'codeSigning');\n_IN('1.3.6.1.5.5.7.3.4', 'emailProtection');\n_IN('1.3.6.1.5.5.7.3.8', 'timeStamping');\n","/**\n * Password-based encryption functions.\n *\n * @author Dave Longley\n * @author Stefan Siegl \n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl \n *\n * An EncryptedPrivateKeyInfo:\n *\n * EncryptedPrivateKeyInfo ::= SEQUENCE {\n * encryptionAlgorithm EncryptionAlgorithmIdentifier,\n * encryptedData EncryptedData }\n *\n * EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * EncryptedData ::= OCTET STRING\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./oids');\nrequire('./pbkdf2');\nrequire('./pem');\nrequire('./random');\nrequire('./rc2');\nrequire('./rsa');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Password-based encryption implementation. */\nvar pki = forge.pki = forge.pki || {};\nmodule.exports = pki.pbe = forge.pbe = forge.pbe || {};\nvar oids = pki.oids;\n\n// validator for an EncryptedPrivateKeyInfo structure\n// Note: Currently only works w/algorithm params\nvar encryptedPrivateKeyValidator = {\n name: 'EncryptedPrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedPrivateKeyInfo.encryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encryptionOid'\n }, {\n name: 'AlgorithmIdentifier.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'encryptionParams'\n }]\n }, {\n // encryptedData\n name: 'EncryptedPrivateKeyInfo.encryptedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encryptedData'\n }]\n};\n\n// validator for a PBES2Algorithms structure\n// Note: Currently only works w/PBKDF2 + AES encryption schemes\nvar PBES2AlgorithmsValidator = {\n name: 'PBES2Algorithms',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.keyDerivationFunc.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'kdfOid'\n }, {\n name: 'PBES2Algorithms.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.params.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'kdfSalt'\n }, {\n name: 'PBES2Algorithms.params.iterationCount',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'kdfIterationCount'\n }, {\n name: 'PBES2Algorithms.params.keyLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n optional: true,\n capture: 'keyLength'\n }, {\n // prf\n name: 'PBES2Algorithms.params.prf',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'PBES2Algorithms.params.prf.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'prfOid'\n }]\n }]\n }]\n }, {\n name: 'PBES2Algorithms.encryptionScheme',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PBES2Algorithms.encryptionScheme.oid',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encOid'\n }, {\n name: 'PBES2Algorithms.encryptionScheme.iv',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encIv'\n }]\n }]\n};\n\nvar pkcs12PbeParamsValidator = {\n name: 'pkcs-12PbeParams',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'pkcs-12PbeParams.salt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'salt'\n }, {\n name: 'pkcs-12PbeParams.iterations',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'iterations'\n }]\n};\n\n/**\n * Encrypts a ASN.1 PrivateKeyInfo object, producing an EncryptedPrivateKeyInfo.\n *\n * PBES2Algorithms ALGORITHM-IDENTIFIER ::=\n * { {PBES2-params IDENTIFIED BY id-PBES2}, ...}\n *\n * id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}\n *\n * PBES2-params ::= SEQUENCE {\n * keyDerivationFunc AlgorithmIdentifier {{PBES2-KDFs}},\n * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}}\n * }\n *\n * PBES2-KDFs ALGORITHM-IDENTIFIER ::=\n * { {PBKDF2-params IDENTIFIED BY id-PBKDF2}, ... }\n *\n * PBES2-Encs ALGORITHM-IDENTIFIER ::= { ... }\n *\n * PBKDF2-params ::= SEQUENCE {\n * salt CHOICE {\n * specified OCTET STRING,\n * otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}\n * },\n * iterationCount INTEGER (1..MAX),\n * keyLength INTEGER (1..MAX) OPTIONAL,\n * prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT algid-hmacWithSHA1\n * }\n *\n * @param obj the ASN.1 PrivateKeyInfo object.\n * @param password the password to encrypt with.\n * @param options:\n * algorithm the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.\n * count the iteration count to use.\n * saltSize the salt size to use.\n * prfAlgorithm the PRF message digest algorithm to use\n * ('sha1', 'sha224', 'sha256', 'sha384', 'sha512')\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptPrivateKeyInfo = function(obj, password, options) {\n // set default options\n options = options || {};\n options.saltSize = options.saltSize || 8;\n options.count = options.count || 2048;\n options.algorithm = options.algorithm || 'aes128';\n options.prfAlgorithm = options.prfAlgorithm || 'sha1';\n\n // generate PBE params\n var salt = forge.random.getBytesSync(options.saltSize);\n var count = options.count;\n var countBytes = asn1.integerToDer(count);\n var dkLen;\n var encryptionAlgorithm;\n var encryptedData;\n if(options.algorithm.indexOf('aes') === 0 || options.algorithm === 'des') {\n // do PBES2\n var ivLen, encOid, cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n dkLen = 16;\n ivLen = 16;\n encOid = oids['aes128-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n dkLen = 24;\n ivLen = 16;\n encOid = oids['aes192-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n dkLen = 32;\n ivLen = 16;\n encOid = oids['aes256-CBC'];\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'des':\n dkLen = 8;\n ivLen = 8;\n encOid = oids['desCBC'];\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // get PRF message digest\n var prfAlgorithm = 'hmacWith' + options.prfAlgorithm.toUpperCase();\n var md = prfAlgorithmToMessageDigest(prfAlgorithm);\n\n // encrypt private key using pbe SHA-1 and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = forge.random.getBytesSync(ivLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n // get PBKDF2-params\n var params = createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm);\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBES2']).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // keyDerivationFunc\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pkcs5PBKDF2']).getBytes()),\n // PBKDF2-params\n params\n ]),\n // encryptionScheme\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(encOid).getBytes()),\n // iv\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, iv)\n ])\n ])\n ]);\n } else if(options.algorithm === '3des') {\n // Do PKCS12 PBE\n dkLen = 24;\n\n var saltBytes = new forge.util.ByteBuffer(salt);\n var dk = pki.pbe.generatePkcs12Key(password, saltBytes, 1, count, dkLen);\n var iv = pki.pbe.generatePkcs12Key(password, saltBytes, 2, count, dkLen);\n var cipher = forge.des.createEncryptionCipher(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(obj));\n cipher.finish();\n encryptedData = cipher.output.getBytes();\n\n encryptionAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oids['pbeWithSHAAnd3-KeyTripleDES-CBC']).getBytes()),\n // pkcs-12PbeParams\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ])\n ]);\n } else {\n var error = new Error('Cannot encrypt private key. Unknown encryption algorithm.');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // EncryptedPrivateKeyInfo\n var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // encryptionAlgorithm\n encryptionAlgorithm,\n // encryptedData\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, encryptedData)\n ]);\n return rval;\n};\n\n/**\n * Decrypts a ASN.1 PrivateKeyInfo object.\n *\n * @param obj the ASN.1 EncryptedPrivateKeyInfo object.\n * @param password the password to decrypt with.\n *\n * @return the ASN.1 PrivateKeyInfo on success, null on failure.\n */\npki.decryptPrivateKeyInfo = function(obj, password) {\n var rval = null;\n\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, encryptedPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // get cipher\n var oid = asn1.derToOid(capture.encryptionOid);\n var cipher = pki.pbe.getCipher(oid, capture.encryptionParams, password);\n\n // get encrypted data\n var encrypted = forge.util.createBuffer(capture.encryptedData);\n\n cipher.update(encrypted);\n if(cipher.finish()) {\n rval = asn1.fromDer(cipher.output);\n }\n\n return rval;\n};\n\n/**\n * Converts a EncryptedPrivateKeyInfo to PEM format.\n *\n * @param epki the EncryptedPrivateKeyInfo.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted encrypted private key.\n */\npki.encryptedPrivateKeyToPem = function(epki, maxline) {\n // convert to DER, then PEM-encode\n var msg = {\n type: 'ENCRYPTED PRIVATE KEY',\n body: asn1.toDer(epki).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts a PEM-encoded EncryptedPrivateKeyInfo to ASN.1 format. Decryption\n * is not performed.\n *\n * @param pem the EncryptedPrivateKeyInfo in PEM-format.\n *\n * @return the ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptedPrivateKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY') {\n var error = new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM header type is \"ENCRYPTED PRIVATE KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert encrypted private key from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n return asn1.fromDer(msg.body);\n};\n\n/**\n * Encrypts an RSA private key. By default, the key will be wrapped in\n * a PrivateKeyInfo and encrypted to produce a PKCS#8 EncryptedPrivateKeyInfo.\n * This is the standard, preferred way to encrypt a private key.\n *\n * To produce a non-standard PEM-encrypted private key that uses encapsulated\n * headers to indicate the encryption algorithm (old-style non-PKCS#8 OpenSSL\n * private key encryption), set the 'legacy' option to true. Note: Using this\n * option will cause the iteration count to be forced to 1.\n *\n * Note: The 'des' algorithm is supported, but it is not considered to be\n * secure because it only uses a single 56-bit key. If possible, it is highly\n * recommended that a different algorithm be used.\n *\n * @param rsaKey the RSA key to encrypt.\n * @param password the password to use.\n * @param options:\n * algorithm: the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des', 'des').\n * count: the iteration count to use.\n * saltSize: the salt size to use.\n * legacy: output an old non-PKCS#8 PEM-encrypted+encapsulated\n * headers (DEK-Info) private key.\n *\n * @return the PEM-encoded ASN.1 EncryptedPrivateKeyInfo.\n */\npki.encryptRsaPrivateKey = function(rsaKey, password, options) {\n // standard PKCS#8\n options = options || {};\n if(!options.legacy) {\n // encrypt PrivateKeyInfo\n var rval = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(rsaKey));\n rval = pki.encryptPrivateKeyInfo(rval, password, options);\n return pki.encryptedPrivateKeyToPem(rval);\n }\n\n // legacy non-PKCS#8\n var algorithm;\n var iv;\n var dkLen;\n var cipherFn;\n switch(options.algorithm) {\n case 'aes128':\n algorithm = 'AES-128-CBC';\n dkLen = 16;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes192':\n algorithm = 'AES-192-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case 'aes256':\n algorithm = 'AES-256-CBC';\n dkLen = 32;\n iv = forge.random.getBytesSync(16);\n cipherFn = forge.aes.createEncryptionCipher;\n break;\n case '3des':\n algorithm = 'DES-EDE3-CBC';\n dkLen = 24;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n case 'des':\n algorithm = 'DES-CBC';\n dkLen = 8;\n iv = forge.random.getBytesSync(8);\n cipherFn = forge.des.createEncryptionCipher;\n break;\n default:\n var error = new Error('Could not encrypt RSA private key; unsupported ' +\n 'encryption algorithm \"' + options.algorithm + '\".');\n error.algorithm = options.algorithm;\n throw error;\n }\n\n // encrypt private key using OpenSSL legacy key derivation\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(asn1.toDer(pki.privateKeyToAsn1(rsaKey)));\n cipher.finish();\n\n var msg = {\n type: 'RSA PRIVATE KEY',\n procType: {\n version: '4',\n type: 'ENCRYPTED'\n },\n dekInfo: {\n algorithm: algorithm,\n parameters: forge.util.bytesToHex(iv).toUpperCase()\n },\n body: cipher.output.getBytes()\n };\n return forge.pem.encode(msg);\n};\n\n/**\n * Decrypts an RSA private key.\n *\n * @param pem the PEM-formatted EncryptedPrivateKeyInfo to decrypt.\n * @param password the password to use.\n *\n * @return the RSA key on success, null on failure.\n */\npki.decryptRsaPrivateKey = function(pem, password) {\n var rval = null;\n\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'ENCRYPTED PRIVATE KEY' &&\n msg.type !== 'PRIVATE KEY' &&\n msg.type !== 'RSA PRIVATE KEY') {\n var error = new Error('Could not convert private key from PEM; PEM header type ' +\n 'is not \"ENCRYPTED PRIVATE KEY\", \"PRIVATE KEY\", or \"RSA PRIVATE KEY\".');\n error.headerType = error;\n throw error;\n }\n\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n var dkLen;\n var cipherFn;\n switch(msg.dekInfo.algorithm) {\n case 'DES-CBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'DES-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'AES-128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'AES-256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'RC2-40-CBC':\n dkLen = 5;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 40);\n };\n break;\n case 'RC2-64-CBC':\n dkLen = 8;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 64);\n };\n break;\n case 'RC2-128-CBC':\n dkLen = 16;\n cipherFn = function(key) {\n return forge.rc2.createDecryptionCipher(key, 128);\n };\n break;\n default:\n var error = new Error('Could not decrypt private key; unsupported ' +\n 'encryption algorithm \"' + msg.dekInfo.algorithm + '\".');\n error.algorithm = msg.dekInfo.algorithm;\n throw error;\n }\n\n // use OpenSSL legacy key derivation\n var iv = forge.util.hexToBytes(msg.dekInfo.parameters);\n var dk = forge.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen);\n var cipher = cipherFn(dk);\n cipher.start(iv);\n cipher.update(forge.util.createBuffer(msg.body));\n if(cipher.finish()) {\n rval = cipher.output.getBytes();\n } else {\n return rval;\n }\n } else {\n rval = msg.body;\n }\n\n if(msg.type === 'ENCRYPTED PRIVATE KEY') {\n rval = pki.decryptPrivateKeyInfo(asn1.fromDer(rval), password);\n } else {\n // decryption already performed above\n rval = asn1.fromDer(rval);\n }\n\n if(rval !== null) {\n rval = pki.privateKeyFromAsn1(rval);\n }\n\n return rval;\n};\n\n/**\n * Derives a PKCS#12 key.\n *\n * @param password the password to derive the key material from, null or\n * undefined for none.\n * @param salt the salt, as a ByteBuffer, to use.\n * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).\n * @param iter the iteration count.\n * @param n the number of bytes to derive from the password.\n * @param md the message digest to use, defaults to SHA-1.\n *\n * @return a ByteBuffer with the bytes derived from the password.\n */\npki.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) {\n var j, l;\n\n if(typeof md === 'undefined' || md === null) {\n if(!('sha1' in forge.md)) {\n throw new Error('\"sha1\" hash algorithm unavailable.');\n }\n md = forge.md.sha1.create();\n }\n\n var u = md.digestLength;\n var v = md.blockLength;\n var result = new forge.util.ByteBuffer();\n\n /* Convert password to Unicode byte buffer + trailing 0-byte. */\n var passBuf = new forge.util.ByteBuffer();\n if(password !== null && password !== undefined) {\n for(l = 0; l < password.length; l++) {\n passBuf.putInt16(password.charCodeAt(l));\n }\n passBuf.putInt16(0);\n }\n\n /* Length of salt and password in BYTES. */\n var p = passBuf.length();\n var s = salt.length();\n\n /* 1. Construct a string, D (the \"diversifier\"), by concatenating\n v copies of ID. */\n var D = new forge.util.ByteBuffer();\n D.fillWithByte(id, v);\n\n /* 2. Concatenate copies of the salt together to create a string S of length\n v * ceil(s / v) bytes (the final copy of the salt may be trunacted\n to create S).\n Note that if the salt is the empty string, then so is S. */\n var Slen = v * Math.ceil(s / v);\n var S = new forge.util.ByteBuffer();\n for(l = 0; l < Slen; l++) {\n S.putByte(salt.at(l % s));\n }\n\n /* 3. Concatenate copies of the password together to create a string P of\n length v * ceil(p / v) bytes (the final copy of the password may be\n truncated to create P).\n Note that if the password is the empty string, then so is P. */\n var Plen = v * Math.ceil(p / v);\n var P = new forge.util.ByteBuffer();\n for(l = 0; l < Plen; l++) {\n P.putByte(passBuf.at(l % p));\n }\n\n /* 4. Set I=S||P to be the concatenation of S and P. */\n var I = S;\n I.putBuffer(P);\n\n /* 5. Set c=ceil(n / u). */\n var c = Math.ceil(n / u);\n\n /* 6. For i=1, 2, ..., c, do the following: */\n for(var i = 1; i <= c; i++) {\n /* a) Set Ai=H^r(D||I). (l.e. the rth hash of D||I, H(H(H(...H(D||I)))) */\n var buf = new forge.util.ByteBuffer();\n buf.putBytes(D.bytes());\n buf.putBytes(I.bytes());\n for(var round = 0; round < iter; round++) {\n md.start();\n md.update(buf.getBytes());\n buf = md.digest();\n }\n\n /* b) Concatenate copies of Ai to create a string B of length v bytes (the\n final copy of Ai may be truncated to create B). */\n var B = new forge.util.ByteBuffer();\n for(l = 0; l < v; l++) {\n B.putByte(buf.at(l % u));\n }\n\n /* c) Treating I as a concatenation I0, I1, ..., Ik-1 of v-byte blocks,\n where k=ceil(s / v) + ceil(p / v), modify I by setting\n Ij=(Ij+B+1) mod 2v for each j. */\n var k = Math.ceil(s / v) + Math.ceil(p / v);\n var Inew = new forge.util.ByteBuffer();\n for(j = 0; j < k; j++) {\n var chunk = new forge.util.ByteBuffer(I.getBytes(v));\n var x = 0x1ff;\n for(l = B.length() - 1; l >= 0; l--) {\n x = x >> 8;\n x += B.at(l) + chunk.at(l);\n chunk.setAt(l, x & 0xff);\n }\n Inew.putBuffer(chunk);\n }\n I = Inew;\n\n /* Add Ai to A. */\n result.putBuffer(buf);\n }\n\n result.truncate(result.length() - n);\n return result;\n};\n\n/**\n * Get new Forge cipher object instance.\n *\n * @param oid the OID (in string notation).\n * @param params the ASN.1 params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipher = function(oid, params, password) {\n switch(oid) {\n case pki.oids['pkcs5PBES2']:\n return pki.pbe.getCipherForPBES2(oid, params, password);\n\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n return pki.pbe.getCipherForPKCS12PBE(oid, params, password);\n\n default:\n var error = new Error('Cannot read encrypted PBE data block. Unsupported OID.');\n error.oid = oid;\n error.supportedOids = [\n 'pkcs5PBES2',\n 'pbeWithSHAAnd3-KeyTripleDES-CBC',\n 'pbewithSHAAnd40BitRC2-CBC'\n ];\n throw error;\n }\n};\n\n/**\n * Get new Forge cipher object instance according to PBES2 params block.\n *\n * The returned cipher instance is already started using the IV\n * from PBES2 parameter block.\n *\n * @param oid the PKCS#5 PBKDF2 OID (in string notation).\n * @param params the ASN.1 PBES2-params object.\n * @param password the password to decrypt with.\n *\n * @return new cipher object instance.\n */\npki.pbe.getCipherForPBES2 = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, PBES2AlgorithmsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n // check oids\n oid = asn1.derToOid(capture.kdfOid);\n if(oid !== pki.oids['pkcs5PBKDF2']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported key derivation function OID.');\n error.oid = oid;\n error.supportedOids = ['pkcs5PBKDF2'];\n throw error;\n }\n oid = asn1.derToOid(capture.encOid);\n if(oid !== pki.oids['aes128-CBC'] &&\n oid !== pki.oids['aes192-CBC'] &&\n oid !== pki.oids['aes256-CBC'] &&\n oid !== pki.oids['des-EDE3-CBC'] &&\n oid !== pki.oids['desCBC']) {\n var error = new Error('Cannot read encrypted private key. ' +\n 'Unsupported encryption scheme OID.');\n error.oid = oid;\n error.supportedOids = [\n 'aes128-CBC', 'aes192-CBC', 'aes256-CBC', 'des-EDE3-CBC', 'desCBC'];\n throw error;\n }\n\n // set PBE params\n var salt = capture.kdfSalt;\n var count = forge.util.createBuffer(capture.kdfIterationCount);\n count = count.getInt(count.length() << 3);\n var dkLen;\n var cipherFn;\n switch(pki.oids[oid]) {\n case 'aes128-CBC':\n dkLen = 16;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes192-CBC':\n dkLen = 24;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'aes256-CBC':\n dkLen = 32;\n cipherFn = forge.aes.createDecryptionCipher;\n break;\n case 'des-EDE3-CBC':\n dkLen = 24;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n case 'desCBC':\n dkLen = 8;\n cipherFn = forge.des.createDecryptionCipher;\n break;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n\n // decrypt private key using pbe with chosen PRF and AES/DES\n var dk = forge.pkcs5.pbkdf2(password, salt, count, dkLen, md);\n var iv = capture.encIv;\n var cipher = cipherFn(dk);\n cipher.start(iv);\n\n return cipher;\n};\n\n/**\n * Get new Forge cipher object instance for PKCS#12 PBE.\n *\n * The returned cipher instance is already started using the key & IV\n * derived from the provided password and PKCS#12 PBE salt.\n *\n * @param oid The PKCS#12 PBE OID (in string notation).\n * @param params The ASN.1 PKCS#12 PBE-params object.\n * @param password The password to decrypt with.\n *\n * @return the new cipher object instance.\n */\npki.pbe.getCipherForPKCS12PBE = function(oid, params, password) {\n // get PBE params\n var capture = {};\n var errors = [];\n if(!asn1.validate(params, pkcs12PbeParamsValidator, capture, errors)) {\n var error = new Error('Cannot read password-based-encryption algorithm ' +\n 'parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.');\n error.errors = errors;\n throw error;\n }\n\n var salt = forge.util.createBuffer(capture.salt);\n var count = forge.util.createBuffer(capture.iterations);\n count = count.getInt(count.length() << 3);\n\n var dkLen, dIvLen, cipherFn;\n switch(oid) {\n case pki.oids['pbeWithSHAAnd3-KeyTripleDES-CBC']:\n dkLen = 24;\n dIvLen = 8;\n cipherFn = forge.des.startDecrypting;\n break;\n\n case pki.oids['pbewithSHAAnd40BitRC2-CBC']:\n dkLen = 5;\n dIvLen = 8;\n cipherFn = function(key, iv) {\n var cipher = forge.rc2.createDecryptionCipher(key, 40);\n cipher.start(iv, null);\n return cipher;\n };\n break;\n\n default:\n var error = new Error('Cannot read PKCS #12 PBE data block. Unsupported OID.');\n error.oid = oid;\n throw error;\n }\n\n // get PRF message digest\n var md = prfOidToMessageDigest(capture.prfOid);\n var key = pki.pbe.generatePkcs12Key(password, salt, 1, count, dkLen, md);\n md.start();\n var iv = pki.pbe.generatePkcs12Key(password, salt, 2, count, dIvLen, md);\n\n return cipherFn(key, iv);\n};\n\n/**\n * OpenSSL's legacy key derivation function.\n *\n * See: http://www.openssl.org/docs/crypto/EVP_BytesToKey.html\n *\n * @param password the password to derive the key from.\n * @param salt the salt to use, null for none.\n * @param dkLen the number of bytes needed for the derived key.\n * @param [options] the options to use:\n * [md] an optional message digest object to use.\n */\npki.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) {\n if(typeof md === 'undefined' || md === null) {\n if(!('md5' in forge.md)) {\n throw new Error('\"md5\" hash algorithm unavailable.');\n }\n md = forge.md.md5.create();\n }\n if(salt === null) {\n salt = '';\n }\n var digests = [hash(md, password + salt)];\n for(var length = 16, i = 1; length < dkLen; ++i, length += 16) {\n digests.push(hash(md, digests[i - 1] + password + salt));\n }\n return digests.join('').substr(0, dkLen);\n};\n\nfunction hash(md, bytes) {\n return md.start().update(bytes).digest().getBytes();\n}\n\nfunction prfOidToMessageDigest(prfOid) {\n // get PRF algorithm, default to SHA-1\n var prfAlgorithm;\n if(!prfOid) {\n prfAlgorithm = 'hmacWithSHA1';\n } else {\n prfAlgorithm = pki.oids[asn1.derToOid(prfOid)];\n if(!prfAlgorithm) {\n var error = new Error('Unsupported PRF OID.');\n error.oid = prfOid;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n }\n return prfAlgorithmToMessageDigest(prfAlgorithm);\n}\n\nfunction prfAlgorithmToMessageDigest(prfAlgorithm) {\n var factory = forge.md;\n switch(prfAlgorithm) {\n case 'hmacWithSHA224':\n factory = forge.md.sha512;\n case 'hmacWithSHA1':\n case 'hmacWithSHA256':\n case 'hmacWithSHA384':\n case 'hmacWithSHA512':\n prfAlgorithm = prfAlgorithm.substr(8).toLowerCase();\n break;\n default:\n var error = new Error('Unsupported PRF algorithm.');\n error.algorithm = prfAlgorithm;\n error.supported = [\n 'hmacWithSHA1', 'hmacWithSHA224', 'hmacWithSHA256', 'hmacWithSHA384',\n 'hmacWithSHA512'];\n throw error;\n }\n if(!factory || !(prfAlgorithm in factory)) {\n throw new Error('Unknown hash algorithm: ' + prfAlgorithm);\n }\n return factory[prfAlgorithm].create();\n}\n\nfunction createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) {\n var params = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // salt\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt),\n // iteration count\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n countBytes.getBytes())\n ]);\n // when PRF algorithm is not SHA-1 default, add key length and PRF algorithm\n if(prfAlgorithm !== 'hmacWithSHA1') {\n params.value.push(\n // key length\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(dkLen.toString(16))),\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids[prfAlgorithm]).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n }\n return params;\n}\n","/**\n * Password-Based Key-Derivation Function #2 implementation.\n *\n * See RFC 2898 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./hmac');\nrequire('./md');\nrequire('./util');\n\nvar pkcs5 = forge.pkcs5 = forge.pkcs5 || {};\n\nvar crypto;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript) {\n crypto = require('crypto');\n}\n\n/**\n * Derives a key from a password.\n *\n * @param p the password as a binary-encoded string of bytes.\n * @param s the salt as a binary-encoded string of bytes.\n * @param c the iteration count, a positive integer.\n * @param dkLen the intended length, in bytes, of the derived key,\n * (max: 2^32 - 1) * hash length of the PRF.\n * @param [md] the message digest (or algorithm identifier as a string) to use\n * in the PRF, defaults to SHA-1.\n * @param [callback(err, key)] presence triggers asynchronous version, called\n * once the operation completes.\n *\n * @return the derived key, as a binary-encoded string of bytes, for the\n * synchronous version (if no callback is specified).\n */\nmodule.exports = forge.pbkdf2 = pkcs5.pbkdf2 = function(\n p, s, c, dkLen, md, callback) {\n if(typeof md === 'function') {\n callback = md;\n md = null;\n }\n\n // use native implementation if possible and not disabled, note that\n // some node versions only support SHA-1, others allow digest to be changed\n if(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n crypto.pbkdf2 && (md === null || typeof md !== 'object') &&\n (crypto.pbkdf2Sync.length > 4 || (!md || md === 'sha1'))) {\n if(typeof md !== 'string') {\n // default prf to SHA-1\n md = 'sha1';\n }\n p = Buffer.from(p, 'binary');\n s = Buffer.from(s, 'binary');\n if(!callback) {\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2Sync(p, s, c, dkLen).toString('binary');\n }\n return crypto.pbkdf2Sync(p, s, c, dkLen, md).toString('binary');\n }\n if(crypto.pbkdf2Sync.length === 4) {\n return crypto.pbkdf2(p, s, c, dkLen, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n return crypto.pbkdf2(p, s, c, dkLen, md, function(err, key) {\n if(err) {\n return callback(err);\n }\n callback(null, key.toString('binary'));\n });\n }\n\n if(typeof md === 'undefined' || md === null) {\n // default prf to SHA-1\n md = 'sha1';\n }\n if(typeof md === 'string') {\n if(!(md in forge.md.algorithms)) {\n throw new Error('Unknown hash algorithm: ' + md);\n }\n md = forge.md[md].create();\n }\n\n var hLen = md.digestLength;\n\n /* 1. If dkLen > (2^32 - 1) * hLen, output \"derived key too long\" and\n stop. */\n if(dkLen > (0xFFFFFFFF * hLen)) {\n var err = new Error('Derived key is too long.');\n if(callback) {\n return callback(err);\n }\n throw err;\n }\n\n /* 2. Let len be the number of hLen-octet blocks in the derived key,\n rounding up, and let r be the number of octets in the last\n block:\n\n len = CEIL(dkLen / hLen),\n r = dkLen - (len - 1) * hLen. */\n var len = Math.ceil(dkLen / hLen);\n var r = dkLen - (len - 1) * hLen;\n\n /* 3. For each block of the derived key apply the function F defined\n below to the password P, the salt S, the iteration count c, and\n the block index to compute the block:\n\n T_1 = F(P, S, c, 1),\n T_2 = F(P, S, c, 2),\n ...\n T_len = F(P, S, c, len),\n\n where the function F is defined as the exclusive-or sum of the\n first c iterates of the underlying pseudorandom function PRF\n applied to the password P and the concatenation of the salt S\n and the block index i:\n\n F(P, S, c, i) = u_1 XOR u_2 XOR ... XOR u_c\n\n where\n\n u_1 = PRF(P, S || INT(i)),\n u_2 = PRF(P, u_1),\n ...\n u_c = PRF(P, u_{c-1}).\n\n Here, INT(i) is a four-octet encoding of the integer i, most\n significant octet first. */\n var prf = forge.hmac.create();\n prf.start(md, p);\n var dk = '';\n var xor, u_c, u_c1;\n\n // sync version\n if(!callback) {\n for(var i = 1; i <= len; ++i) {\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n for(var j = 2; j <= c; ++j) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n }\n /* 5. Output the derived key DK. */\n return dk;\n }\n\n // async version\n var i = 1, j;\n function outer() {\n if(i > len) {\n // done\n return callback(null, dk);\n }\n\n // PRF(P, S || INT(i)) (first iteration)\n prf.start(null, null);\n prf.update(s);\n prf.update(forge.util.int32ToBytes(i));\n xor = u_c1 = prf.digest().getBytes();\n\n // PRF(P, u_{c-1}) (other iterations)\n j = 2;\n inner();\n }\n\n function inner() {\n if(j <= c) {\n prf.start(null, null);\n prf.update(u_c1);\n u_c = prf.digest().getBytes();\n // F(p, s, c, i)\n xor = forge.util.xorBytes(xor, u_c, hLen);\n u_c1 = u_c;\n ++j;\n return forge.util.setImmediate(inner);\n }\n\n /* 4. Concatenate the blocks and extract the first dkLen octets to\n produce a derived key DK:\n\n DK = T_1 || T_2 || ... || T_len<0..r-1> */\n dk += (i < len) ? xor : xor.substr(0, r);\n\n ++i;\n outer();\n }\n\n outer();\n};\n","/**\n * Javascript implementation of basic PEM (Privacy Enhanced Mail) algorithms.\n *\n * See: RFC 1421.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2013-2014 Digital Bazaar, Inc.\n *\n * A Forge PEM object has the following fields:\n *\n * type: identifies the type of message (eg: \"RSA PRIVATE KEY\").\n *\n * procType: identifies the type of processing performed on the message,\n * it has two subfields: version and type, eg: 4,ENCRYPTED.\n *\n * contentDomain: identifies the type of content in the message, typically\n * only uses the value: \"RFC822\".\n *\n * dekInfo: identifies the message encryption algorithm and mode and includes\n * any parameters for the algorithm, it has two subfields: algorithm and\n * parameters, eg: DES-CBC,F8143EDE5960C597.\n *\n * headers: contains all other PEM encapsulated headers -- where order is\n * significant (for pairing data like recipient ID + key info).\n *\n * body: the binary-encoded body.\n */\nvar forge = require('./forge');\nrequire('./util');\n\n// shortcut for pem API\nvar pem = module.exports = forge.pem = forge.pem || {};\n\n/**\n * Encodes (serializes) the given PEM object.\n *\n * @param msg the PEM message object to encode.\n * @param options the options to use:\n * maxline the maximum characters per line for the body, (default: 64).\n *\n * @return the PEM-formatted string.\n */\npem.encode = function(msg, options) {\n options = options || {};\n var rval = '-----BEGIN ' + msg.type + '-----\\r\\n';\n\n // encode special headers\n var header;\n if(msg.procType) {\n header = {\n name: 'Proc-Type',\n values: [String(msg.procType.version), msg.procType.type]\n };\n rval += foldHeader(header);\n }\n if(msg.contentDomain) {\n header = {name: 'Content-Domain', values: [msg.contentDomain]};\n rval += foldHeader(header);\n }\n if(msg.dekInfo) {\n header = {name: 'DEK-Info', values: [msg.dekInfo.algorithm]};\n if(msg.dekInfo.parameters) {\n header.values.push(msg.dekInfo.parameters);\n }\n rval += foldHeader(header);\n }\n\n if(msg.headers) {\n // encode all other headers\n for(var i = 0; i < msg.headers.length; ++i) {\n rval += foldHeader(msg.headers[i]);\n }\n }\n\n // terminate header\n if(msg.procType) {\n rval += '\\r\\n';\n }\n\n // add body\n rval += forge.util.encode64(msg.body, options.maxline || 64) + '\\r\\n';\n\n rval += '-----END ' + msg.type + '-----\\r\\n';\n return rval;\n};\n\n/**\n * Decodes (deserializes) all PEM messages found in the given string.\n *\n * @param str the PEM-formatted string to decode.\n *\n * @return the PEM message objects in an array.\n */\npem.decode = function(str) {\n var rval = [];\n\n // split string into PEM messages (be lenient w/EOF on BEGIN line)\n var rMessage = /\\s*-----BEGIN ([A-Z0-9- ]+)-----\\r?\\n?([\\x21-\\x7e\\s]+?(?:\\r?\\n\\r?\\n))?([:A-Za-z0-9+\\/=\\s]+?)-----END \\1-----/g;\n var rHeader = /([\\x21-\\x7e]+):\\s*([\\x21-\\x7e\\s^:]+)/;\n var rCRLF = /\\r?\\n/;\n var match;\n while(true) {\n match = rMessage.exec(str);\n if(!match) {\n break;\n }\n\n // accept \"NEW CERTIFICATE REQUEST\" as \"CERTIFICATE REQUEST\"\n // https://datatracker.ietf.org/doc/html/rfc7468#section-7\n var type = match[1];\n if(type === 'NEW CERTIFICATE REQUEST') {\n type = 'CERTIFICATE REQUEST';\n }\n\n var msg = {\n type: type,\n procType: null,\n contentDomain: null,\n dekInfo: null,\n headers: [],\n body: forge.util.decode64(match[3])\n };\n rval.push(msg);\n\n // no headers\n if(!match[2]) {\n continue;\n }\n\n // parse headers\n var lines = match[2].split(rCRLF);\n var li = 0;\n while(match && li < lines.length) {\n // get line, trim any rhs whitespace\n var line = lines[li].replace(/\\s+$/, '');\n\n // RFC2822 unfold any following folded lines\n for(var nl = li + 1; nl < lines.length; ++nl) {\n var next = lines[nl];\n if(!/\\s/.test(next[0])) {\n break;\n }\n line += next;\n li = nl;\n }\n\n // parse header\n match = line.match(rHeader);\n if(match) {\n var header = {name: match[1], values: []};\n var values = match[2].split(',');\n for(var vi = 0; vi < values.length; ++vi) {\n header.values.push(ltrim(values[vi]));\n }\n\n // Proc-Type must be the first header\n if(!msg.procType) {\n if(header.name !== 'Proc-Type') {\n throw new Error('Invalid PEM formatted message. The first ' +\n 'encapsulated header must be \"Proc-Type\".');\n } else if(header.values.length !== 2) {\n throw new Error('Invalid PEM formatted message. The \"Proc-Type\" ' +\n 'header must have two subfields.');\n }\n msg.procType = {version: values[0], type: values[1]};\n } else if(!msg.contentDomain && header.name === 'Content-Domain') {\n // special-case Content-Domain\n msg.contentDomain = values[0] || '';\n } else if(!msg.dekInfo && header.name === 'DEK-Info') {\n // special-case DEK-Info\n if(header.values.length === 0) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must have at least one subfield.');\n }\n msg.dekInfo = {algorithm: values[0], parameters: values[1] || null};\n } else {\n msg.headers.push(header);\n }\n }\n\n ++li;\n }\n\n if(msg.procType === 'ENCRYPTED' && !msg.dekInfo) {\n throw new Error('Invalid PEM formatted message. The \"DEK-Info\" ' +\n 'header must be present if \"Proc-Type\" is \"ENCRYPTED\".');\n }\n }\n\n if(rval.length === 0) {\n throw new Error('Invalid PEM formatted message.');\n }\n\n return rval;\n};\n\nfunction foldHeader(header) {\n var rval = header.name + ': ';\n\n // ensure values with CRLF are folded\n var values = [];\n var insertSpace = function(match, $1) {\n return ' ' + $1;\n };\n for(var i = 0; i < header.values.length; ++i) {\n values.push(header.values[i].replace(/^(\\S+\\r\\n)/, insertSpace));\n }\n rval += values.join(',') + '\\r\\n';\n\n // do folding\n var length = 0;\n var candidate = -1;\n for(var i = 0; i < rval.length; ++i, ++length) {\n if(length > 65 && candidate !== -1) {\n var insert = rval[candidate];\n if(insert === ',') {\n ++candidate;\n rval = rval.substr(0, candidate) + '\\r\\n ' + rval.substr(candidate);\n } else {\n rval = rval.substr(0, candidate) +\n '\\r\\n' + insert + rval.substr(candidate + 1);\n }\n length = (i - candidate - 1);\n candidate = -1;\n ++i;\n } else if(rval[i] === ' ' || rval[i] === '\\t' || rval[i] === ',') {\n candidate = i;\n }\n }\n\n return rval;\n}\n\nfunction ltrim(str) {\n return str.replace(/^\\s+/, '');\n}\n","/**\n * Partial implementation of PKCS#1 v2.2: RSA-OEAP\n *\n * Modified but based on the following MIT and BSD licensed code:\n *\n * https://github.com/kjur/jsjws/blob/master/rsa.js:\n *\n * The 'jsjws'(JSON Web Signature JavaScript Library) License\n *\n * Copyright (c) 2012 Kenji Urushima\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * http://webrsa.cvs.sourceforge.net/viewvc/webrsa/Client/RSAES-OAEP.js?content-type=text%2Fplain:\n *\n * RSAES-OAEP.js\n * $Id: RSAES-OAEP.js,v 1.1.1.1 2003/03/19 15:37:20 ellispritchard Exp $\n * JavaScript Implementation of PKCS #1 v2.1 RSA CRYPTOGRAPHY STANDARD (RSA Laboratories, June 14, 2002)\n * Copyright (C) Ellis Pritchard, Guardian Unlimited 2003.\n * Contact: ellis@nukinetics.com\n * Distributed under the BSD License.\n *\n * Official documentation: http://www.rsa.com/rsalabs/node.asp?id=2125\n *\n * @author Evan Jones (http://evanjones.ca/)\n * @author Dave Longley\n *\n * Copyright (c) 2013-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./random');\nrequire('./sha1');\n\n// shortcut for PKCS#1 API\nvar pkcs1 = module.exports = forge.pkcs1 = forge.pkcs1 || {};\n\n/**\n * Encode the given RSAES-OAEP message (M) using key, with optional label (L)\n * and seed.\n *\n * This method does not perform RSA encryption, it only encodes the message\n * using RSAES-OAEP.\n *\n * @param key the RSA key to use.\n * @param message the message to encode.\n * @param options the options to use:\n * label an optional label to use.\n * seed the seed to use.\n * md the message digest object to use, undefined for SHA-1.\n * mgf1 optional mgf1 parameters:\n * md the message digest object to use for MGF1.\n *\n * @return the encoded message bytes.\n */\npkcs1.encode_rsa_oaep = function(key, message, options) {\n // parse arguments\n var label;\n var seed;\n var md;\n var mgf1Md;\n // legacy args (label, seed, md)\n if(typeof options === 'string') {\n label = options;\n seed = arguments[3] || undefined;\n md = arguments[4] || undefined;\n } else if(options) {\n label = options.label || undefined;\n seed = options.seed || undefined;\n md = options.md || undefined;\n if(options.mgf1 && options.mgf1.md) {\n mgf1Md = options.mgf1.md;\n }\n }\n\n // default OAEP to SHA-1 message digest\n if(!md) {\n md = forge.md.sha1.create();\n } else {\n md.start();\n }\n\n // default MGF-1 to same as OAEP\n if(!mgf1Md) {\n mgf1Md = md;\n }\n\n // compute length in bytes and check output\n var keyLength = Math.ceil(key.n.bitLength() / 8);\n var maxLength = keyLength - 2 * md.digestLength - 2;\n if(message.length > maxLength) {\n var error = new Error('RSAES-OAEP input message length is too long.');\n error.length = message.length;\n error.maxLength = maxLength;\n throw error;\n }\n\n if(!label) {\n label = '';\n }\n md.update(label, 'raw');\n var lHash = md.digest();\n\n var PS = '';\n var PS_length = maxLength - message.length;\n for(var i = 0; i < PS_length; i++) {\n PS += '\\x00';\n }\n\n var DB = lHash.getBytes() + PS + '\\x01' + message;\n\n if(!seed) {\n seed = forge.random.getBytes(md.digestLength);\n } else if(seed.length !== md.digestLength) {\n var error = new Error('Invalid RSAES-OAEP seed. The seed length must ' +\n 'match the digest length.');\n error.seedLength = seed.length;\n error.digestLength = md.digestLength;\n throw error;\n }\n\n var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);\n var maskedDB = forge.util.xorBytes(DB, dbMask, DB.length);\n\n var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);\n var maskedSeed = forge.util.xorBytes(seed, seedMask, seed.length);\n\n // return encoded message\n return '\\x00' + maskedSeed + maskedDB;\n};\n\n/**\n * Decode the given RSAES-OAEP encoded message (EM) using key, with optional\n * label (L).\n *\n * This method does not perform RSA decryption, it only decodes the message\n * using RSAES-OAEP.\n *\n * @param key the RSA key to use.\n * @param em the encoded message to decode.\n * @param options the options to use:\n * label an optional label to use.\n * md the message digest object to use for OAEP, undefined for SHA-1.\n * mgf1 optional mgf1 parameters:\n * md the message digest object to use for MGF1.\n *\n * @return the decoded message bytes.\n */\npkcs1.decode_rsa_oaep = function(key, em, options) {\n // parse args\n var label;\n var md;\n var mgf1Md;\n // legacy args\n if(typeof options === 'string') {\n label = options;\n md = arguments[3] || undefined;\n } else if(options) {\n label = options.label || undefined;\n md = options.md || undefined;\n if(options.mgf1 && options.mgf1.md) {\n mgf1Md = options.mgf1.md;\n }\n }\n\n // compute length in bytes\n var keyLength = Math.ceil(key.n.bitLength() / 8);\n\n if(em.length !== keyLength) {\n var error = new Error('RSAES-OAEP encoded message length is invalid.');\n error.length = em.length;\n error.expectedLength = keyLength;\n throw error;\n }\n\n // default OAEP to SHA-1 message digest\n if(md === undefined) {\n md = forge.md.sha1.create();\n } else {\n md.start();\n }\n\n // default MGF-1 to same as OAEP\n if(!mgf1Md) {\n mgf1Md = md;\n }\n\n if(keyLength < 2 * md.digestLength + 2) {\n throw new Error('RSAES-OAEP key is too short for the hash function.');\n }\n\n if(!label) {\n label = '';\n }\n md.update(label, 'raw');\n var lHash = md.digest().getBytes();\n\n // split the message into its parts\n var y = em.charAt(0);\n var maskedSeed = em.substring(1, md.digestLength + 1);\n var maskedDB = em.substring(1 + md.digestLength);\n\n var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md);\n var seed = forge.util.xorBytes(maskedSeed, seedMask, maskedSeed.length);\n\n var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md);\n var db = forge.util.xorBytes(maskedDB, dbMask, maskedDB.length);\n\n var lHashPrime = db.substring(0, md.digestLength);\n\n // constant time check that all values match what is expected\n var error = (y !== '\\x00');\n\n // constant time check lHash vs lHashPrime\n for(var i = 0; i < md.digestLength; ++i) {\n error |= (lHash.charAt(i) !== lHashPrime.charAt(i));\n }\n\n // \"constant time\" find the 0x1 byte separating the padding (zeros) from the\n // message\n // TODO: It must be possible to do this in a better/smarter way?\n var in_ps = 1;\n var index = md.digestLength;\n for(var j = md.digestLength; j < db.length; j++) {\n var code = db.charCodeAt(j);\n\n var is_0 = (code & 0x1) ^ 0x1;\n\n // non-zero if not 0 or 1 in the ps section\n var error_mask = in_ps ? 0xfffe : 0x0000;\n error |= (code & error_mask);\n\n // latch in_ps to zero after we find 0x1\n in_ps = in_ps & is_0;\n index += in_ps;\n }\n\n if(error || db.charCodeAt(index) !== 0x1) {\n throw new Error('Invalid RSAES-OAEP padding.');\n }\n\n return db.substring(index + 1);\n};\n\nfunction rsa_mgf1(seed, maskLength, hash) {\n // default to SHA-1 message digest\n if(!hash) {\n hash = forge.md.sha1.create();\n }\n var t = '';\n var count = Math.ceil(maskLength / hash.digestLength);\n for(var i = 0; i < count; ++i) {\n var c = String.fromCharCode(\n (i >> 24) & 0xFF, (i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF);\n hash.start();\n hash.update(seed + c);\n t += hash.digest().getBytes();\n }\n return t.substring(0, maskLength);\n}\n","/**\n * Javascript implementation of PKCS#12.\n *\n * @author Dave Longley\n * @author Stefan Siegl \n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl \n *\n * The ASN.1 representation of PKCS#12 is as follows\n * (see ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12-tc1.pdf for details)\n *\n * PFX ::= SEQUENCE {\n * version INTEGER {v3(3)}(v3,...),\n * authSafe ContentInfo,\n * macData MacData OPTIONAL\n * }\n *\n * MacData ::= SEQUENCE {\n * mac DigestInfo,\n * macSalt OCTET STRING,\n * iterations INTEGER DEFAULT 1\n * }\n * Note: The iterations default is for historical reasons and its use is\n * deprecated. A higher value, like 1024, is recommended.\n *\n * DigestInfo is defined in PKCS#7 as follows:\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n *\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of SHA1 there is none.\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * Digest ::= OCTET STRING\n *\n *\n * ContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL\n * }\n *\n * ContentType ::= OBJECT IDENTIFIER\n *\n * AuthenticatedSafe ::= SEQUENCE OF ContentInfo\n * -- Data if unencrypted\n * -- EncryptedData if password-encrypted\n * -- EnvelopedData if public key-encrypted\n *\n *\n * SafeContents ::= SEQUENCE OF SafeBag\n *\n * SafeBag ::= SEQUENCE {\n * bagId BAG-TYPE.&id ({PKCS12BagSet})\n * bagValue [0] EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}),\n * bagAttributes SET OF PKCS12Attribute OPTIONAL\n * }\n *\n * PKCS12Attribute ::= SEQUENCE {\n * attrId ATTRIBUTE.&id ({PKCS12AttrSet}),\n * attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})\n * } -- This type is compatible with the X.500 type 'Attribute'\n *\n * PKCS12AttrSet ATTRIBUTE ::= {\n * friendlyName | -- from PKCS #9\n * localKeyId, -- from PKCS #9\n * ... -- Other attributes are allowed\n * }\n *\n * CertBag ::= SEQUENCE {\n * certId BAG-TYPE.&id ({CertTypes}),\n * certValue [0] EXPLICIT BAG-TYPE.&Type ({CertTypes}{@certId})\n * }\n *\n * x509Certificate BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {certTypes 1}}\n * -- DER-encoded X.509 certificate stored in OCTET STRING\n *\n * sdsiCertificate BAG-TYPE ::= {IA5String IDENTIFIED BY {certTypes 2}}\n * -- Base64-encoded SDSI certificate stored in IA5String\n *\n * CertTypes BAG-TYPE ::= {\n * x509Certificate |\n * sdsiCertificate,\n * ... -- For future extensions\n * }\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./hmac');\nrequire('./oids');\nrequire('./pkcs7asn1');\nrequire('./pbe');\nrequire('./random');\nrequire('./rsa');\nrequire('./sha1');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for asn.1 & PKI API\nvar asn1 = forge.asn1;\nvar pki = forge.pki;\n\n// shortcut for PKCS#12 API\nvar p12 = module.exports = forge.pkcs12 = forge.pkcs12 || {};\n\nvar contentInfoValidator = {\n name: 'ContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // a ContentInfo\n constructed: true,\n value: [{\n name: 'ContentInfo.contentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'ContentInfo.content',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n captureAsn1: 'content'\n }]\n};\n\nvar pfxValidator = {\n name: 'PFX',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'PFX.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n },\n contentInfoValidator, {\n name: 'PFX.macData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'mac',\n value: [{\n name: 'PFX.macData.mac',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // DigestInfo\n constructed: true,\n value: [{\n name: 'PFX.macData.mac.digestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE, // DigestAlgorithmIdentifier\n constructed: true,\n value: [{\n name: 'PFX.macData.mac.digestAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'macAlgorithm'\n }, {\n name: 'PFX.macData.mac.digestAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n captureAsn1: 'macAlgorithmParameters'\n }]\n }, {\n name: 'PFX.macData.mac.digest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'macDigest'\n }]\n }, {\n name: 'PFX.macData.macSalt',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'macSalt'\n }, {\n name: 'PFX.macData.iterations',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n optional: true,\n capture: 'macIterations'\n }]\n }]\n};\n\nvar safeBagValidator = {\n name: 'SafeBag',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SafeBag.bagId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'bagId'\n }, {\n name: 'SafeBag.bagValue',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n captureAsn1: 'bagValue'\n }, {\n name: 'SafeBag.bagAttributes',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n optional: true,\n capture: 'bagAttributes'\n }]\n};\n\nvar attributeValidator = {\n name: 'Attribute',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Attribute.attrId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'oid'\n }, {\n name: 'Attribute.attrValues',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n capture: 'values'\n }]\n};\n\nvar certBagValidator = {\n name: 'CertBag',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'CertBag.certId',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certId'\n }, {\n name: 'CertBag.certValue',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n constructed: true,\n /* So far we only support X.509 certificates (which are wrapped in\n an OCTET STRING, hence hard code that here). */\n value: [{\n name: 'CertBag.certValue[0]',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.OCTETSTRING,\n constructed: false,\n capture: 'cert'\n }]\n }]\n};\n\n/**\n * Search SafeContents structure for bags with matching attributes.\n *\n * The search can optionally be narrowed by a certain bag type.\n *\n * @param safeContents the SafeContents structure to search in.\n * @param attrName the name of the attribute to compare against.\n * @param attrValue the attribute value to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of matching bags.\n */\nfunction _getBagsByAttribute(safeContents, attrName, attrValue, bagType) {\n var result = [];\n\n for(var i = 0; i < safeContents.length; i++) {\n for(var j = 0; j < safeContents[i].safeBags.length; j++) {\n var bag = safeContents[i].safeBags[j];\n if(bagType !== undefined && bag.type !== bagType) {\n continue;\n }\n // only filter by bag type, no attribute specified\n if(attrName === null) {\n result.push(bag);\n continue;\n }\n if(bag.attributes[attrName] !== undefined &&\n bag.attributes[attrName].indexOf(attrValue) >= 0) {\n result.push(bag);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Converts a PKCS#12 PFX in ASN.1 notation into a PFX object.\n *\n * @param obj The PKCS#12 PFX in ASN.1 notation.\n * @param strict true to use strict DER decoding, false not to (default: true).\n * @param {String} password Password to decrypt with (optional).\n *\n * @return PKCS#12 PFX object.\n */\np12.pkcs12FromAsn1 = function(obj, strict, password) {\n // handle args\n if(typeof strict === 'string') {\n password = strict;\n strict = true;\n } else if(strict === undefined) {\n strict = true;\n }\n\n // validate PFX and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, pfxValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 PFX. ' +\n 'ASN.1 object is not an PKCS#12 PFX.');\n error.errors = error;\n throw error;\n }\n\n var pfx = {\n version: capture.version.charCodeAt(0),\n safeContents: [],\n\n /**\n * Gets bags with matching attributes.\n *\n * @param filter the attributes to filter by:\n * [localKeyId] the localKeyId to search for.\n * [localKeyIdHex] the localKeyId in hex to search for.\n * [friendlyName] the friendly name to search for.\n * [bagType] bag type to narrow each attribute search by.\n *\n * @return a map of attribute type to an array of matching bags or, if no\n * attribute was given but a bag type, the map key will be the\n * bag type.\n */\n getBags: function(filter) {\n var rval = {};\n\n var localKeyId;\n if('localKeyId' in filter) {\n localKeyId = filter.localKeyId;\n } else if('localKeyIdHex' in filter) {\n localKeyId = forge.util.hexToBytes(filter.localKeyIdHex);\n }\n\n // filter on bagType only\n if(localKeyId === undefined && !('friendlyName' in filter) &&\n 'bagType' in filter) {\n rval[filter.bagType] = _getBagsByAttribute(\n pfx.safeContents, null, null, filter.bagType);\n }\n\n if(localKeyId !== undefined) {\n rval.localKeyId = _getBagsByAttribute(\n pfx.safeContents, 'localKeyId',\n localKeyId, filter.bagType);\n }\n if('friendlyName' in filter) {\n rval.friendlyName = _getBagsByAttribute(\n pfx.safeContents, 'friendlyName',\n filter.friendlyName, filter.bagType);\n }\n\n return rval;\n },\n\n /**\n * DEPRECATED: use getBags() instead.\n *\n * Get bags with matching friendlyName attribute.\n *\n * @param friendlyName the friendly name to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of bags with matching friendlyName attribute.\n */\n getBagsByFriendlyName: function(friendlyName, bagType) {\n return _getBagsByAttribute(\n pfx.safeContents, 'friendlyName', friendlyName, bagType);\n },\n\n /**\n * DEPRECATED: use getBags() instead.\n *\n * Get bags with matching localKeyId attribute.\n *\n * @param localKeyId the localKeyId to search for.\n * @param [bagType] bag type to narrow search by.\n *\n * @return an array of bags with matching localKeyId attribute.\n */\n getBagsByLocalKeyId: function(localKeyId, bagType) {\n return _getBagsByAttribute(\n pfx.safeContents, 'localKeyId', localKeyId, bagType);\n }\n };\n\n if(capture.version.charCodeAt(0) !== 3) {\n var error = new Error('PKCS#12 PFX of version other than 3 not supported.');\n error.version = capture.version.charCodeAt(0);\n throw error;\n }\n\n if(asn1.derToOid(capture.contentType) !== pki.oids.data) {\n var error = new Error('Only PKCS#12 PFX in password integrity mode supported.');\n error.oid = asn1.derToOid(capture.contentType);\n throw error;\n }\n\n var data = capture.content.value[0];\n if(data.tagClass !== asn1.Class.UNIVERSAL ||\n data.type !== asn1.Type.OCTETSTRING) {\n throw new Error('PKCS#12 authSafe content data is not an OCTET STRING.');\n }\n data = _decodePkcs7Data(data);\n\n // check for MAC\n if(capture.mac) {\n var md = null;\n var macKeyBytes = 0;\n var macAlgorithm = asn1.derToOid(capture.macAlgorithm);\n switch(macAlgorithm) {\n case pki.oids.sha1:\n md = forge.md.sha1.create();\n macKeyBytes = 20;\n break;\n case pki.oids.sha256:\n md = forge.md.sha256.create();\n macKeyBytes = 32;\n break;\n case pki.oids.sha384:\n md = forge.md.sha384.create();\n macKeyBytes = 48;\n break;\n case pki.oids.sha512:\n md = forge.md.sha512.create();\n macKeyBytes = 64;\n break;\n case pki.oids.md5:\n md = forge.md.md5.create();\n macKeyBytes = 16;\n break;\n }\n if(md === null) {\n throw new Error('PKCS#12 uses unsupported MAC algorithm: ' + macAlgorithm);\n }\n\n // verify MAC (iterations default to 1)\n var macSalt = new forge.util.ByteBuffer(capture.macSalt);\n var macIterations = (('macIterations' in capture) ?\n parseInt(forge.util.bytesToHex(capture.macIterations), 16) : 1);\n var macKey = p12.generateKey(\n password, macSalt, 3, macIterations, macKeyBytes, md);\n var mac = forge.hmac.create();\n mac.start(md, macKey);\n mac.update(data.value);\n var macValue = mac.getMac();\n if(macValue.getBytes() !== capture.macDigest) {\n throw new Error('PKCS#12 MAC could not be verified. Invalid password?');\n }\n }\n\n _decodeAuthenticatedSafe(pfx, data.value, strict, password);\n return pfx;\n};\n\n/**\n * Decodes PKCS#7 Data. PKCS#7 (RFC 2315) defines \"Data\" as an OCTET STRING,\n * but it is sometimes an OCTET STRING that is composed/constructed of chunks,\n * each its own OCTET STRING. This is BER-encoding vs. DER-encoding. This\n * function transforms this corner-case into the usual simple,\n * non-composed/constructed OCTET STRING.\n *\n * This function may be moved to ASN.1 at some point to better deal with\n * more BER-encoding issues, should they arise.\n *\n * @param data the ASN.1 Data object to transform.\n */\nfunction _decodePkcs7Data(data) {\n // handle special case of \"chunked\" data content: an octet string composed\n // of other octet strings\n if(data.composed || data.constructed) {\n var value = forge.util.createBuffer();\n for(var i = 0; i < data.value.length; ++i) {\n value.putBytes(data.value[i].value);\n }\n data.composed = data.constructed = false;\n data.value = value.getBytes();\n }\n return data;\n}\n\n/**\n * Decode PKCS#12 AuthenticatedSafe (BER encoded) into PFX object.\n *\n * The AuthenticatedSafe is a BER-encoded SEQUENCE OF ContentInfo.\n *\n * @param pfx The PKCS#12 PFX object to fill.\n * @param {String} authSafe BER-encoded AuthenticatedSafe.\n * @param strict true to use strict DER decoding, false not to.\n * @param {String} password Password to decrypt with (optional).\n */\nfunction _decodeAuthenticatedSafe(pfx, authSafe, strict, password) {\n authSafe = asn1.fromDer(authSafe, strict); /* actually it's BER encoded */\n\n if(authSafe.tagClass !== asn1.Class.UNIVERSAL ||\n authSafe.type !== asn1.Type.SEQUENCE ||\n authSafe.constructed !== true) {\n throw new Error('PKCS#12 AuthenticatedSafe expected to be a ' +\n 'SEQUENCE OF ContentInfo');\n }\n\n for(var i = 0; i < authSafe.value.length; i++) {\n var contentInfo = authSafe.value[i];\n\n // validate contentInfo and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(contentInfo, contentInfoValidator, capture, errors)) {\n var error = new Error('Cannot read ContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var obj = {\n encrypted: false\n };\n var safeContents = null;\n var data = capture.content.value[0];\n switch(asn1.derToOid(capture.contentType)) {\n case pki.oids.data:\n if(data.tagClass !== asn1.Class.UNIVERSAL ||\n data.type !== asn1.Type.OCTETSTRING) {\n throw new Error('PKCS#12 SafeContents Data is not an OCTET STRING.');\n }\n safeContents = _decodePkcs7Data(data).value;\n break;\n case pki.oids.encryptedData:\n safeContents = _decryptSafeContents(data, password);\n obj.encrypted = true;\n break;\n default:\n var error = new Error('Unsupported PKCS#12 contentType.');\n error.contentType = asn1.derToOid(capture.contentType);\n throw error;\n }\n\n obj.safeBags = _decodeSafeContents(safeContents, strict, password);\n pfx.safeContents.push(obj);\n }\n}\n\n/**\n * Decrypt PKCS#7 EncryptedData structure.\n *\n * @param data ASN.1 encoded EncryptedContentInfo object.\n * @param password The user-provided password.\n *\n * @return The decrypted SafeContents (ASN.1 object).\n */\nfunction _decryptSafeContents(data, password) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(\n data, forge.pkcs7.asn1.encryptedDataValidator, capture, errors)) {\n var error = new Error('Cannot read EncryptedContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var oid = asn1.derToOid(capture.contentType);\n if(oid !== pki.oids.data) {\n var error = new Error(\n 'PKCS#12 EncryptedContentInfo ContentType is not Data.');\n error.oid = oid;\n throw error;\n }\n\n // get cipher\n oid = asn1.derToOid(capture.encAlgorithm);\n var cipher = pki.pbe.getCipher(oid, capture.encParameter, password);\n\n // get encrypted data\n var encryptedContentAsn1 = _decodePkcs7Data(capture.encryptedContentAsn1);\n var encrypted = forge.util.createBuffer(encryptedContentAsn1.value);\n\n cipher.update(encrypted);\n if(!cipher.finish()) {\n throw new Error('Failed to decrypt PKCS#12 SafeContents.');\n }\n\n return cipher.output.getBytes();\n}\n\n/**\n * Decode PKCS#12 SafeContents (BER-encoded) into array of Bag objects.\n *\n * The safeContents is a BER-encoded SEQUENCE OF SafeBag.\n *\n * @param {String} safeContents BER-encoded safeContents.\n * @param strict true to use strict DER decoding, false not to.\n * @param {String} password Password to decrypt with (optional).\n *\n * @return {Array} Array of Bag objects.\n */\nfunction _decodeSafeContents(safeContents, strict, password) {\n // if strict and no safe contents, return empty safes\n if(!strict && safeContents.length === 0) {\n return [];\n }\n\n // actually it's BER-encoded\n safeContents = asn1.fromDer(safeContents, strict);\n\n if(safeContents.tagClass !== asn1.Class.UNIVERSAL ||\n safeContents.type !== asn1.Type.SEQUENCE ||\n safeContents.constructed !== true) {\n throw new Error(\n 'PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag.');\n }\n\n var res = [];\n for(var i = 0; i < safeContents.value.length; i++) {\n var safeBag = safeContents.value[i];\n\n // validate SafeBag and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(safeBag, safeBagValidator, capture, errors)) {\n var error = new Error('Cannot read SafeBag.');\n error.errors = errors;\n throw error;\n }\n\n /* Create bag object and push to result array. */\n var bag = {\n type: asn1.derToOid(capture.bagId),\n attributes: _decodeBagAttributes(capture.bagAttributes)\n };\n res.push(bag);\n\n var validator, decoder;\n var bagAsn1 = capture.bagValue.value[0];\n switch(bag.type) {\n case pki.oids.pkcs8ShroudedKeyBag:\n /* bagAsn1 has a EncryptedPrivateKeyInfo, which we need to decrypt.\n Afterwards we can handle it like a keyBag,\n which is a PrivateKeyInfo. */\n bagAsn1 = pki.decryptPrivateKeyInfo(bagAsn1, password);\n if(bagAsn1 === null) {\n throw new Error(\n 'Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?');\n }\n\n /* fall through */\n case pki.oids.keyBag:\n /* A PKCS#12 keyBag is a simple PrivateKeyInfo as understood by our\n PKI module, hence we don't have to do validation/capturing here,\n just pass what we already got. */\n try {\n bag.key = pki.privateKeyFromAsn1(bagAsn1);\n } catch(e) {\n // ignore unknown key type, pass asn1 value\n bag.key = null;\n bag.asn1 = bagAsn1;\n }\n continue; /* Nothing more to do. */\n\n case pki.oids.certBag:\n /* A PKCS#12 certBag can wrap both X.509 and sdsi certificates.\n Therefore put the SafeBag content through another validator to\n capture the fields. Afterwards check & store the results. */\n validator = certBagValidator;\n decoder = function() {\n if(asn1.derToOid(capture.certId) !== pki.oids.x509Certificate) {\n var error = new Error(\n 'Unsupported certificate type, only X.509 supported.');\n error.oid = asn1.derToOid(capture.certId);\n throw error;\n }\n\n // true=produce cert hash\n var certAsn1 = asn1.fromDer(capture.cert, strict);\n try {\n bag.cert = pki.certificateFromAsn1(certAsn1, true);\n } catch(e) {\n // ignore unknown cert type, pass asn1 value\n bag.cert = null;\n bag.asn1 = certAsn1;\n }\n };\n break;\n\n default:\n var error = new Error('Unsupported PKCS#12 SafeBag type.');\n error.oid = bag.type;\n throw error;\n }\n\n /* Validate SafeBag value (i.e. CertBag, etc.) and capture data if needed. */\n if(validator !== undefined &&\n !asn1.validate(bagAsn1, validator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 ' + validator.name);\n error.errors = errors;\n throw error;\n }\n\n /* Call decoder function from above to store the results. */\n decoder();\n }\n\n return res;\n}\n\n/**\n * Decode PKCS#12 SET OF PKCS12Attribute into JavaScript object.\n *\n * @param attributes SET OF PKCS12Attribute (ASN.1 object).\n *\n * @return the decoded attributes.\n */\nfunction _decodeBagAttributes(attributes) {\n var decodedAttrs = {};\n\n if(attributes !== undefined) {\n for(var i = 0; i < attributes.length; ++i) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(attributes[i], attributeValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#12 BagAttribute.');\n error.errors = errors;\n throw error;\n }\n\n var oid = asn1.derToOid(capture.oid);\n if(pki.oids[oid] === undefined) {\n // unsupported attribute type, ignore.\n continue;\n }\n\n decodedAttrs[pki.oids[oid]] = [];\n for(var j = 0; j < capture.values.length; ++j) {\n decodedAttrs[pki.oids[oid]].push(capture.values[j].value);\n }\n }\n }\n\n return decodedAttrs;\n}\n\n/**\n * Wraps a private key and certificate in a PKCS#12 PFX wrapper. If a\n * password is provided then the private key will be encrypted.\n *\n * An entire certificate chain may also be included. To do this, pass\n * an array for the \"cert\" parameter where the first certificate is\n * the one that is paired with the private key and each subsequent one\n * verifies the previous one. The certificates may be in PEM format or\n * have been already parsed by Forge.\n *\n * @todo implement password-based-encryption for the whole package\n *\n * @param key the private key.\n * @param cert the certificate (may be an array of certificates in order\n * to specify a certificate chain).\n * @param password the password to use, null for none.\n * @param options:\n * algorithm the encryption algorithm to use\n * ('aes128', 'aes192', 'aes256', '3des'), defaults to 'aes128'.\n * count the iteration count to use.\n * saltSize the salt size to use.\n * useMac true to include a MAC, false not to, defaults to true.\n * localKeyId the local key ID to use, in hex.\n * friendlyName the friendly name to use.\n * generateLocalKeyId true to generate a random local key ID,\n * false not to, defaults to true.\n *\n * @return the PKCS#12 PFX ASN.1 object.\n */\np12.toPkcs12Asn1 = function(key, cert, password, options) {\n // set default options\n options = options || {};\n options.saltSize = options.saltSize || 8;\n options.count = options.count || 2048;\n options.algorithm = options.algorithm || options.encAlgorithm || 'aes128';\n if(!('useMac' in options)) {\n options.useMac = true;\n }\n if(!('localKeyId' in options)) {\n options.localKeyId = null;\n }\n if(!('generateLocalKeyId' in options)) {\n options.generateLocalKeyId = true;\n }\n\n var localKeyId = options.localKeyId;\n var bagAttrs;\n if(localKeyId !== null) {\n localKeyId = forge.util.hexToBytes(localKeyId);\n } else if(options.generateLocalKeyId) {\n // use SHA-1 of paired cert, if available\n if(cert) {\n var pairedCert = forge.util.isArray(cert) ? cert[0] : cert;\n if(typeof pairedCert === 'string') {\n pairedCert = pki.certificateFromPem(pairedCert);\n }\n var sha1 = forge.md.sha1.create();\n sha1.update(asn1.toDer(pki.certificateToAsn1(pairedCert)).getBytes());\n localKeyId = sha1.digest().getBytes();\n } else {\n // FIXME: consider using SHA-1 of public key (which can be generated\n // from private key components), see: cert.generateSubjectKeyIdentifier\n // generate random bytes\n localKeyId = forge.random.getBytes(20);\n }\n }\n\n var attrs = [];\n if(localKeyId !== null) {\n attrs.push(\n // localKeyID\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // attrId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.localKeyId).getBytes()),\n // attrValues\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n localKeyId)\n ])\n ]));\n }\n if('friendlyName' in options) {\n attrs.push(\n // friendlyName\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // attrId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.friendlyName).getBytes()),\n // attrValues\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BMPSTRING, false,\n options.friendlyName)\n ])\n ]));\n }\n\n if(attrs.length > 0) {\n bagAttrs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, attrs);\n }\n\n // collect contents for AuthenticatedSafe\n var contents = [];\n\n // create safe bag(s) for certificate chain\n var chain = [];\n if(cert !== null) {\n if(forge.util.isArray(cert)) {\n chain = cert;\n } else {\n chain = [cert];\n }\n }\n\n var certSafeBags = [];\n for(var i = 0; i < chain.length; ++i) {\n // convert cert from PEM as necessary\n cert = chain[i];\n if(typeof cert === 'string') {\n cert = pki.certificateFromPem(cert);\n }\n\n // SafeBag\n var certBagAttrs = (i === 0) ? bagAttrs : undefined;\n var certAsn1 = pki.certificateToAsn1(cert);\n var certSafeBag =\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.certBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // CertBag\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // certId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.x509Certificate).getBytes()),\n // certValue (x509Certificate)\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(certAsn1).getBytes())\n ])])]),\n // bagAttributes (OPTIONAL)\n certBagAttrs\n ]);\n certSafeBags.push(certSafeBag);\n }\n\n if(certSafeBags.length > 0) {\n // SafeContents\n var certSafeContents = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, certSafeBags);\n\n // ContentInfo\n var certCI =\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(certSafeContents).getBytes())\n ])\n ]);\n contents.push(certCI);\n }\n\n // create safe contents for private key\n var keyBag = null;\n if(key !== null) {\n // SafeBag\n var pkAsn1 = pki.wrapRsaPrivateKey(pki.privateKeyToAsn1(key));\n if(password === null) {\n // no encryption\n keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.keyBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // PrivateKeyInfo\n pkAsn1\n ]),\n // bagAttributes (OPTIONAL)\n bagAttrs\n ]);\n } else {\n // encrypted PrivateKeyInfo\n keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // bagId\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.pkcs8ShroudedKeyBag).getBytes()),\n // bagValue\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // EncryptedPrivateKeyInfo\n pki.encryptPrivateKeyInfo(pkAsn1, password, options)\n ]),\n // bagAttributes (OPTIONAL)\n bagAttrs\n ]);\n }\n\n // SafeContents\n var keySafeContents =\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [keyBag]);\n\n // ContentInfo\n var keyCI =\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(keySafeContents).getBytes())\n ])\n ]);\n contents.push(keyCI);\n }\n\n // create AuthenticatedSafe by stringing together the contents\n var safe = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, contents);\n\n var macData;\n if(options.useMac) {\n // MacData\n var sha1 = forge.md.sha1.create();\n var macSalt = new forge.util.ByteBuffer(\n forge.random.getBytes(options.saltSize));\n var count = options.count;\n // 160-bit key\n var key = p12.generateKey(password, macSalt, 3, count, 20);\n var mac = forge.hmac.create();\n mac.start(sha1, key);\n mac.update(asn1.toDer(safe).getBytes());\n var macValue = mac.getMac();\n macData = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // mac DigestInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // digestAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm = SHA-1\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.sha1).getBytes()),\n // parameters = Null\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // digest\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING,\n false, macValue.getBytes())\n ]),\n // macSalt OCTET STRING\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, macSalt.getBytes()),\n // iterations INTEGER (XXX: Only support count < 65536)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(count).getBytes()\n )\n ]);\n }\n\n // PFX\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (3)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(3).getBytes()),\n // PKCS#7 ContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // contentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n // OID for the content type is 'data'\n asn1.oidToDer(pki.oids.data).getBytes()),\n // content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(safe).getBytes())\n ])\n ]),\n macData\n ]);\n};\n\n/**\n * Derives a PKCS#12 key.\n *\n * @param password the password to derive the key material from, null or\n * undefined for none.\n * @param salt the salt, as a ByteBuffer, to use.\n * @param id the PKCS#12 ID byte (1 = key material, 2 = IV, 3 = MAC).\n * @param iter the iteration count.\n * @param n the number of bytes to derive from the password.\n * @param md the message digest to use, defaults to SHA-1.\n *\n * @return a ByteBuffer with the bytes derived from the password.\n */\np12.generateKey = forge.pbe.generatePkcs12Key;\n","/**\n * Javascript implementation of PKCS#7 v1.5.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl \n * Copyright (c) 2012-2015 Digital Bazaar, Inc.\n *\n * Currently this implementation only supports ContentType of EnvelopedData,\n * EncryptedData, or SignedData at the root level. The top level elements may\n * contain only a ContentInfo of ContentType Data, i.e. plain data. Further\n * nesting is not (yet) supported.\n *\n * The Forge validators for PKCS #7's ASN.1 structures are available from\n * a separate file pkcs7asn1.js, since those are referenced from other\n * PKCS standards like PKCS #12.\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./oids');\nrequire('./pem');\nrequire('./pkcs7asn1');\nrequire('./random');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for ASN.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for PKCS#7 API\nvar p7 = module.exports = forge.pkcs7 = forge.pkcs7 || {};\n\n/**\n * Converts a PKCS#7 message from PEM format.\n *\n * @param pem the PEM-formatted PKCS#7 message.\n *\n * @return the PKCS#7 message.\n */\np7.messageFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PKCS7') {\n var error = new Error('Could not convert PKCS#7 message from PEM; PEM ' +\n 'header type is not \"PKCS#7\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert PKCS#7 message from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return p7.messageFromAsn1(obj);\n};\n\n/**\n * Converts a PKCS#7 message to PEM format.\n *\n * @param msg The PKCS#7 message object\n * @param maxline The maximum characters per line, defaults to 64.\n *\n * @return The PEM-formatted PKCS#7 message.\n */\np7.messageToPem = function(msg, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var pemObj = {\n type: 'PKCS7',\n body: asn1.toDer(msg.toAsn1()).getBytes()\n };\n return forge.pem.encode(pemObj, {maxline: maxline});\n};\n\n/**\n * Converts a PKCS#7 message from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a ContentInfo.\n *\n * @return the PKCS#7 message.\n */\np7.messageFromAsn1 = function(obj) {\n // validate root level ContentInfo and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.contentInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 message. ' +\n 'ASN.1 object is not an PKCS#7 ContentInfo.');\n error.errors = errors;\n throw error;\n }\n\n var contentType = asn1.derToOid(capture.contentType);\n var msg;\n\n switch(contentType) {\n case forge.pki.oids.envelopedData:\n msg = p7.createEnvelopedData();\n break;\n\n case forge.pki.oids.encryptedData:\n msg = p7.createEncryptedData();\n break;\n\n case forge.pki.oids.signedData:\n msg = p7.createSignedData();\n break;\n\n default:\n throw new Error('Cannot read PKCS#7 message. ContentType with OID ' +\n contentType + ' is not (yet) supported.');\n }\n\n msg.fromAsn1(capture.content.value[0]);\n return msg;\n};\n\np7.createSignedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.signedData,\n version: 1,\n certificates: [],\n crls: [],\n // TODO: add json-formatted signer stuff here?\n signers: [],\n // populated during sign()\n digestAlgorithmIdentifiers: [],\n contentInfo: null,\n signerInfos: [],\n\n fromAsn1: function(obj) {\n // validate SignedData content block and capture data.\n _fromAsn1(msg, obj, p7.asn1.signedDataValidator);\n msg.certificates = [];\n msg.crls = [];\n msg.digestAlgorithmIdentifiers = [];\n msg.contentInfo = null;\n msg.signerInfos = [];\n\n if(msg.rawCapture.certificates) {\n var certs = msg.rawCapture.certificates.value;\n for(var i = 0; i < certs.length; ++i) {\n msg.certificates.push(forge.pki.certificateFromAsn1(certs[i]));\n }\n }\n\n // TODO: parse crls\n },\n\n toAsn1: function() {\n // degenerate case with no content\n if(!msg.contentInfo) {\n msg.sign();\n }\n\n var certs = [];\n for(var i = 0; i < msg.certificates.length; ++i) {\n certs.push(forge.pki.certificateToAsn1(msg.certificates[i]));\n }\n\n var crls = [];\n // TODO: implement CRLs\n\n // [0] SignedData\n var signedData = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(msg.version).getBytes()),\n // DigestAlgorithmIdentifiers\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n msg.digestAlgorithmIdentifiers),\n // ContentInfo\n msg.contentInfo\n ])\n ]);\n if(certs.length > 0) {\n // [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL\n signedData.value[0].value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, certs));\n }\n if(crls.length > 0) {\n // [1] IMPLICIT CertificateRevocationLists OPTIONAL\n signedData.value[0].value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, crls));\n }\n // SignerInfos\n signedData.value[0].value.push(\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n msg.signerInfos));\n\n // ContentInfo\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(msg.type).getBytes()),\n // [0] SignedData\n signedData\n ]);\n },\n\n /**\n * Add (another) entity to list of signers.\n *\n * Note: If authenticatedAttributes are provided, then, per RFC 2315,\n * they must include at least two attributes: content type and\n * message digest. The message digest attribute value will be\n * auto-calculated during signing and will be ignored if provided.\n *\n * Here's an example of providing these two attributes:\n *\n * forge.pkcs7.createSignedData();\n * p7.addSigner({\n * issuer: cert.issuer.attributes,\n * serialNumber: cert.serialNumber,\n * key: privateKey,\n * digestAlgorithm: forge.pki.oids.sha1,\n * authenticatedAttributes: [{\n * type: forge.pki.oids.contentType,\n * value: forge.pki.oids.data\n * }, {\n * type: forge.pki.oids.messageDigest\n * }]\n * });\n *\n * TODO: Support [subjectKeyIdentifier] as signer's ID.\n *\n * @param signer the signer information:\n * key the signer's private key.\n * [certificate] a certificate containing the public key\n * associated with the signer's private key; use this option as\n * an alternative to specifying signer.issuer and\n * signer.serialNumber.\n * [issuer] the issuer attributes (eg: cert.issuer.attributes).\n * [serialNumber] the signer's certificate's serial number in\n * hexadecimal (eg: cert.serialNumber).\n * [digestAlgorithm] the message digest OID, as a string, to use\n * (eg: forge.pki.oids.sha1).\n * [authenticatedAttributes] an optional array of attributes\n * to also sign along with the content.\n */\n addSigner: function(signer) {\n var issuer = signer.issuer;\n var serialNumber = signer.serialNumber;\n if(signer.certificate) {\n var cert = signer.certificate;\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n issuer = cert.issuer.attributes;\n serialNumber = cert.serialNumber;\n }\n var key = signer.key;\n if(!key) {\n throw new Error(\n 'Could not add PKCS#7 signer; no private key specified.');\n }\n if(typeof key === 'string') {\n key = forge.pki.privateKeyFromPem(key);\n }\n\n // ensure OID known for digest algorithm\n var digestAlgorithm = signer.digestAlgorithm || forge.pki.oids.sha1;\n switch(digestAlgorithm) {\n case forge.pki.oids.sha1:\n case forge.pki.oids.sha256:\n case forge.pki.oids.sha384:\n case forge.pki.oids.sha512:\n case forge.pki.oids.md5:\n break;\n default:\n throw new Error(\n 'Could not add PKCS#7 signer; unknown message digest algorithm: ' +\n digestAlgorithm);\n }\n\n // if authenticatedAttributes is present, then the attributes\n // must contain at least PKCS #9 content-type and message-digest\n var authenticatedAttributes = signer.authenticatedAttributes || [];\n if(authenticatedAttributes.length > 0) {\n var contentType = false;\n var messageDigest = false;\n for(var i = 0; i < authenticatedAttributes.length; ++i) {\n var attr = authenticatedAttributes[i];\n if(!contentType && attr.type === forge.pki.oids.contentType) {\n contentType = true;\n if(messageDigest) {\n break;\n }\n continue;\n }\n if(!messageDigest && attr.type === forge.pki.oids.messageDigest) {\n messageDigest = true;\n if(contentType) {\n break;\n }\n continue;\n }\n }\n\n if(!contentType || !messageDigest) {\n throw new Error('Invalid signer.authenticatedAttributes. If ' +\n 'signer.authenticatedAttributes is specified, then it must ' +\n 'contain at least two attributes, PKCS #9 content-type and ' +\n 'PKCS #9 message-digest.');\n }\n }\n\n msg.signers.push({\n key: key,\n version: 1,\n issuer: issuer,\n serialNumber: serialNumber,\n digestAlgorithm: digestAlgorithm,\n signatureAlgorithm: forge.pki.oids.rsaEncryption,\n signature: null,\n authenticatedAttributes: authenticatedAttributes,\n unauthenticatedAttributes: []\n });\n },\n\n /**\n * Signs the content.\n * @param options Options to apply when signing:\n * [detached] boolean. If signing should be done in detached mode. Defaults to false.\n */\n sign: function(options) {\n options = options || {};\n // auto-generate content info\n if(typeof msg.content !== 'object' || msg.contentInfo === null) {\n // use Data ContentInfo\n msg.contentInfo = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(forge.pki.oids.data).getBytes())\n ]);\n\n // add actual content, if present\n if('content' in msg) {\n var content;\n if(msg.content instanceof forge.util.ByteBuffer) {\n content = msg.content.bytes();\n } else if(typeof msg.content === 'string') {\n content = forge.util.encodeUtf8(msg.content);\n }\n\n if (options.detached) {\n msg.detachedContent = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, content);\n } else {\n msg.contentInfo.value.push(\n // [0] EXPLICIT content\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n content)\n ]));\n }\n }\n }\n\n // no signers, return early (degenerate case for certificate container)\n if(msg.signers.length === 0) {\n return;\n }\n\n // generate digest algorithm identifiers\n var mds = addDigestAlgorithmIds();\n\n // generate signerInfos\n addSignerInfos(mds);\n },\n\n verify: function() {\n throw new Error('PKCS#7 signature verification not yet implemented.');\n },\n\n /**\n * Add a certificate.\n *\n * @param cert the certificate to add.\n */\n addCertificate: function(cert) {\n // convert from PEM\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n msg.certificates.push(cert);\n },\n\n /**\n * Add a certificate revokation list.\n *\n * @param crl the certificate revokation list to add.\n */\n addCertificateRevokationList: function(crl) {\n throw new Error('PKCS#7 CRL support not yet implemented.');\n }\n };\n return msg;\n\n function addDigestAlgorithmIds() {\n var mds = {};\n\n for(var i = 0; i < msg.signers.length; ++i) {\n var signer = msg.signers[i];\n var oid = signer.digestAlgorithm;\n if(!(oid in mds)) {\n // content digest\n mds[oid] = forge.md[forge.pki.oids[oid]].create();\n }\n if(signer.authenticatedAttributes.length === 0) {\n // no custom attributes to digest; use content message digest\n signer.md = mds[oid];\n } else {\n // custom attributes to be digested; use own message digest\n // TODO: optimize to just copy message digest state if that\n // feature is ever supported with message digests\n signer.md = forge.md[forge.pki.oids[oid]].create();\n }\n }\n\n // add unique digest algorithm identifiers\n msg.digestAlgorithmIdentifiers = [];\n for(var oid in mds) {\n msg.digestAlgorithmIdentifiers.push(\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(oid).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n }\n\n return mds;\n }\n\n function addSignerInfos(mds) {\n var content;\n\n if (msg.detachedContent) {\n // Signature has been made in detached mode.\n content = msg.detachedContent;\n } else {\n // Note: ContentInfo is a SEQUENCE with 2 values, second value is\n // the content field and is optional for a ContentInfo but required here\n // since signers are present\n // get ContentInfo content\n content = msg.contentInfo.value[1];\n // skip [0] EXPLICIT content wrapper\n content = content.value[0];\n }\n\n if(!content) {\n throw new Error(\n 'Could not sign PKCS#7 message; there is no content to sign.');\n }\n\n // get ContentInfo content type\n var contentType = asn1.derToOid(msg.contentInfo.value[0].value);\n\n // serialize content\n var bytes = asn1.toDer(content);\n\n // skip identifier and length per RFC 2315 9.3\n // skip identifier (1 byte)\n bytes.getByte();\n // read and discard length bytes\n asn1.getBerValueLength(bytes);\n bytes = bytes.getBytes();\n\n // digest content DER value bytes\n for(var oid in mds) {\n mds[oid].start().update(bytes);\n }\n\n // sign content\n var signingTime = new Date();\n for(var i = 0; i < msg.signers.length; ++i) {\n var signer = msg.signers[i];\n\n if(signer.authenticatedAttributes.length === 0) {\n // if ContentInfo content type is not \"Data\", then\n // authenticatedAttributes must be present per RFC 2315\n if(contentType !== forge.pki.oids.data) {\n throw new Error(\n 'Invalid signer; authenticatedAttributes must be present ' +\n 'when the ContentInfo content type is not PKCS#7 Data.');\n }\n } else {\n // process authenticated attributes\n // [0] IMPLICIT\n signer.authenticatedAttributesAsn1 = asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n\n // per RFC 2315, attributes are to be digested using a SET container\n // not the above [0] IMPLICIT container\n var attrsAsn1 = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SET, true, []);\n\n for(var ai = 0; ai < signer.authenticatedAttributes.length; ++ai) {\n var attr = signer.authenticatedAttributes[ai];\n if(attr.type === forge.pki.oids.messageDigest) {\n // use content message digest as value\n attr.value = mds[signer.digestAlgorithm].digest();\n } else if(attr.type === forge.pki.oids.signingTime) {\n // auto-populate signing time if not already set\n if(!attr.value) {\n attr.value = signingTime;\n }\n }\n\n // convert to ASN.1 and push onto Attributes SET (for signing) and\n // onto authenticatedAttributesAsn1 to complete SignedData ASN.1\n // TODO: optimize away duplication\n attrsAsn1.value.push(_attributeToAsn1(attr));\n signer.authenticatedAttributesAsn1.value.push(_attributeToAsn1(attr));\n }\n\n // DER-serialize and digest SET OF attributes only\n bytes = asn1.toDer(attrsAsn1).getBytes();\n signer.md.start().update(bytes);\n }\n\n // sign digest\n signer.signature = signer.key.sign(signer.md, 'RSASSA-PKCS1-V1_5');\n }\n\n // add signer info\n msg.signerInfos = _signersToAsn1(msg.signers);\n }\n};\n\n/**\n * Creates an empty PKCS#7 message of type EncryptedData.\n *\n * @return the message.\n */\np7.createEncryptedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.encryptedData,\n version: 0,\n encryptedContent: {\n algorithm: forge.pki.oids['aes256-CBC']\n },\n\n /**\n * Reads an EncryptedData content block (in ASN.1 format)\n *\n * @param obj The ASN.1 representation of the EncryptedData content block\n */\n fromAsn1: function(obj) {\n // Validate EncryptedData content block and capture data.\n _fromAsn1(msg, obj, p7.asn1.encryptedDataValidator);\n },\n\n /**\n * Decrypt encrypted content\n *\n * @param key The (symmetric) key as a byte buffer\n */\n decrypt: function(key) {\n if(key !== undefined) {\n msg.encryptedContent.key = key;\n }\n _decryptContent(msg);\n }\n };\n return msg;\n};\n\n/**\n * Creates an empty PKCS#7 message of type EnvelopedData.\n *\n * @return the message.\n */\np7.createEnvelopedData = function() {\n var msg = null;\n msg = {\n type: forge.pki.oids.envelopedData,\n version: 0,\n recipients: [],\n encryptedContent: {\n algorithm: forge.pki.oids['aes256-CBC']\n },\n\n /**\n * Reads an EnvelopedData content block (in ASN.1 format)\n *\n * @param obj the ASN.1 representation of the EnvelopedData content block.\n */\n fromAsn1: function(obj) {\n // validate EnvelopedData content block and capture data\n var capture = _fromAsn1(msg, obj, p7.asn1.envelopedDataValidator);\n msg.recipients = _recipientsFromAsn1(capture.recipientInfos.value);\n },\n\n toAsn1: function() {\n // ContentInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // ContentType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(msg.type).getBytes()),\n // [0] EnvelopedData\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(msg.version).getBytes()),\n // RecipientInfos\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true,\n _recipientsToAsn1(msg.recipients)),\n // EncryptedContentInfo\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true,\n _encryptedContentToAsn1(msg.encryptedContent))\n ])\n ])\n ]);\n },\n\n /**\n * Find recipient by X.509 certificate's issuer.\n *\n * @param cert the certificate with the issuer to look for.\n *\n * @return the recipient object.\n */\n findRecipient: function(cert) {\n var sAttr = cert.issuer.attributes;\n\n for(var i = 0; i < msg.recipients.length; ++i) {\n var r = msg.recipients[i];\n var rAttr = r.issuer;\n\n if(r.serialNumber !== cert.serialNumber) {\n continue;\n }\n\n if(rAttr.length !== sAttr.length) {\n continue;\n }\n\n var match = true;\n for(var j = 0; j < sAttr.length; ++j) {\n if(rAttr[j].type !== sAttr[j].type ||\n rAttr[j].value !== sAttr[j].value) {\n match = false;\n break;\n }\n }\n\n if(match) {\n return r;\n }\n }\n\n return null;\n },\n\n /**\n * Decrypt enveloped content\n *\n * @param recipient The recipient object related to the private key\n * @param privKey The (RSA) private key object\n */\n decrypt: function(recipient, privKey) {\n if(msg.encryptedContent.key === undefined && recipient !== undefined &&\n privKey !== undefined) {\n switch(recipient.encryptedContent.algorithm) {\n case forge.pki.oids.rsaEncryption:\n case forge.pki.oids.desCBC:\n var key = privKey.decrypt(recipient.encryptedContent.content);\n msg.encryptedContent.key = forge.util.createBuffer(key);\n break;\n\n default:\n throw new Error('Unsupported asymmetric cipher, ' +\n 'OID ' + recipient.encryptedContent.algorithm);\n }\n }\n\n _decryptContent(msg);\n },\n\n /**\n * Add (another) entity to list of recipients.\n *\n * @param cert The certificate of the entity to add.\n */\n addRecipient: function(cert) {\n msg.recipients.push({\n version: 0,\n issuer: cert.issuer.attributes,\n serialNumber: cert.serialNumber,\n encryptedContent: {\n // We simply assume rsaEncryption here, since forge.pki only\n // supports RSA so far. If the PKI module supports other\n // ciphers one day, we need to modify this one as well.\n algorithm: forge.pki.oids.rsaEncryption,\n key: cert.publicKey\n }\n });\n },\n\n /**\n * Encrypt enveloped content.\n *\n * This function supports two optional arguments, cipher and key, which\n * can be used to influence symmetric encryption. Unless cipher is\n * provided, the cipher specified in encryptedContent.algorithm is used\n * (defaults to AES-256-CBC). If no key is provided, encryptedContent.key\n * is (re-)used. If that one's not set, a random key will be generated\n * automatically.\n *\n * @param [key] The key to be used for symmetric encryption.\n * @param [cipher] The OID of the symmetric cipher to use.\n */\n encrypt: function(key, cipher) {\n // Part 1: Symmetric encryption\n if(msg.encryptedContent.content === undefined) {\n cipher = cipher || msg.encryptedContent.algorithm;\n key = key || msg.encryptedContent.key;\n\n var keyLen, ivLen, ciphFn;\n switch(cipher) {\n case forge.pki.oids['aes128-CBC']:\n keyLen = 16;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['aes192-CBC']:\n keyLen = 24;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['aes256-CBC']:\n keyLen = 32;\n ivLen = 16;\n ciphFn = forge.aes.createEncryptionCipher;\n break;\n\n case forge.pki.oids['des-EDE3-CBC']:\n keyLen = 24;\n ivLen = 8;\n ciphFn = forge.des.createEncryptionCipher;\n break;\n\n default:\n throw new Error('Unsupported symmetric cipher, OID ' + cipher);\n }\n\n if(key === undefined) {\n key = forge.util.createBuffer(forge.random.getBytes(keyLen));\n } else if(key.length() != keyLen) {\n throw new Error('Symmetric key has wrong length; ' +\n 'got ' + key.length() + ' bytes, expected ' + keyLen + '.');\n }\n\n // Keep a copy of the key & IV in the object, so the caller can\n // use it for whatever reason.\n msg.encryptedContent.algorithm = cipher;\n msg.encryptedContent.key = key;\n msg.encryptedContent.parameter = forge.util.createBuffer(\n forge.random.getBytes(ivLen));\n\n var ciph = ciphFn(key);\n ciph.start(msg.encryptedContent.parameter.copy());\n ciph.update(msg.content);\n\n // The finish function does PKCS#7 padding by default, therefore\n // no action required by us.\n if(!ciph.finish()) {\n throw new Error('Symmetric encryption failed.');\n }\n\n msg.encryptedContent.content = ciph.output;\n }\n\n // Part 2: asymmetric encryption for each recipient\n for(var i = 0; i < msg.recipients.length; ++i) {\n var recipient = msg.recipients[i];\n\n // Nothing to do, encryption already done.\n if(recipient.encryptedContent.content !== undefined) {\n continue;\n }\n\n switch(recipient.encryptedContent.algorithm) {\n case forge.pki.oids.rsaEncryption:\n recipient.encryptedContent.content =\n recipient.encryptedContent.key.encrypt(\n msg.encryptedContent.key.data);\n break;\n\n default:\n throw new Error('Unsupported asymmetric cipher, OID ' +\n recipient.encryptedContent.algorithm);\n }\n }\n }\n };\n return msg;\n};\n\n/**\n * Converts a single recipient from an ASN.1 object.\n *\n * @param obj the ASN.1 RecipientInfo.\n *\n * @return the recipient object.\n */\nfunction _recipientFromAsn1(obj) {\n // validate EnvelopedData content block and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.recipientInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 RecipientInfo. ' +\n 'ASN.1 object is not an PKCS#7 RecipientInfo.');\n error.errors = errors;\n throw error;\n }\n\n return {\n version: capture.version.charCodeAt(0),\n issuer: forge.pki.RDNAttributesAsArray(capture.issuer),\n serialNumber: forge.util.createBuffer(capture.serial).toHex(),\n encryptedContent: {\n algorithm: asn1.derToOid(capture.encAlgorithm),\n parameter: capture.encParameter ? capture.encParameter.value : undefined,\n content: capture.encKey\n }\n };\n}\n\n/**\n * Converts a single recipient object to an ASN.1 object.\n *\n * @param obj the recipient object.\n *\n * @return the ASN.1 RecipientInfo.\n */\nfunction _recipientToAsn1(obj) {\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(obj.version).getBytes()),\n // IssuerAndSerialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Name\n forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}),\n // Serial\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(obj.serialNumber))\n ]),\n // KeyEncryptionAlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.encryptedContent.algorithm).getBytes()),\n // Parameter, force NULL, only RSA supported for now.\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // EncryptedKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n obj.encryptedContent.content)\n ]);\n}\n\n/**\n * Map a set of RecipientInfo ASN.1 objects to recipient objects.\n *\n * @param infos an array of ASN.1 representations RecipientInfo (i.e. SET OF).\n *\n * @return an array of recipient objects.\n */\nfunction _recipientsFromAsn1(infos) {\n var ret = [];\n for(var i = 0; i < infos.length; ++i) {\n ret.push(_recipientFromAsn1(infos[i]));\n }\n return ret;\n}\n\n/**\n * Map an array of recipient objects to ASN.1 RecipientInfo objects.\n *\n * @param recipients an array of recipientInfo objects.\n *\n * @return an array of ASN.1 RecipientInfos.\n */\nfunction _recipientsToAsn1(recipients) {\n var ret = [];\n for(var i = 0; i < recipients.length; ++i) {\n ret.push(_recipientToAsn1(recipients[i]));\n }\n return ret;\n}\n\n/**\n * Converts a single signer from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a SignerInfo.\n *\n * @return the signer object.\n */\nfunction _signerFromAsn1(obj) {\n // validate EnvelopedData content block and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, p7.asn1.signerInfoValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 SignerInfo. ' +\n 'ASN.1 object is not an PKCS#7 SignerInfo.');\n error.errors = errors;\n throw error;\n }\n\n var rval = {\n version: capture.version.charCodeAt(0),\n issuer: forge.pki.RDNAttributesAsArray(capture.issuer),\n serialNumber: forge.util.createBuffer(capture.serial).toHex(),\n digestAlgorithm: asn1.derToOid(capture.digestAlgorithm),\n signatureAlgorithm: asn1.derToOid(capture.signatureAlgorithm),\n signature: capture.signature,\n authenticatedAttributes: [],\n unauthenticatedAttributes: []\n };\n\n // TODO: convert attributes\n var authenticatedAttributes = capture.authenticatedAttributes || [];\n var unauthenticatedAttributes = capture.unauthenticatedAttributes || [];\n\n return rval;\n}\n\n/**\n * Converts a single signerInfo object to an ASN.1 object.\n *\n * @param obj the signerInfo object.\n *\n * @return the ASN.1 representation of a SignerInfo.\n */\nfunction _signerToAsn1(obj) {\n // SignerInfo\n var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(obj.version).getBytes()),\n // issuerAndSerialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // name\n forge.pki.distinguishedNameToAsn1({attributes: obj.issuer}),\n // serial\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(obj.serialNumber))\n ]),\n // digestAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.digestAlgorithm).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ]);\n\n // authenticatedAttributes (OPTIONAL)\n if(obj.authenticatedAttributesAsn1) {\n // add ASN.1 previously generated during signing\n rval.value.push(obj.authenticatedAttributesAsn1);\n }\n\n // digestEncryptionAlgorithm\n rval.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(obj.signatureAlgorithm).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]));\n\n // encryptedDigest\n rval.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, obj.signature));\n\n // unauthenticatedAttributes (OPTIONAL)\n if(obj.unauthenticatedAttributes.length > 0) {\n // [1] IMPLICIT\n var attrsAsn1 = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, []);\n for(var i = 0; i < obj.unauthenticatedAttributes.length; ++i) {\n var attr = obj.unauthenticatedAttributes[i];\n attrsAsn1.values.push(_attributeToAsn1(attr));\n }\n rval.value.push(attrsAsn1);\n }\n\n return rval;\n}\n\n/**\n * Map a set of SignerInfo ASN.1 objects to an array of signer objects.\n *\n * @param signerInfoAsn1s an array of ASN.1 SignerInfos (i.e. SET OF).\n *\n * @return an array of signers objects.\n */\nfunction _signersFromAsn1(signerInfoAsn1s) {\n var ret = [];\n for(var i = 0; i < signerInfoAsn1s.length; ++i) {\n ret.push(_signerFromAsn1(signerInfoAsn1s[i]));\n }\n return ret;\n}\n\n/**\n * Map an array of signer objects to ASN.1 objects.\n *\n * @param signers an array of signer objects.\n *\n * @return an array of ASN.1 SignerInfos.\n */\nfunction _signersToAsn1(signers) {\n var ret = [];\n for(var i = 0; i < signers.length; ++i) {\n ret.push(_signerToAsn1(signers[i]));\n }\n return ret;\n}\n\n/**\n * Convert an attribute object to an ASN.1 Attribute.\n *\n * @param attr the attribute object.\n *\n * @return the ASN.1 Attribute.\n */\nfunction _attributeToAsn1(attr) {\n var value;\n\n // TODO: generalize to support more attributes\n if(attr.type === forge.pki.oids.contentType) {\n value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.value).getBytes());\n } else if(attr.type === forge.pki.oids.messageDigest) {\n value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n attr.value.bytes());\n } else if(attr.type === forge.pki.oids.signingTime) {\n /* Note per RFC 2985: Dates between 1 January 1950 and 31 December 2049\n (inclusive) MUST be encoded as UTCTime. Any dates with year values\n before 1950 or after 2049 MUST be encoded as GeneralizedTime. [Further,]\n UTCTime values MUST be expressed in Greenwich Mean Time (Zulu) and MUST\n include seconds (i.e., times are YYMMDDHHMMSSZ), even where the\n number of seconds is zero. Midnight (GMT) must be represented as\n \"YYMMDD000000Z\". */\n // TODO: make these module-level constants\n var jan_1_1950 = new Date('1950-01-01T00:00:00Z');\n var jan_1_2050 = new Date('2050-01-01T00:00:00Z');\n var date = attr.value;\n if(typeof date === 'string') {\n // try to parse date\n var timestamp = Date.parse(date);\n if(!isNaN(timestamp)) {\n date = new Date(timestamp);\n } else if(date.length === 13) {\n // YYMMDDHHMMSSZ (13 chars for UTCTime)\n date = asn1.utcTimeToDate(date);\n } else {\n // assume generalized time\n date = asn1.generalizedTimeToDate(date);\n }\n }\n\n if(date >= jan_1_1950 && date < jan_1_2050) {\n value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,\n asn1.dateToUtcTime(date));\n } else {\n value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,\n asn1.dateToGeneralizedTime(date));\n }\n }\n\n // TODO: expose as common API call\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n // AttributeValue\n value\n ])\n ]);\n}\n\n/**\n * Map messages encrypted content to ASN.1 objects.\n *\n * @param ec The encryptedContent object of the message.\n *\n * @return ASN.1 representation of the encryptedContent object (SEQUENCE).\n */\nfunction _encryptedContentToAsn1(ec) {\n return [\n // ContentType, always Data for the moment\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(forge.pki.oids.data).getBytes()),\n // ContentEncryptionAlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // Algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(ec.algorithm).getBytes()),\n // Parameters (IV)\n !ec.parameter ?\n undefined :\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n ec.parameter.getBytes())\n ]),\n // [0] EncryptedContent\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n ec.content.getBytes())\n ])\n ];\n}\n\n/**\n * Reads the \"common part\" of an PKCS#7 content block (in ASN.1 format)\n *\n * This function reads the \"common part\" of the PKCS#7 content blocks\n * EncryptedData and EnvelopedData, i.e. version number and symmetrically\n * encrypted content block.\n *\n * The result of the ASN.1 validate and capture process is returned\n * to allow the caller to extract further data, e.g. the list of recipients\n * in case of a EnvelopedData object.\n *\n * @param msg the PKCS#7 object to read the data to.\n * @param obj the ASN.1 representation of the content block.\n * @param validator the ASN.1 structure validator object to use.\n *\n * @return the value map captured by validator object.\n */\nfunction _fromAsn1(msg, obj, validator) {\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, validator, capture, errors)) {\n var error = new Error('Cannot read PKCS#7 message. ' +\n 'ASN.1 object is not a supported PKCS#7 message.');\n error.errors = error;\n throw error;\n }\n\n // Check contentType, so far we only support (raw) Data.\n var contentType = asn1.derToOid(capture.contentType);\n if(contentType !== forge.pki.oids.data) {\n throw new Error('Unsupported PKCS#7 message. ' +\n 'Only wrapped ContentType Data supported.');\n }\n\n if(capture.encryptedContent) {\n var content = '';\n if(forge.util.isArray(capture.encryptedContent)) {\n for(var i = 0; i < capture.encryptedContent.length; ++i) {\n if(capture.encryptedContent[i].type !== asn1.Type.OCTETSTRING) {\n throw new Error('Malformed PKCS#7 message, expecting encrypted ' +\n 'content constructed of only OCTET STRING objects.');\n }\n content += capture.encryptedContent[i].value;\n }\n } else {\n content = capture.encryptedContent;\n }\n msg.encryptedContent = {\n algorithm: asn1.derToOid(capture.encAlgorithm),\n parameter: forge.util.createBuffer(capture.encParameter.value),\n content: forge.util.createBuffer(content)\n };\n }\n\n if(capture.content) {\n var content = '';\n if(forge.util.isArray(capture.content)) {\n for(var i = 0; i < capture.content.length; ++i) {\n if(capture.content[i].type !== asn1.Type.OCTETSTRING) {\n throw new Error('Malformed PKCS#7 message, expecting ' +\n 'content constructed of only OCTET STRING objects.');\n }\n content += capture.content[i].value;\n }\n } else {\n content = capture.content;\n }\n msg.content = forge.util.createBuffer(content);\n }\n\n msg.version = capture.version.charCodeAt(0);\n msg.rawCapture = capture;\n\n return capture;\n}\n\n/**\n * Decrypt the symmetrically encrypted content block of the PKCS#7 message.\n *\n * Decryption is skipped in case the PKCS#7 message object already has a\n * (decrypted) content attribute. The algorithm, key and cipher parameters\n * (probably the iv) are taken from the encryptedContent attribute of the\n * message object.\n *\n * @param The PKCS#7 message object.\n */\nfunction _decryptContent(msg) {\n if(msg.encryptedContent.key === undefined) {\n throw new Error('Symmetric key not available.');\n }\n\n if(msg.content === undefined) {\n var ciph;\n\n switch(msg.encryptedContent.algorithm) {\n case forge.pki.oids['aes128-CBC']:\n case forge.pki.oids['aes192-CBC']:\n case forge.pki.oids['aes256-CBC']:\n ciph = forge.aes.createDecryptionCipher(msg.encryptedContent.key);\n break;\n\n case forge.pki.oids['desCBC']:\n case forge.pki.oids['des-EDE3-CBC']:\n ciph = forge.des.createDecryptionCipher(msg.encryptedContent.key);\n break;\n\n default:\n throw new Error('Unsupported symmetric cipher, OID ' +\n msg.encryptedContent.algorithm);\n }\n ciph.start(msg.encryptedContent.parameter);\n ciph.update(msg.encryptedContent.content);\n\n if(!ciph.finish()) {\n throw new Error('Symmetric decryption failed.');\n }\n\n msg.content = ciph.output;\n }\n}\n","/**\n * Javascript implementation of ASN.1 validators for PKCS#7 v1.5.\n *\n * @author Dave Longley\n * @author Stefan Siegl\n *\n * Copyright (c) 2012-2015 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl \n *\n * The ASN.1 representation of PKCS#7 is as follows\n * (see RFC #2315 for details, http://www.ietf.org/rfc/rfc2315.txt):\n *\n * A PKCS#7 message consists of a ContentInfo on root level, which may\n * contain any number of further ContentInfo nested into it.\n *\n * ContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL\n * }\n *\n * ContentType ::= OBJECT IDENTIFIER\n *\n * EnvelopedData ::= SEQUENCE {\n * version Version,\n * recipientInfos RecipientInfos,\n * encryptedContentInfo EncryptedContentInfo\n * }\n *\n * EncryptedData ::= SEQUENCE {\n * version Version,\n * encryptedContentInfo EncryptedContentInfo\n * }\n *\n * id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)\n * us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 }\n *\n * SignedData ::= SEQUENCE {\n * version INTEGER,\n * digestAlgorithms DigestAlgorithmIdentifiers,\n * contentInfo ContentInfo,\n * certificates [0] IMPLICIT Certificates OPTIONAL,\n * crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,\n * signerInfos SignerInfos\n * }\n *\n * SignerInfos ::= SET OF SignerInfo\n *\n * SignerInfo ::= SEQUENCE {\n * version Version,\n * issuerAndSerialNumber IssuerAndSerialNumber,\n * digestAlgorithm DigestAlgorithmIdentifier,\n * authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,\n * digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,\n * encryptedDigest EncryptedDigest,\n * unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL\n * }\n *\n * EncryptedDigest ::= OCTET STRING\n *\n * Attributes ::= SET OF Attribute\n *\n * Attribute ::= SEQUENCE {\n * attrType OBJECT IDENTIFIER,\n * attrValues SET OF AttributeValue\n * }\n *\n * AttributeValue ::= ANY\n *\n * Version ::= INTEGER\n *\n * RecipientInfos ::= SET OF RecipientInfo\n *\n * EncryptedContentInfo ::= SEQUENCE {\n * contentType ContentType,\n * contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,\n * encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL\n * }\n *\n * ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of AES and DES3, there is only one,\n * the IV.\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * EncryptedContent ::= OCTET STRING\n *\n * RecipientInfo ::= SEQUENCE {\n * version Version,\n * issuerAndSerialNumber IssuerAndSerialNumber,\n * keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,\n * encryptedKey EncryptedKey\n * }\n *\n * IssuerAndSerialNumber ::= SEQUENCE {\n * issuer Name,\n * serialNumber CertificateSerialNumber\n * }\n *\n * CertificateSerialNumber ::= INTEGER\n *\n * KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier\n *\n * EncryptedKey ::= OCTET STRING\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./util');\n\n// shortcut for ASN.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for PKCS#7 API\nvar p7v = module.exports = forge.pkcs7asn1 = forge.pkcs7asn1 || {};\nforge.pkcs7 = forge.pkcs7 || {};\nforge.pkcs7.asn1 = p7v;\n\nvar contentInfoValidator = {\n name: 'ContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'ContentInfo.ContentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'ContentInfo.content',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n captureAsn1: 'content'\n }]\n};\np7v.contentInfoValidator = contentInfoValidator;\n\nvar encryptedContentInfoValidator = {\n name: 'EncryptedContentInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedContentInfo.contentType',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'contentType'\n }, {\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encAlgorithm'\n }, {\n name: 'EncryptedContentInfo.contentEncryptionAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n captureAsn1: 'encParameter'\n }]\n }, {\n name: 'EncryptedContentInfo.encryptedContent',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n /* The PKCS#7 structure output by OpenSSL somewhat differs from what\n * other implementations do generate.\n *\n * OpenSSL generates a structure like this:\n * SEQUENCE {\n * ...\n * [0]\n * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38\n * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45\n * ...\n * }\n *\n * Whereas other implementations (and this PKCS#7 module) generate:\n * SEQUENCE {\n * ...\n * [0] {\n * OCTET STRING\n * 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38\n * C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45\n * ...\n * }\n * }\n *\n * In order to support both, we just capture the context specific\n * field here. The OCTET STRING bit is removed below.\n */\n capture: 'encryptedContent',\n captureAsn1: 'encryptedContentAsn1'\n }]\n};\n\np7v.envelopedDataValidator = {\n name: 'EnvelopedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EnvelopedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'EnvelopedData.RecipientInfos',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n captureAsn1: 'recipientInfos'\n }].concat(encryptedContentInfoValidator)\n};\n\np7v.encryptedDataValidator = {\n name: 'EncryptedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'EncryptedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }].concat(encryptedContentInfoValidator)\n};\n\nvar signerValidator = {\n name: 'SignerInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false\n }, {\n name: 'SignerInfo.issuerAndSerialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.issuerAndSerialNumber.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'issuer'\n }, {\n name: 'SignerInfo.issuerAndSerialNumber.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'serial'\n }]\n }, {\n name: 'SignerInfo.digestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignerInfo.digestAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'digestAlgorithm'\n }, {\n name: 'SignerInfo.digestAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n constructed: false,\n captureAsn1: 'digestParameter',\n optional: true\n }]\n }, {\n name: 'SignerInfo.authenticatedAttributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n capture: 'authenticatedAttributes'\n }, {\n name: 'SignerInfo.digestEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n capture: 'signatureAlgorithm'\n }, {\n name: 'SignerInfo.encryptedDigest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'signature'\n }, {\n name: 'SignerInfo.unauthenticatedAttributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n capture: 'unauthenticatedAttributes'\n }]\n};\n\np7v.signedDataValidator = {\n name: 'SignedData',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'SignedData.Version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'SignedData.DigestAlgorithms',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true,\n captureAsn1: 'digestAlgorithms'\n },\n contentInfoValidator,\n {\n name: 'SignedData.Certificates',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n optional: true,\n captureAsn1: 'certificates'\n }, {\n name: 'SignedData.CertificateRevocationLists',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n optional: true,\n captureAsn1: 'crls'\n }, {\n name: 'SignedData.SignerInfos',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n capture: 'signerInfos',\n optional: true,\n value: [signerValidator]\n }]\n};\n\np7v.recipientInfoValidator = {\n name: 'RecipientInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'version'\n }, {\n name: 'RecipientInfo.issuerAndSerial',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.issuerAndSerial.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'issuer'\n }, {\n name: 'RecipientInfo.issuerAndSerial.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'serial'\n }]\n }, {\n name: 'RecipientInfo.keyEncryptionAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'RecipientInfo.keyEncryptionAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'encAlgorithm'\n }, {\n name: 'RecipientInfo.keyEncryptionAlgorithm.parameter',\n tagClass: asn1.Class.UNIVERSAL,\n constructed: false,\n captureAsn1: 'encParameter',\n optional: true\n }]\n }, {\n name: 'RecipientInfo.encryptedKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'encKey'\n }]\n};\n","/**\n * Javascript implementation of a basic Public Key Infrastructure, including\n * support for RSA public and private keys.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./oids');\nrequire('./pbe');\nrequire('./pem');\nrequire('./pbkdf2');\nrequire('./pkcs12');\nrequire('./pss');\nrequire('./rsa');\nrequire('./util');\nrequire('./x509');\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Public Key Infrastructure (PKI) implementation. */\nvar pki = module.exports = forge.pki = forge.pki || {};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED. Use pem.decode() instead.\n *\n * Converts PEM-formatted data to DER.\n *\n * @param pem the PEM-formatted data.\n *\n * @return the DER-formatted data.\n */\npki.pemToDer = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert PEM to DER; PEM is encrypted.');\n }\n return forge.util.createBuffer(msg.body);\n};\n\n/**\n * Converts an RSA private key from PEM format.\n *\n * @param pem the PEM-formatted private key.\n *\n * @return the private key.\n */\npki.privateKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PRIVATE KEY' && msg.type !== 'RSA PRIVATE KEY') {\n var error = new Error('Could not convert private key from PEM; PEM ' +\n 'header type is not \"PRIVATE KEY\" or \"RSA PRIVATE KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert private key from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return pki.privateKeyFromAsn1(obj);\n};\n\n/**\n * Converts an RSA private key to PEM format.\n *\n * @param key the private key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted private key.\n */\npki.privateKeyToPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'RSA PRIVATE KEY',\n body: asn1.toDer(pki.privateKeyToAsn1(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts a PrivateKeyInfo to PEM format.\n *\n * @param pki the PrivateKeyInfo.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted private key.\n */\npki.privateKeyInfoToPem = function(pki, maxline) {\n // convert to DER, then PEM-encode\n var msg = {\n type: 'PRIVATE KEY',\n body: asn1.toDer(pki).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n","/**\n * Prime number generation API.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\nrequire('./jsbn');\nrequire('./random');\n\n(function() {\n\n// forge.prime already defined\nif(forge.prime) {\n module.exports = forge.prime;\n return;\n}\n\n/* PRIME API */\nvar prime = module.exports = forge.prime = forge.prime || {};\n\nvar BigInteger = forge.jsbn.BigInteger;\n\n// primes are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29\nvar GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];\nvar THIRTY = new BigInteger(null);\nTHIRTY.fromInt(30);\nvar op_or = function(x, y) {return x|y;};\n\n/**\n * Generates a random probable prime with the given number of bits.\n *\n * Alternative algorithms can be specified by name as a string or as an\n * object with custom options like so:\n *\n * {\n * name: 'PRIMEINC',\n * options: {\n * maxBlockTime: ,\n * millerRabinTests: ,\n * workerScript: ,\n * workers: .\n * workLoad: the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * }\n * }\n *\n * @param bits the number of bits for the prime number.\n * @param options the options to use.\n * [algorithm] the algorithm to use (default: 'PRIMEINC').\n * [prng] a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n *\n * @return callback(err, num) called once the operation completes.\n */\nprime.generateProbablePrime = function(bits, options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n // default to PRIMEINC algorithm\n var algorithm = options.algorithm || 'PRIMEINC';\n if(typeof algorithm === 'string') {\n algorithm = {name: algorithm};\n }\n algorithm.options = algorithm.options || {};\n\n // create prng with api that matches BigInteger secure random\n var prng = options.prng || forge.random;\n var rng = {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n var b = prng.getBytesSync(x.length);\n for(var i = 0; i < x.length; ++i) {\n x[i] = b.charCodeAt(i);\n }\n }\n };\n\n if(algorithm.name === 'PRIMEINC') {\n return primeincFindPrime(bits, rng, algorithm.options, callback);\n }\n\n throw new Error('Invalid prime generation algorithm: ' + algorithm.name);\n};\n\nfunction primeincFindPrime(bits, rng, options, callback) {\n if('workers' in options) {\n return primeincFindPrimeWithWorkers(bits, rng, options, callback);\n }\n return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);\n}\n\nfunction primeincFindPrimeWithoutWorkers(bits, rng, options, callback) {\n // initialize random number\n var num = generateRandom(bits, rng);\n\n /* Note: All primes are of the form 30k+i for i < 30 and gcd(30, i)=1. The\n number we are given is always aligned at 30k + 1. Each time the number is\n determined not to be prime we add to get to the next 'i', eg: if the number\n was at 30k + 1 we add 6. */\n var deltaIdx = 0;\n\n // get required number of MR tests\n var mrTests = getMillerRabinTests(num.bitLength());\n if('millerRabinTests' in options) {\n mrTests = options.millerRabinTests;\n }\n\n // find prime nearest to 'num' for maxBlockTime ms\n // 10 ms gives 5ms of leeway for other calculations before dropping\n // below 60fps (1000/60 == 16.67), but in reality, the number will\n // likely be higher due to an 'atomic' big int modPow\n var maxBlockTime = 10;\n if('maxBlockTime' in options) {\n maxBlockTime = options.maxBlockTime;\n }\n\n _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);\n}\n\nfunction _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback) {\n var start = +new Date();\n do {\n // overflow, regenerate random number\n if(num.bitLength() > bits) {\n num = generateRandom(bits, rng);\n }\n // do primality test\n if(num.isProbablePrime(mrTests)) {\n return callback(null, num);\n }\n // get next potential prime\n num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);\n } while(maxBlockTime < 0 || (+new Date() - start < maxBlockTime));\n\n // keep trying later\n forge.util.setImmediate(function() {\n _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback);\n });\n}\n\n// NOTE: This algorithm is indeterminate in nature because workers\n// run in parallel looking at different segments of numbers. Even if this\n// algorithm is run twice with the same input from a predictable RNG, it\n// may produce different outputs.\nfunction primeincFindPrimeWithWorkers(bits, rng, options, callback) {\n // web workers unavailable\n if(typeof Worker === 'undefined') {\n return primeincFindPrimeWithoutWorkers(bits, rng, options, callback);\n }\n\n // initialize random number\n var num = generateRandom(bits, rng);\n\n // use web workers to generate keys\n var numWorkers = options.workers;\n var workLoad = options.workLoad || 100;\n var range = workLoad * 30 / 8;\n var workerScript = options.workerScript || 'forge/prime.worker.js';\n if(numWorkers === -1) {\n return forge.util.estimateCores(function(err, cores) {\n if(err) {\n // default to 2\n cores = 2;\n }\n numWorkers = cores - 1;\n generate();\n });\n }\n generate();\n\n function generate() {\n // require at least 1 worker\n numWorkers = Math.max(1, numWorkers);\n\n // TODO: consider optimizing by starting workers outside getPrime() ...\n // note that in order to clean up they will have to be made internally\n // asynchronous which may actually be slower\n\n // start workers immediately\n var workers = [];\n for(var i = 0; i < numWorkers; ++i) {\n // FIXME: fix path or use blob URLs\n workers[i] = new Worker(workerScript);\n }\n var running = numWorkers;\n\n // listen for requests from workers and assign ranges to find prime\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].addEventListener('message', workerMessage);\n }\n\n /* Note: The distribution of random numbers is unknown. Therefore, each\n web worker is continuously allocated a range of numbers to check for a\n random number until one is found.\n\n Every 30 numbers will be checked just 8 times, because prime numbers\n have the form:\n\n 30k+i, for i < 30 and gcd(30, i)=1 (there are 8 values of i for this)\n\n Therefore, if we want a web worker to run N checks before asking for\n a new range of numbers, each range must contain N*30/8 numbers.\n\n For 100 checks (workLoad), this is a range of 375. */\n\n var found = false;\n function workerMessage(e) {\n // ignore message, prime already found\n if(found) {\n return;\n }\n\n --running;\n var data = e.data;\n if(data.found) {\n // terminate all workers\n for(var i = 0; i < workers.length; ++i) {\n workers[i].terminate();\n }\n found = true;\n return callback(null, new BigInteger(data.prime, 16));\n }\n\n // overflow, regenerate random number\n if(num.bitLength() > bits) {\n num = generateRandom(bits, rng);\n }\n\n // assign new range to check\n var hex = num.toString(16);\n\n // start prime search\n e.target.postMessage({\n hex: hex,\n workLoad: workLoad\n });\n\n num.dAddOffset(range, 0);\n }\n }\n}\n\n/**\n * Generates a random number using the given number of bits and RNG.\n *\n * @param bits the number of bits for the number.\n * @param rng the random number generator to use.\n *\n * @return the random number.\n */\nfunction generateRandom(bits, rng) {\n var num = new BigInteger(bits, rng);\n // force MSB set\n var bits1 = bits - 1;\n if(!num.testBit(bits1)) {\n num.bitwiseTo(BigInteger.ONE.shiftLeft(bits1), op_or, num);\n }\n // align number on 30k+1 boundary\n num.dAddOffset(31 - num.mod(THIRTY).byteValue(), 0);\n return num;\n}\n\n/**\n * Returns the required number of Miller-Rabin tests to generate a\n * prime with an error probability of (1/2)^80.\n *\n * See Handbook of Applied Cryptography Chapter 4, Table 4.4.\n *\n * @param bits the bit size.\n *\n * @return the required number of iterations.\n */\nfunction getMillerRabinTests(bits) {\n if(bits <= 100) return 27;\n if(bits <= 150) return 18;\n if(bits <= 200) return 15;\n if(bits <= 250) return 12;\n if(bits <= 300) return 9;\n if(bits <= 350) return 8;\n if(bits <= 400) return 7;\n if(bits <= 500) return 6;\n if(bits <= 600) return 5;\n if(bits <= 800) return 4;\n if(bits <= 1250) return 3;\n return 2;\n}\n\n})();\n","/**\n * A javascript implementation of a cryptographically-secure\n * Pseudo Random Number Generator (PRNG). The Fortuna algorithm is followed\n * here though the use of SHA-256 is not enforced; when generating an\n * a PRNG context, the hashing algorithm and block cipher used for\n * the generator are specified via a plugin.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./util');\n\nvar _crypto = null;\nif(forge.util.isNodejs && !forge.options.usePureJavaScript &&\n !process.versions['node-webkit']) {\n _crypto = require('crypto');\n}\n\n/* PRNG API */\nvar prng = module.exports = forge.prng = forge.prng || {};\n\n/**\n * Creates a new PRNG context.\n *\n * A PRNG plugin must be passed in that will provide:\n *\n * 1. A function that initializes the key and seed of a PRNG context. It\n * will be given a 16 byte key and a 16 byte seed. Any key expansion\n * or transformation of the seed from a byte string into an array of\n * integers (or similar) should be performed.\n * 2. The cryptographic function used by the generator. It takes a key and\n * a seed.\n * 3. A seed increment function. It takes the seed and returns seed + 1.\n * 4. An api to create a message digest.\n *\n * For an example, see random.js.\n *\n * @param plugin the PRNG plugin to use.\n */\nprng.create = function(plugin) {\n var ctx = {\n plugin: plugin,\n key: null,\n seed: null,\n time: null,\n // number of reseeds so far\n reseeds: 0,\n // amount of data generated so far\n generated: 0,\n // no initial key bytes\n keyBytes: ''\n };\n\n // create 32 entropy pools (each is a message digest)\n var md = plugin.md;\n var pools = new Array(32);\n for(var i = 0; i < 32; ++i) {\n pools[i] = md.create();\n }\n ctx.pools = pools;\n\n // entropy pools are written to cyclically, starting at index 0\n ctx.pool = 0;\n\n /**\n * Generates random bytes. The bytes may be generated synchronously or\n * asynchronously. Web workers must use the asynchronous interface or\n * else the behavior is undefined.\n *\n * @param count the number of random bytes to generate.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return count random bytes as a string.\n */\n ctx.generate = function(count, callback) {\n // do synchronously\n if(!callback) {\n return ctx.generateSync(count);\n }\n\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n var b = forge.util.createBuffer();\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generate` call\n ctx.key = null;\n\n generate();\n\n function generate(err) {\n if(err) {\n return callback(err);\n }\n\n // sufficient bytes generated\n if(b.length() >= count) {\n return callback(null, b.getBytes(count));\n }\n\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n // prevent stack overflow\n return forge.util.nextTick(function() {\n _reseed(generate);\n });\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n\n forge.util.setImmediate(generate);\n }\n };\n\n /**\n * Generates random bytes synchronously.\n *\n * @param count the number of random bytes to generate.\n *\n * @return count random bytes as a string.\n */\n ctx.generateSync = function(count) {\n // simple generator using counter-based CBC\n var cipher = ctx.plugin.cipher;\n var increment = ctx.plugin.increment;\n var formatKey = ctx.plugin.formatKey;\n var formatSeed = ctx.plugin.formatSeed;\n\n // paranoid deviation from Fortuna:\n // reset key for every request to protect previously\n // generated random bytes should the key be discovered;\n // there is no 100ms based reseeding because of this\n // forced reseed for every `generateSync` call\n ctx.key = null;\n\n var b = forge.util.createBuffer();\n while(b.length() < count) {\n // if amount of data generated is greater than 1 MiB, trigger reseed\n if(ctx.generated > 0xfffff) {\n ctx.key = null;\n }\n\n if(ctx.key === null) {\n _reseedSync();\n }\n\n // generate the random bytes\n var bytes = cipher(ctx.key, ctx.seed);\n ctx.generated += bytes.length;\n b.putBytes(bytes);\n\n // generate bytes for a new key and seed\n ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed)));\n ctx.seed = formatSeed(cipher(ctx.key, ctx.seed));\n }\n\n return b.getBytes(count);\n };\n\n /**\n * Private function that asynchronously reseeds a generator.\n *\n * @param callback(err) called once the operation completes.\n */\n function _reseed(callback) {\n if(ctx.pools[0].messageLength >= 32) {\n _seed();\n return callback();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.seedFile(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n ctx.collect(bytes);\n _seed();\n callback();\n });\n }\n\n /**\n * Private function that synchronously reseeds a generator.\n */\n function _reseedSync() {\n if(ctx.pools[0].messageLength >= 32) {\n return _seed();\n }\n // not enough seed data...\n var needed = (32 - ctx.pools[0].messageLength) << 5;\n ctx.collect(ctx.seedFileSync(needed));\n _seed();\n }\n\n /**\n * Private function that seeds a generator once enough bytes are available.\n */\n function _seed() {\n // update reseed count\n ctx.reseeds = (ctx.reseeds === 0xffffffff) ? 0 : ctx.reseeds + 1;\n\n // goal is to update `key` via:\n // key = hash(key + s)\n // where 's' is all collected entropy from selected pools, then...\n\n // create a plugin-based message digest\n var md = ctx.plugin.md.create();\n\n // consume current key bytes\n md.update(ctx.keyBytes);\n\n // digest the entropy of pools whose index k meet the\n // condition 'n mod 2^k == 0' where n is the number of reseeds\n var _2powK = 1;\n for(var k = 0; k < 32; ++k) {\n if(ctx.reseeds % _2powK === 0) {\n md.update(ctx.pools[k].digest().getBytes());\n ctx.pools[k].start();\n }\n _2powK = _2powK << 1;\n }\n\n // get digest for key bytes\n ctx.keyBytes = md.digest().getBytes();\n\n // paranoid deviation from Fortuna:\n // update `seed` via `seed = hash(key)`\n // instead of initializing to zero once and only\n // ever incrementing it\n md.start();\n md.update(ctx.keyBytes);\n var seedBytes = md.digest().getBytes();\n\n // update state\n ctx.key = ctx.plugin.formatKey(ctx.keyBytes);\n ctx.seed = ctx.plugin.formatSeed(seedBytes);\n ctx.generated = 0;\n }\n\n /**\n * The built-in default seedFile. This seedFile is used when entropy\n * is needed immediately.\n *\n * @param needed the number of bytes that are needed.\n *\n * @return the random bytes.\n */\n function defaultSeedFile(needed) {\n // use window.crypto.getRandomValues strong source of entropy if available\n var getRandomValues = null;\n var globalScope = forge.util.globalScope;\n var _crypto = globalScope.crypto || globalScope.msCrypto;\n if(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n }\n\n var b = forge.util.createBuffer();\n if(getRandomValues) {\n while(b.length() < needed) {\n // max byte length is 65536 before QuotaExceededError is thrown\n // http://www.w3.org/TR/WebCryptoAPI/#RandomSource-method-getRandomValues\n var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4);\n var entropy = new Uint32Array(Math.floor(count));\n try {\n getRandomValues(entropy);\n for(var i = 0; i < entropy.length; ++i) {\n b.putInt32(entropy[i]);\n }\n } catch(e) {\n /* only ignore QuotaExceededError */\n if(!(typeof QuotaExceededError !== 'undefined' &&\n e instanceof QuotaExceededError)) {\n throw e;\n }\n }\n }\n }\n\n // be sad and add some weak random data\n if(b.length() < needed) {\n /* Draws from Park-Miller \"minimal standard\" 31 bit PRNG,\n implemented with David G. Carta's optimization: with 32 bit math\n and without division (Public Domain). */\n var hi, lo, next;\n var seed = Math.floor(Math.random() * 0x010000);\n while(b.length() < needed) {\n lo = 16807 * (seed & 0xFFFF);\n hi = 16807 * (seed >> 16);\n lo += (hi & 0x7FFF) << 16;\n lo += hi >> 15;\n lo = (lo & 0x7FFFFFFF) + (lo >> 31);\n seed = lo & 0xFFFFFFFF;\n\n // consume lower 3 bytes of seed\n for(var i = 0; i < 3; ++i) {\n // throw in more pseudo random\n next = seed >>> (i << 3);\n next ^= Math.floor(Math.random() * 0x0100);\n b.putByte(next & 0xFF);\n }\n }\n }\n\n return b.getBytes(needed);\n }\n // initialize seed file APIs\n if(_crypto) {\n // use nodejs async API\n ctx.seedFile = function(needed, callback) {\n _crypto.randomBytes(needed, function(err, bytes) {\n if(err) {\n return callback(err);\n }\n callback(null, bytes.toString());\n });\n };\n // use nodejs sync API\n ctx.seedFileSync = function(needed) {\n return _crypto.randomBytes(needed).toString();\n };\n } else {\n ctx.seedFile = function(needed, callback) {\n try {\n callback(null, defaultSeedFile(needed));\n } catch(e) {\n callback(e);\n }\n };\n ctx.seedFileSync = defaultSeedFile;\n }\n\n /**\n * Adds entropy to a prng ctx's accumulator.\n *\n * @param bytes the bytes of entropy as a string.\n */\n ctx.collect = function(bytes) {\n // iterate over pools distributing entropy cyclically\n var count = bytes.length;\n for(var i = 0; i < count; ++i) {\n ctx.pools[ctx.pool].update(bytes.substr(i, 1));\n ctx.pool = (ctx.pool === 31) ? 0 : ctx.pool + 1;\n }\n };\n\n /**\n * Collects an integer of n bits.\n *\n * @param i the integer entropy.\n * @param n the number of bits in the integer.\n */\n ctx.collectInt = function(i, n) {\n var bytes = '';\n for(var x = 0; x < n; x += 8) {\n bytes += String.fromCharCode((i >> x) & 0xFF);\n }\n ctx.collect(bytes);\n };\n\n /**\n * Registers a Web Worker to receive immediate entropy from the main thread.\n * This method is required until Web Workers can access the native crypto\n * API. This method should be called twice for each created worker, once in\n * the main thread, and once in the worker itself.\n *\n * @param worker the worker to register.\n */\n ctx.registerWorker = function(worker) {\n // worker receives random bytes\n if(worker === self) {\n ctx.seedFile = function(needed, callback) {\n function listener(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n self.removeEventListener('message', listener);\n callback(data.forge.prng.err, data.forge.prng.bytes);\n }\n }\n self.addEventListener('message', listener);\n self.postMessage({forge: {prng: {needed: needed}}});\n };\n } else {\n // main thread sends random bytes upon request\n var listener = function(e) {\n var data = e.data;\n if(data.forge && data.forge.prng) {\n ctx.seedFile(data.forge.prng.needed, function(err, bytes) {\n worker.postMessage({forge: {prng: {err: err, bytes: bytes}}});\n });\n }\n };\n // TODO: do we need to remove the event listener when the worker dies?\n worker.addEventListener('message', listener);\n }\n };\n\n return ctx;\n};\n","/**\n * Javascript implementation of PKCS#1 PSS signature padding.\n *\n * @author Stefan Siegl\n *\n * Copyright (c) 2012 Stefan Siegl \n */\nvar forge = require('./forge');\nrequire('./random');\nrequire('./util');\n\n// shortcut for PSS API\nvar pss = module.exports = forge.pss = forge.pss || {};\n\n/**\n * Creates a PSS signature scheme object.\n *\n * There are several ways to provide a salt for encoding:\n *\n * 1. Specify the saltLength only and the built-in PRNG will generate it.\n * 2. Specify the saltLength and a custom PRNG with 'getBytesSync' defined that\n * will be used.\n * 3. Specify the salt itself as a forge.util.ByteBuffer.\n *\n * @param options the options to use:\n * md the message digest object to use, a forge md instance.\n * mgf the mask generation function to use, a forge mgf instance.\n * [saltLength] the length of the salt in octets.\n * [prng] the pseudo-random number generator to use to produce a salt.\n * [salt] the salt to use when encoding.\n *\n * @return a signature scheme object.\n */\npss.create = function(options) {\n // backwards compatibility w/legacy args: hash, mgf, sLen\n if(arguments.length === 3) {\n options = {\n md: arguments[0],\n mgf: arguments[1],\n saltLength: arguments[2]\n };\n }\n\n var hash = options.md;\n var mgf = options.mgf;\n var hLen = hash.digestLength;\n\n var salt_ = options.salt || null;\n if(typeof salt_ === 'string') {\n // assume binary-encoded string\n salt_ = forge.util.createBuffer(salt_);\n }\n\n var sLen;\n if('saltLength' in options) {\n sLen = options.saltLength;\n } else if(salt_ !== null) {\n sLen = salt_.length();\n } else {\n throw new Error('Salt length not specified or specific salt not given.');\n }\n\n if(salt_ !== null && salt_.length() !== sLen) {\n throw new Error('Given salt length does not match length of given salt.');\n }\n\n var prng = options.prng || forge.random;\n\n var pssobj = {};\n\n /**\n * Encodes a PSS signature.\n *\n * This function implements EMSA-PSS-ENCODE as per RFC 3447, section 9.1.1.\n *\n * @param md the message digest object with the hash to sign.\n * @param modsBits the length of the RSA modulus in bits.\n *\n * @return the encoded message as a binary-encoded string of length\n * ceil((modBits - 1) / 8).\n */\n pssobj.encode = function(md, modBits) {\n var i;\n var emBits = modBits - 1;\n var emLen = Math.ceil(emBits / 8);\n\n /* 2. Let mHash = Hash(M), an octet string of length hLen. */\n var mHash = md.digest().getBytes();\n\n /* 3. If emLen < hLen + sLen + 2, output \"encoding error\" and stop. */\n if(emLen < hLen + sLen + 2) {\n throw new Error('Message is too long to encrypt.');\n }\n\n /* 4. Generate a random octet string salt of length sLen; if sLen = 0,\n * then salt is the empty string. */\n var salt;\n if(salt_ === null) {\n salt = prng.getBytesSync(sLen);\n } else {\n salt = salt_.bytes();\n }\n\n /* 5. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt; */\n var m_ = new forge.util.ByteBuffer();\n m_.fillWithByte(0, 8);\n m_.putBytes(mHash);\n m_.putBytes(salt);\n\n /* 6. Let H = Hash(M'), an octet string of length hLen. */\n hash.start();\n hash.update(m_.getBytes());\n var h = hash.digest().getBytes();\n\n /* 7. Generate an octet string PS consisting of emLen - sLen - hLen - 2\n * zero octets. The length of PS may be 0. */\n var ps = new forge.util.ByteBuffer();\n ps.fillWithByte(0, emLen - sLen - hLen - 2);\n\n /* 8. Let DB = PS || 0x01 || salt; DB is an octet string of length\n * emLen - hLen - 1. */\n ps.putByte(0x01);\n ps.putBytes(salt);\n var db = ps.getBytes();\n\n /* 9. Let dbMask = MGF(H, emLen - hLen - 1). */\n var maskLen = emLen - hLen - 1;\n var dbMask = mgf.generate(h, maskLen);\n\n /* 10. Let maskedDB = DB \\xor dbMask. */\n var maskedDB = '';\n for(i = 0; i < maskLen; i++) {\n maskedDB += String.fromCharCode(db.charCodeAt(i) ^ dbMask.charCodeAt(i));\n }\n\n /* 11. Set the leftmost 8emLen - emBits bits of the leftmost octet in\n * maskedDB to zero. */\n var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;\n maskedDB = String.fromCharCode(maskedDB.charCodeAt(0) & ~mask) +\n maskedDB.substr(1);\n\n /* 12. Let EM = maskedDB || H || 0xbc.\n * 13. Output EM. */\n return maskedDB + h + String.fromCharCode(0xbc);\n };\n\n /**\n * Verifies a PSS signature.\n *\n * This function implements EMSA-PSS-VERIFY as per RFC 3447, section 9.1.2.\n *\n * @param mHash the message digest hash, as a binary-encoded string, to\n * compare against the signature.\n * @param em the encoded message, as a binary-encoded string\n * (RSA decryption result).\n * @param modsBits the length of the RSA modulus in bits.\n *\n * @return true if the signature was verified, false if not.\n */\n pssobj.verify = function(mHash, em, modBits) {\n var i;\n var emBits = modBits - 1;\n var emLen = Math.ceil(emBits / 8);\n\n /* c. Convert the message representative m to an encoded message EM\n * of length emLen = ceil((modBits - 1) / 8) octets, where modBits\n * is the length in bits of the RSA modulus n */\n em = em.substr(-emLen);\n\n /* 3. If emLen < hLen + sLen + 2, output \"inconsistent\" and stop. */\n if(emLen < hLen + sLen + 2) {\n throw new Error('Inconsistent parameters to PSS signature verification.');\n }\n\n /* 4. If the rightmost octet of EM does not have hexadecimal value\n * 0xbc, output \"inconsistent\" and stop. */\n if(em.charCodeAt(emLen - 1) !== 0xbc) {\n throw new Error('Encoded message does not end in 0xBC.');\n }\n\n /* 5. Let maskedDB be the leftmost emLen - hLen - 1 octets of EM, and\n * let H be the next hLen octets. */\n var maskLen = emLen - hLen - 1;\n var maskedDB = em.substr(0, maskLen);\n var h = em.substr(maskLen, hLen);\n\n /* 6. If the leftmost 8emLen - emBits bits of the leftmost octet in\n * maskedDB are not all equal to zero, output \"inconsistent\" and stop. */\n var mask = (0xFF00 >> (8 * emLen - emBits)) & 0xFF;\n if((maskedDB.charCodeAt(0) & mask) !== 0) {\n throw new Error('Bits beyond keysize not zero as expected.');\n }\n\n /* 7. Let dbMask = MGF(H, emLen - hLen - 1). */\n var dbMask = mgf.generate(h, maskLen);\n\n /* 8. Let DB = maskedDB \\xor dbMask. */\n var db = '';\n for(i = 0; i < maskLen; i++) {\n db += String.fromCharCode(maskedDB.charCodeAt(i) ^ dbMask.charCodeAt(i));\n }\n\n /* 9. Set the leftmost 8emLen - emBits bits of the leftmost octet\n * in DB to zero. */\n db = String.fromCharCode(db.charCodeAt(0) & ~mask) + db.substr(1);\n\n /* 10. If the emLen - hLen - sLen - 2 leftmost octets of DB are not zero\n * or if the octet at position emLen - hLen - sLen - 1 (the leftmost\n * position is \"position 1\") does not have hexadecimal value 0x01,\n * output \"inconsistent\" and stop. */\n var checkLen = emLen - hLen - sLen - 2;\n for(i = 0; i < checkLen; i++) {\n if(db.charCodeAt(i) !== 0x00) {\n throw new Error('Leftmost octets not zero as expected');\n }\n }\n\n if(db.charCodeAt(checkLen) !== 0x01) {\n throw new Error('Inconsistent PSS signature, 0x01 marker not found');\n }\n\n /* 11. Let salt be the last sLen octets of DB. */\n var salt = db.substr(-sLen);\n\n /* 12. Let M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt */\n var m_ = new forge.util.ByteBuffer();\n m_.fillWithByte(0, 8);\n m_.putBytes(mHash);\n m_.putBytes(salt);\n\n /* 13. Let H' = Hash(M'), an octet string of length hLen. */\n hash.start();\n hash.update(m_.getBytes());\n var h_ = hash.digest().getBytes();\n\n /* 14. If H = H', output \"consistent.\" Otherwise, output \"inconsistent.\" */\n return h === h_;\n };\n\n return pssobj;\n};\n","/**\n * An API for getting cryptographically-secure random bytes. The bytes are\n * generated using the Fortuna algorithm devised by Bruce Schneier and\n * Niels Ferguson.\n *\n * Getting strong random bytes is not yet easy to do in javascript. The only\n * truish random entropy that can be collected is from the mouse, keyboard, or\n * from timing with respect to page loads, etc. This generator makes a poor\n * attempt at providing random bytes when those sources haven't yet provided\n * enough entropy to initially seed or to reseed the PRNG.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2014 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./sha256');\nrequire('./prng');\nrequire('./util');\n\n(function() {\n\n// forge.random already defined\nif(forge.random && forge.random.getBytes) {\n module.exports = forge.random;\n return;\n}\n\n(function(jQuery) {\n\n// the default prng plugin, uses AES-128\nvar prng_aes = {};\nvar _prng_aes_output = new Array(4);\nvar _prng_aes_buffer = forge.util.createBuffer();\nprng_aes.formatKey = function(key) {\n // convert the key into 32-bit integers\n var tmp = forge.util.createBuffer(key);\n key = new Array(4);\n key[0] = tmp.getInt32();\n key[1] = tmp.getInt32();\n key[2] = tmp.getInt32();\n key[3] = tmp.getInt32();\n\n // return the expanded key\n return forge.aes._expandKey(key, false);\n};\nprng_aes.formatSeed = function(seed) {\n // convert seed into 32-bit integers\n var tmp = forge.util.createBuffer(seed);\n seed = new Array(4);\n seed[0] = tmp.getInt32();\n seed[1] = tmp.getInt32();\n seed[2] = tmp.getInt32();\n seed[3] = tmp.getInt32();\n return seed;\n};\nprng_aes.cipher = function(key, seed) {\n forge.aes._updateBlock(key, seed, _prng_aes_output, false);\n _prng_aes_buffer.putInt32(_prng_aes_output[0]);\n _prng_aes_buffer.putInt32(_prng_aes_output[1]);\n _prng_aes_buffer.putInt32(_prng_aes_output[2]);\n _prng_aes_buffer.putInt32(_prng_aes_output[3]);\n return _prng_aes_buffer.getBytes();\n};\nprng_aes.increment = function(seed) {\n // FIXME: do we care about carry or signed issues?\n ++seed[3];\n return seed;\n};\nprng_aes.md = forge.md.sha256;\n\n/**\n * Creates a new PRNG.\n */\nfunction spawnPrng() {\n var ctx = forge.prng.create(prng_aes);\n\n /**\n * Gets random bytes. If a native secure crypto API is unavailable, this\n * method tries to make the bytes more unpredictable by drawing from data that\n * can be collected from the user of the browser, eg: mouse movement.\n *\n * If a callback is given, this method will be called asynchronously.\n *\n * @param count the number of random bytes to get.\n * @param [callback(err, bytes)] called once the operation completes.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytes = function(count, callback) {\n return ctx.generate(count, callback);\n };\n\n /**\n * Gets random bytes asynchronously. If a native secure crypto API is\n * unavailable, this method tries to make the bytes more unpredictable by\n * drawing from data that can be collected from the user of the browser,\n * eg: mouse movement.\n *\n * @param count the number of random bytes to get.\n *\n * @return the random bytes in a string.\n */\n ctx.getBytesSync = function(count) {\n return ctx.generate(count);\n };\n\n return ctx;\n}\n\n// create default prng context\nvar _ctx = spawnPrng();\n\n// add other sources of entropy only if window.crypto.getRandomValues is not\n// available -- otherwise this source will be automatically used by the prng\nvar getRandomValues = null;\nvar globalScope = forge.util.globalScope;\nvar _crypto = globalScope.crypto || globalScope.msCrypto;\nif(_crypto && _crypto.getRandomValues) {\n getRandomValues = function(arr) {\n return _crypto.getRandomValues(arr);\n };\n}\n\nif(forge.options.usePureJavaScript ||\n (!forge.util.isNodejs && !getRandomValues)) {\n // if this is a web worker, do not use weak entropy, instead register to\n // receive strong entropy asynchronously from the main thread\n if(typeof window === 'undefined' || window.document === undefined) {\n // FIXME:\n }\n\n // get load time entropy\n _ctx.collectInt(+new Date(), 32);\n\n // add some entropy from navigator object\n if(typeof(navigator) !== 'undefined') {\n var _navBytes = '';\n for(var key in navigator) {\n try {\n if(typeof(navigator[key]) == 'string') {\n _navBytes += navigator[key];\n }\n } catch(e) {\n /* Some navigator keys might not be accessible, e.g. the geolocation\n attribute throws an exception if touched in Mozilla chrome://\n context.\n\n Silently ignore this and just don't use this as a source of\n entropy. */\n }\n }\n _ctx.collect(_navBytes);\n _navBytes = null;\n }\n\n // add mouse and keyboard collectors if jquery is available\n if(jQuery) {\n // set up mouse entropy capture\n jQuery().mousemove(function(e) {\n // add mouse coords\n _ctx.collectInt(e.clientX, 16);\n _ctx.collectInt(e.clientY, 16);\n });\n\n // set up keyboard entropy capture\n jQuery().keypress(function(e) {\n _ctx.collectInt(e.charCode, 8);\n });\n }\n}\n\n/* Random API */\nif(!forge.random) {\n forge.random = _ctx;\n} else {\n // extend forge.random with _ctx\n for(var key in _ctx) {\n forge.random[key] = _ctx[key];\n }\n}\n\n// expose spawn PRNG\nforge.random.createInstance = spawnPrng;\n\nmodule.exports = forge.random;\n\n})(typeof(jQuery) !== 'undefined' ? jQuery : null);\n\n})();\n","/**\n * RC2 implementation.\n *\n * @author Stefan Siegl\n *\n * Copyright (c) 2012 Stefan Siegl \n *\n * Information on the RC2 cipher is available from RFC #2268,\n * http://www.ietf.org/rfc/rfc2268.txt\n */\nvar forge = require('./forge');\nrequire('./util');\n\nvar piTable = [\n 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d,\n 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2,\n 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32,\n 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82,\n 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc,\n 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26,\n 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03,\n 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7,\n 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a,\n 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec,\n 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39,\n 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31,\n 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9,\n 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9,\n 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e,\n 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad\n];\n\nvar s = [1, 2, 3, 5];\n\n/**\n * Rotate a word left by given number of bits.\n *\n * Bits that are shifted out on the left are put back in on the right\n * hand side.\n *\n * @param word The word to shift left.\n * @param bits The number of bits to shift by.\n * @return The rotated word.\n */\nvar rol = function(word, bits) {\n return ((word << bits) & 0xffff) | ((word & 0xffff) >> (16 - bits));\n};\n\n/**\n * Rotate a word right by given number of bits.\n *\n * Bits that are shifted out on the right are put back in on the left\n * hand side.\n *\n * @param word The word to shift right.\n * @param bits The number of bits to shift by.\n * @return The rotated word.\n */\nvar ror = function(word, bits) {\n return ((word & 0xffff) >> bits) | ((word << (16 - bits)) & 0xffff);\n};\n\n/* RC2 API */\nmodule.exports = forge.rc2 = forge.rc2 || {};\n\n/**\n * Perform RC2 key expansion as per RFC #2268, section 2.\n *\n * @param key variable-length user key (between 1 and 128 bytes)\n * @param effKeyBits number of effective key bits (default: 128)\n * @return the expanded RC2 key (ByteBuffer of 128 bytes)\n */\nforge.rc2.expandKey = function(key, effKeyBits) {\n if(typeof key === 'string') {\n key = forge.util.createBuffer(key);\n }\n effKeyBits = effKeyBits || 128;\n\n /* introduce variables that match the names used in RFC #2268 */\n var L = key;\n var T = key.length();\n var T1 = effKeyBits;\n var T8 = Math.ceil(T1 / 8);\n var TM = 0xff >> (T1 & 0x07);\n var i;\n\n for(i = T; i < 128; i++) {\n L.putByte(piTable[(L.at(i - 1) + L.at(i - T)) & 0xff]);\n }\n\n L.setAt(128 - T8, piTable[L.at(128 - T8) & TM]);\n\n for(i = 127 - T8; i >= 0; i--) {\n L.setAt(i, piTable[L.at(i + 1) ^ L.at(i + T8)]);\n }\n\n return L;\n};\n\n/**\n * Creates a RC2 cipher object.\n *\n * @param key the symmetric key to use (as base for key generation).\n * @param bits the number of effective key bits.\n * @param encrypt false for decryption, true for encryption.\n *\n * @return the cipher.\n */\nvar createCipher = function(key, bits, encrypt) {\n var _finish = false, _input = null, _output = null, _iv = null;\n var mixRound, mashRound;\n var i, j, K = [];\n\n /* Expand key and fill into K[] Array */\n key = forge.rc2.expandKey(key, bits);\n for(i = 0; i < 64; i++) {\n K.push(key.getInt16Le());\n }\n\n if(encrypt) {\n /**\n * Perform one mixing round \"in place\".\n *\n * @param R Array of four words to perform mixing on.\n */\n mixRound = function(R) {\n for(i = 0; i < 4; i++) {\n R[i] += K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +\n ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);\n R[i] = rol(R[i], s[i]);\n j++;\n }\n };\n\n /**\n * Perform one mashing round \"in place\".\n *\n * @param R Array of four words to perform mashing on.\n */\n mashRound = function(R) {\n for(i = 0; i < 4; i++) {\n R[i] += K[R[(i + 3) % 4] & 63];\n }\n };\n } else {\n /**\n * Perform one r-mixing round \"in place\".\n *\n * @param R Array of four words to perform mixing on.\n */\n mixRound = function(R) {\n for(i = 3; i >= 0; i--) {\n R[i] = ror(R[i], s[i]);\n R[i] -= K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) +\n ((~R[(i + 3) % 4]) & R[(i + 1) % 4]);\n j--;\n }\n };\n\n /**\n * Perform one r-mashing round \"in place\".\n *\n * @param R Array of four words to perform mashing on.\n */\n mashRound = function(R) {\n for(i = 3; i >= 0; i--) {\n R[i] -= K[R[(i + 3) % 4] & 63];\n }\n };\n }\n\n /**\n * Run the specified cipher execution plan.\n *\n * This function takes four words from the input buffer, applies the IV on\n * it (if requested) and runs the provided execution plan.\n *\n * The plan must be put together in form of a array of arrays. Where the\n * outer one is simply a list of steps to perform and the inner one needs\n * to have two elements: the first one telling how many rounds to perform,\n * the second one telling what to do (i.e. the function to call).\n *\n * @param {Array} plan The plan to execute.\n */\n var runPlan = function(plan) {\n var R = [];\n\n /* Get data from input buffer and fill the four words into R */\n for(i = 0; i < 4; i++) {\n var val = _input.getInt16Le();\n\n if(_iv !== null) {\n if(encrypt) {\n /* We're encrypting, apply the IV first. */\n val ^= _iv.getInt16Le();\n } else {\n /* We're decryption, keep cipher text for next block. */\n _iv.putInt16Le(val);\n }\n }\n\n R.push(val & 0xffff);\n }\n\n /* Reset global \"j\" variable as per spec. */\n j = encrypt ? 0 : 63;\n\n /* Run execution plan. */\n for(var ptr = 0; ptr < plan.length; ptr++) {\n for(var ctr = 0; ctr < plan[ptr][0]; ctr++) {\n plan[ptr][1](R);\n }\n }\n\n /* Write back result to output buffer. */\n for(i = 0; i < 4; i++) {\n if(_iv !== null) {\n if(encrypt) {\n /* We're encrypting in CBC-mode, feed back encrypted bytes into\n IV buffer to carry it forward to next block. */\n _iv.putInt16Le(R[i]);\n } else {\n R[i] ^= _iv.getInt16Le();\n }\n }\n\n _output.putInt16Le(R[i]);\n }\n };\n\n /* Create cipher object */\n var cipher = null;\n cipher = {\n /**\n * Starts or restarts the encryption or decryption process, whichever\n * was previously configured.\n *\n * To use the cipher in CBC mode, iv may be given either as a string\n * of bytes, or as a byte buffer. For ECB mode, give null as iv.\n *\n * @param iv the initialization vector to use, null for ECB mode.\n * @param output the output the buffer to write to, null to create one.\n */\n start: function(iv, output) {\n if(iv) {\n /* CBC mode */\n if(typeof iv === 'string') {\n iv = forge.util.createBuffer(iv);\n }\n }\n\n _finish = false;\n _input = forge.util.createBuffer();\n _output = output || new forge.util.createBuffer();\n _iv = iv;\n\n cipher.output = _output;\n },\n\n /**\n * Updates the next block.\n *\n * @param input the buffer to read from.\n */\n update: function(input) {\n if(!_finish) {\n // not finishing, so fill the input buffer with more input\n _input.putBuffer(input);\n }\n\n while(_input.length() >= 8) {\n runPlan([\n [ 5, mixRound ],\n [ 1, mashRound ],\n [ 6, mixRound ],\n [ 1, mashRound ],\n [ 5, mixRound ]\n ]);\n }\n },\n\n /**\n * Finishes encrypting or decrypting.\n *\n * @param pad a padding function to use, null for PKCS#7 padding,\n * signature(blockSize, buffer, decrypt).\n *\n * @return true if successful, false on error.\n */\n finish: function(pad) {\n var rval = true;\n\n if(encrypt) {\n if(pad) {\n rval = pad(8, _input, !encrypt);\n } else {\n // add PKCS#7 padding to block (each pad byte is the\n // value of the number of pad bytes)\n var padding = (_input.length() === 8) ? 8 : (8 - _input.length());\n _input.fillWithByte(padding, padding);\n }\n }\n\n if(rval) {\n // do final update\n _finish = true;\n cipher.update();\n }\n\n if(!encrypt) {\n // check for error: input data not a multiple of block size\n rval = (_input.length() === 0);\n if(rval) {\n if(pad) {\n rval = pad(8, _output, !encrypt);\n } else {\n // ensure padding byte count is valid\n var len = _output.length();\n var count = _output.at(len - 1);\n\n if(count > len) {\n rval = false;\n } else {\n // trim off padding bytes\n _output.truncate(count);\n }\n }\n }\n }\n\n return rval;\n }\n };\n\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the\n * given symmetric key. The output will be stored in the 'output' member\n * of the returned cipher.\n *\n * The key and iv may be given as a string of bytes or a byte buffer.\n * The cipher is initialized to use 128 effective key bits.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n *\n * @return the cipher.\n */\nforge.rc2.startEncrypting = function(key, iv, output) {\n var cipher = forge.rc2.createEncryptionCipher(key, 128);\n cipher.start(iv, output);\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to encrypt data in ECB or CBC mode using the\n * given symmetric key.\n *\n * The key may be given as a string of bytes or a byte buffer.\n *\n * To start encrypting call start() on the cipher with an iv and optional\n * output buffer.\n *\n * @param key the symmetric key to use.\n *\n * @return the cipher.\n */\nforge.rc2.createEncryptionCipher = function(key, bits) {\n return createCipher(key, bits, true);\n};\n\n/**\n * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the\n * given symmetric key. The output will be stored in the 'output' member\n * of the returned cipher.\n *\n * The key and iv may be given as a string of bytes or a byte buffer.\n * The cipher is initialized to use 128 effective key bits.\n *\n * @param key the symmetric key to use.\n * @param iv the initialization vector to use.\n * @param output the buffer to write to, null to create one.\n *\n * @return the cipher.\n */\nforge.rc2.startDecrypting = function(key, iv, output) {\n var cipher = forge.rc2.createDecryptionCipher(key, 128);\n cipher.start(iv, output);\n return cipher;\n};\n\n/**\n * Creates an RC2 cipher object to decrypt data in ECB or CBC mode using the\n * given symmetric key.\n *\n * The key may be given as a string of bytes or a byte buffer.\n *\n * To start decrypting call start() on the cipher with an iv and optional\n * output buffer.\n *\n * @param key the symmetric key to use.\n *\n * @return the cipher.\n */\nforge.rc2.createDecryptionCipher = function(key, bits) {\n return createCipher(key, bits, false);\n};\n","/**\n * Javascript implementation of basic RSA algorithms.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The only algorithm currently supported for PKI is RSA.\n *\n * An RSA key is often stored in ASN.1 DER format. The SubjectPublicKeyInfo\n * ASN.1 structure is composed of an algorithm of type AlgorithmIdentifier\n * and a subjectPublicKey of type bit string.\n *\n * The AlgorithmIdentifier contains an Object Identifier (OID) and parameters\n * for the algorithm, if any. In the case of RSA, there aren't any.\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * For an RSA public key, the subjectPublicKey is:\n *\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n *\n * PrivateKeyInfo ::= SEQUENCE {\n * version Version,\n * privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,\n * privateKey PrivateKey,\n * attributes [0] IMPLICIT Attributes OPTIONAL\n * }\n *\n * Version ::= INTEGER\n * PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier\n * PrivateKey ::= OCTET STRING\n * Attributes ::= SET OF Attribute\n *\n * An RSA private key as the following structure:\n *\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p-1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER -- (inverse of q) mod p\n * }\n *\n * Version ::= INTEGER\n *\n * The OID for the RSA key algorithm is: 1.2.840.113549.1.1.1\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./jsbn');\nrequire('./oids');\nrequire('./pkcs1');\nrequire('./prime');\nrequire('./random');\nrequire('./util');\n\nif(typeof BigInteger === 'undefined') {\n var BigInteger = forge.jsbn.BigInteger;\n}\n\nvar _crypto = forge.util.isNodejs ? require('crypto') : null;\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n// shortcut for util API\nvar util = forge.util;\n\n/*\n * RSA encryption and decryption, see RFC 2313.\n */\nforge.pki = forge.pki || {};\nmodule.exports = forge.pki.rsa = forge.rsa = forge.rsa || {};\nvar pki = forge.pki;\n\n// for finding primes, which are 30k+i for i = 1, 7, 11, 13, 17, 19, 23, 29\nvar GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2];\n\n// validator for a PrivateKeyInfo structure\nvar privateKeyValidator = {\n // PrivateKeyInfo\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'PrivateKeyInfo.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // privateKeyAlgorithm\n name: 'PrivateKeyInfo.privateKeyAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'privateKeyOid'\n }]\n }, {\n // PrivateKey\n name: 'PrivateKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'privateKey'\n }]\n};\n\n// validator for an RSA private key\nvar rsaPrivateKeyValidator = {\n // RSAPrivateKey\n name: 'RSAPrivateKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // Version (INTEGER)\n name: 'RSAPrivateKey.version',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyVersion'\n }, {\n // modulus (n)\n name: 'RSAPrivateKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPrivateKey.publicExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPublicExponent'\n }, {\n // privateExponent (d)\n name: 'RSAPrivateKey.privateExponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrivateExponent'\n }, {\n // prime1 (p)\n name: 'RSAPrivateKey.prime1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime1'\n }, {\n // prime2 (q)\n name: 'RSAPrivateKey.prime2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyPrime2'\n }, {\n // exponent1 (d mod (p-1))\n name: 'RSAPrivateKey.exponent1',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent1'\n }, {\n // exponent2 (d mod (q-1))\n name: 'RSAPrivateKey.exponent2',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyExponent2'\n }, {\n // coefficient ((inverse of q) mod p)\n name: 'RSAPrivateKey.coefficient',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'privateKeyCoefficient'\n }]\n};\n\n// validator for an RSA public key\nvar rsaPublicKeyValidator = {\n // RSAPublicKey\n name: 'RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // modulus (n)\n name: 'RSAPublicKey.modulus',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyModulus'\n }, {\n // publicExponent (e)\n name: 'RSAPublicKey.exponent',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'publicKeyExponent'\n }]\n};\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator = {\n name: 'SubjectPublicKeyInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'subjectPublicKeyInfo',\n value: [{\n name: 'SubjectPublicKeyInfo.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'publicKeyOid'\n }]\n }, {\n // subjectPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n value: [{\n // RSAPublicKey\n name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n optional: true,\n captureAsn1: 'rsaPublicKey'\n }]\n }]\n};\n\n// validator for a DigestInfo structure\nvar digestInfoValidator = {\n name: 'DigestInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'DigestInfo.DigestAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'DigestInfo.DigestAlgorithm.algorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'algorithmIdentifier'\n }, {\n // NULL paramters\n name: 'DigestInfo.DigestAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.NULL,\n // captured only to check existence for md2 and md5\n capture: 'parameters',\n optional: true,\n constructed: false\n }]\n }, {\n // digest\n name: 'DigestInfo.digest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OCTETSTRING,\n constructed: false,\n capture: 'digest'\n }]\n};\n\n/**\n * Wrap digest in DigestInfo object.\n *\n * This function implements EMSA-PKCS1-v1_5-ENCODE as per RFC 3447.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n *\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * @param md the message digest object with the hash to sign.\n *\n * @return the encoded message (ready for RSA encrytion)\n */\nvar emsaPkcs1v15encode = function(md) {\n // get the oid for the algorithm\n var oid;\n if(md.algorithm in pki.oids) {\n oid = pki.oids[md.algorithm];\n } else {\n var error = new Error('Unknown message digest algorithm.');\n error.algorithm = md.algorithm;\n throw error;\n }\n var oidBytes = asn1.oidToDer(oid).getBytes();\n\n // create the digest info\n var digestInfo = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var digestAlgorithm = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false, oidBytes));\n digestAlgorithm.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.NULL, false, ''));\n var digest = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING,\n false, md.digest().getBytes());\n digestInfo.value.push(digestAlgorithm);\n digestInfo.value.push(digest);\n\n // encode digest info\n return asn1.toDer(digestInfo).getBytes();\n};\n\n/**\n * Performs x^c mod n (RSA encryption or decryption operation).\n *\n * @param x the number to raise and mod.\n * @param key the key to use.\n * @param pub true if the key is public, false if private.\n *\n * @return the result of x^c mod n.\n */\nvar _modPow = function(x, key, pub) {\n if(pub) {\n return x.modPow(key.e, key.n);\n }\n\n if(!key.p || !key.q) {\n // allow calculation without CRT params (slow)\n return x.modPow(key.d, key.n);\n }\n\n // pre-compute dP, dQ, and qInv if necessary\n if(!key.dP) {\n key.dP = key.d.mod(key.p.subtract(BigInteger.ONE));\n }\n if(!key.dQ) {\n key.dQ = key.d.mod(key.q.subtract(BigInteger.ONE));\n }\n if(!key.qInv) {\n key.qInv = key.q.modInverse(key.p);\n }\n\n /* Chinese remainder theorem (CRT) states:\n\n Suppose n1, n2, ..., nk are positive integers which are pairwise\n coprime (n1 and n2 have no common factors other than 1). For any\n integers x1, x2, ..., xk there exists an integer x solving the\n system of simultaneous congruences (where ~= means modularly\n congruent so a ~= b mod n means a mod n = b mod n):\n\n x ~= x1 mod n1\n x ~= x2 mod n2\n ...\n x ~= xk mod nk\n\n This system of congruences has a single simultaneous solution x\n between 0 and n - 1. Furthermore, each xk solution and x itself\n is congruent modulo the product n = n1*n2*...*nk.\n So x1 mod n = x2 mod n = xk mod n = x mod n.\n\n The single simultaneous solution x can be solved with the following\n equation:\n\n x = sum(xi*ri*si) mod n where ri = n/ni and si = ri^-1 mod ni.\n\n Where x is less than n, xi = x mod ni.\n\n For RSA we are only concerned with k = 2. The modulus n = pq, where\n p and q are coprime. The RSA decryption algorithm is:\n\n y = x^d mod n\n\n Given the above:\n\n x1 = x^d mod p\n r1 = n/p = q\n s1 = q^-1 mod p\n x2 = x^d mod q\n r2 = n/q = p\n s2 = p^-1 mod q\n\n So y = (x1r1s1 + x2r2s2) mod n\n = ((x^d mod p)q(q^-1 mod p) + (x^d mod q)p(p^-1 mod q)) mod n\n\n According to Fermat's Little Theorem, if the modulus P is prime,\n for any integer A not evenly divisible by P, A^(P-1) ~= 1 mod P.\n Since A is not divisible by P it follows that if:\n N ~= M mod (P - 1), then A^N mod P = A^M mod P. Therefore:\n\n A^N mod P = A^(M mod (P - 1)) mod P. (The latter takes less effort\n to calculate). In order to calculate x^d mod p more quickly the\n exponent d mod (p - 1) is stored in the RSA private key (the same\n is done for x^d mod q). These values are referred to as dP and dQ\n respectively. Therefore we now have:\n\n y = ((x^dP mod p)q(q^-1 mod p) + (x^dQ mod q)p(p^-1 mod q)) mod n\n\n Since we'll be reducing x^dP by modulo p (same for q) we can also\n reduce x by p (and q respectively) before hand. Therefore, let\n\n xp = ((x mod p)^dP mod p), and\n xq = ((x mod q)^dQ mod q), yielding:\n\n y = (xp*q*(q^-1 mod p) + xq*p*(p^-1 mod q)) mod n\n\n This can be further reduced to a simple algorithm that only\n requires 1 inverse (the q inverse is used) to be used and stored.\n The algorithm is called Garner's algorithm. If qInv is the\n inverse of q, we simply calculate:\n\n y = (qInv*(xp - xq) mod p) * q + xq\n\n However, there are two further complications. First, we need to\n ensure that xp > xq to prevent signed BigIntegers from being used\n so we add p until this is true (since we will be mod'ing with\n p anyway). Then, there is a known timing attack on algorithms\n using the CRT. To mitigate this risk, \"cryptographic blinding\"\n should be used. This requires simply generating a random number r\n between 0 and n-1 and its inverse and multiplying x by r^e before\n calculating y and then multiplying y by r^-1 afterwards. Note that\n r must be coprime with n (gcd(r, n) === 1) in order to have an\n inverse.\n */\n\n // cryptographic blinding\n var r;\n do {\n r = new BigInteger(\n forge.util.bytesToHex(forge.random.getBytes(key.n.bitLength() / 8)),\n 16);\n } while(r.compareTo(key.n) >= 0 || !r.gcd(key.n).equals(BigInteger.ONE));\n x = x.multiply(r.modPow(key.e, key.n)).mod(key.n);\n\n // calculate xp and xq\n var xp = x.mod(key.p).modPow(key.dP, key.p);\n var xq = x.mod(key.q).modPow(key.dQ, key.q);\n\n // xp must be larger than xq to avoid signed bit usage\n while(xp.compareTo(xq) < 0) {\n xp = xp.add(key.p);\n }\n\n // do last step\n var y = xp.subtract(xq)\n .multiply(key.qInv).mod(key.p)\n .multiply(key.q).add(xq);\n\n // remove effect of random for cryptographic blinding\n y = y.multiply(r.modInverse(key.n)).mod(key.n);\n\n return y;\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'sign' on a private key object or\n * 'encrypt' on a public key object instead.\n *\n * Performs RSA encryption.\n *\n * The parameter bt controls whether to put padding bytes before the\n * message passed in. Set bt to either true or false to disable padding\n * completely (in order to handle e.g. EMSA-PSS encoding seperately before),\n * signaling whether the encryption operation is a public key operation\n * (i.e. encrypting data) or not, i.e. private key operation (data signing).\n *\n * For PKCS#1 v1.5 padding pass in the block type to use, i.e. either 0x01\n * (for signing) or 0x02 (for encryption). The key operation mode (private\n * or public) is derived from this flag in that case).\n *\n * @param m the message to encrypt as a byte string.\n * @param key the RSA key to use.\n * @param bt for PKCS#1 v1.5 padding, the block type to use\n * (0x01 for private key, 0x02 for public),\n * to disable padding: true = public key, false = private key.\n *\n * @return the encrypted bytes as a string.\n */\npki.rsa.encrypt = function(m, key, bt) {\n var pub = bt;\n var eb;\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n if(bt !== false && bt !== true) {\n // legacy, default to PKCS#1 v1.5 padding\n pub = (bt === 0x02);\n eb = _encodePkcs1_v1_5(m, key, bt);\n } else {\n eb = forge.util.createBuffer();\n eb.putBytes(m);\n }\n\n // load encryption block as big integer 'x'\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var x = new BigInteger(eb.toHex(), 16);\n\n // do RSA encryption\n var y = _modPow(x, key, pub);\n\n // convert y into the encrypted data byte string, if y is shorter in\n // bytes than k, then prepend zero bytes to fill up ed\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var yhex = y.toString(16);\n var ed = forge.util.createBuffer();\n var zeros = k - Math.ceil(yhex.length / 2);\n while(zeros > 0) {\n ed.putByte(0x00);\n --zeros;\n }\n ed.putBytes(forge.util.hexToBytes(yhex));\n return ed.getBytes();\n};\n\n/**\n * NOTE: THIS METHOD IS DEPRECATED, use 'decrypt' on a private key object or\n * 'verify' on a public key object instead.\n *\n * Performs RSA decryption.\n *\n * The parameter ml controls whether to apply PKCS#1 v1.5 padding\n * or not. Set ml = false to disable padding removal completely\n * (in order to handle e.g. EMSA-PSS later on) and simply pass back\n * the RSA encryption block.\n *\n * @param ed the encrypted data to decrypt in as a byte string.\n * @param key the RSA key to use.\n * @param pub true for a public key operation, false for private.\n * @param ml the message length, if known, false to disable padding.\n *\n * @return the decrypted message as a byte string.\n */\npki.rsa.decrypt = function(ed, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n // error if the length of the encrypted data ED is not k\n if(ed.length !== k) {\n var error = new Error('Encrypted message length is invalid.');\n error.length = ed.length;\n error.expected = k;\n throw error;\n }\n\n // convert encrypted data into a big integer\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var y = new BigInteger(forge.util.createBuffer(ed).toHex(), 16);\n\n // y must be less than the modulus or it wasn't the result of\n // a previous mod operation (encryption) using that modulus\n if(y.compareTo(key.n) >= 0) {\n throw new Error('Encrypted message is invalid.');\n }\n\n // do RSA decryption\n var x = _modPow(y, key, pub);\n\n // create the encryption block, if x is shorter in bytes than k, then\n // prepend zero bytes to fill up eb\n // FIXME: hex conversion inefficient, get BigInteger w/byte strings\n var xhex = x.toString(16);\n var eb = forge.util.createBuffer();\n var zeros = k - Math.ceil(xhex.length / 2);\n while(zeros > 0) {\n eb.putByte(0x00);\n --zeros;\n }\n eb.putBytes(forge.util.hexToBytes(xhex));\n\n if(ml !== false) {\n // legacy, default to PKCS#1 v1.5 padding\n return _decodePkcs1_v1_5(eb.getBytes(), key, pub);\n }\n\n // return message\n return eb.getBytes();\n};\n\n/**\n * Creates an RSA key-pair generation state object. It is used to allow\n * key-generation to be performed in steps. It also allows for a UI to\n * display progress updates.\n *\n * @param bits the size for the private key in bits, defaults to 2048.\n * @param e the public exponent to use, defaults to 65537 (0x10001).\n * @param [options] the options to use.\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\".\n * algorithm the algorithm to use (default: 'PRIMEINC').\n *\n * @return the state object to use to generate the key-pair.\n */\npki.rsa.createKeyPairGenerationState = function(bits, e, options) {\n // TODO: migrate step-based prime generation code to forge.prime\n\n // set default bits\n if(typeof(bits) === 'string') {\n bits = parseInt(bits, 10);\n }\n bits = bits || 2048;\n\n // create prng with api that matches BigInteger secure random\n options = options || {};\n var prng = options.prng || forge.random;\n var rng = {\n // x is an array to fill with bytes\n nextBytes: function(x) {\n var b = prng.getBytesSync(x.length);\n for(var i = 0; i < x.length; ++i) {\n x[i] = b.charCodeAt(i);\n }\n }\n };\n\n var algorithm = options.algorithm || 'PRIMEINC';\n\n // create PRIMEINC algorithm state\n var rval;\n if(algorithm === 'PRIMEINC') {\n rval = {\n algorithm: algorithm,\n state: 0,\n bits: bits,\n rng: rng,\n eInt: e || 65537,\n e: new BigInteger(null),\n p: null,\n q: null,\n qBits: bits >> 1,\n pBits: bits - (bits >> 1),\n pqState: 0,\n num: null,\n keys: null\n };\n rval.e.fromInt(rval.eInt);\n } else {\n throw new Error('Invalid key generation algorithm: ' + algorithm);\n }\n\n return rval;\n};\n\n/**\n * Attempts to runs the key-generation algorithm for at most n seconds\n * (approximately) using the given state. When key-generation has completed,\n * the keys will be stored in state.keys.\n *\n * To use this function to update a UI while generating a key or to prevent\n * causing browser lockups/warnings, set \"n\" to a value other than 0. A\n * simple pattern for generating a key and showing a progress indicator is:\n *\n * var state = pki.rsa.createKeyPairGenerationState(2048);\n * var step = function() {\n * // step key-generation, run algorithm for 100 ms, repeat\n * if(!forge.pki.rsa.stepKeyPairGenerationState(state, 100)) {\n * setTimeout(step, 1);\n * } else {\n * // key-generation complete\n * // TODO: turn off progress indicator here\n * // TODO: use the generated key-pair in \"state.keys\"\n * }\n * };\n * // TODO: turn on progress indicator here\n * setTimeout(step, 0);\n *\n * @param state the state to use.\n * @param n the maximum number of milliseconds to run the algorithm for, 0\n * to run the algorithm to completion.\n *\n * @return true if the key-generation completed, false if not.\n */\npki.rsa.stepKeyPairGenerationState = function(state, n) {\n // set default algorithm if not set\n if(!('algorithm' in state)) {\n state.algorithm = 'PRIMEINC';\n }\n\n // TODO: migrate step-based prime generation code to forge.prime\n // TODO: abstract as PRIMEINC algorithm\n\n // do key generation (based on Tom Wu's rsa.js, see jsbn.js license)\n // with some minor optimizations and designed to run in steps\n\n // local state vars\n var THIRTY = new BigInteger(null);\n THIRTY.fromInt(30);\n var deltaIdx = 0;\n var op_or = function(x, y) {return x | y;};\n\n // keep stepping until time limit is reached or done\n var t1 = +new Date();\n var t2;\n var total = 0;\n while(state.keys === null && (n <= 0 || total < n)) {\n // generate p or q\n if(state.state === 0) {\n /* Note: All primes are of the form:\n\n 30k+i, for i < 30 and gcd(30, i)=1, where there are 8 values for i\n\n When we generate a random number, we always align it at 30k + 1. Each\n time the number is determined not to be prime we add to get to the\n next 'i', eg: if the number was at 30k + 1 we add 6. */\n var bits = (state.p === null) ? state.pBits : state.qBits;\n var bits1 = bits - 1;\n\n // get a random number\n if(state.pqState === 0) {\n state.num = new BigInteger(bits, state.rng);\n // force MSB set\n if(!state.num.testBit(bits1)) {\n state.num.bitwiseTo(\n BigInteger.ONE.shiftLeft(bits1), op_or, state.num);\n }\n // align number on 30k+1 boundary\n state.num.dAddOffset(31 - state.num.mod(THIRTY).byteValue(), 0);\n deltaIdx = 0;\n\n ++state.pqState;\n } else if(state.pqState === 1) {\n // try to make the number a prime\n if(state.num.bitLength() > bits) {\n // overflow, try again\n state.pqState = 0;\n // do primality test\n } else if(state.num.isProbablePrime(\n _getMillerRabinTests(state.num.bitLength()))) {\n ++state.pqState;\n } else {\n // get next potential prime\n state.num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0);\n }\n } else if(state.pqState === 2) {\n // ensure number is coprime with e\n state.pqState =\n (state.num.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) === 0) ? 3 : 0;\n } else if(state.pqState === 3) {\n // store p or q\n state.pqState = 0;\n if(state.p === null) {\n state.p = state.num;\n } else {\n state.q = state.num;\n }\n\n // advance state if both p and q are ready\n if(state.p !== null && state.q !== null) {\n ++state.state;\n }\n state.num = null;\n }\n } else if(state.state === 1) {\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n state.num = state.p;\n state.p = state.q;\n state.q = state.num;\n }\n ++state.state;\n } else if(state.state === 2) {\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n ++state.state;\n } else if(state.state === 3) {\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) === 0) {\n // phi and e are coprime, advance\n ++state.state;\n } else {\n // phi and e aren't coprime, so generate a new p and q\n state.p = null;\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 4) {\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n\n // ensure n is right number of bits\n if(state.n.bitLength() === state.bits) {\n // success, advance\n ++state.state;\n } else {\n // failed, get new q\n state.q = null;\n state.state = 0;\n }\n } else if(state.state === 5) {\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n }\n\n // update timing\n t2 = +new Date();\n total += t2 - t1;\n t1 = t2;\n }\n\n return state.keys !== null;\n};\n\n/**\n * Generates an RSA public-private key pair in a single call.\n *\n * To generate a key-pair in steps (to allow for progress updates and to\n * prevent blocking or warnings in slow browsers) then use the key-pair\n * generation state functions.\n *\n * To generate a key-pair asynchronously (either through web-workers, if\n * available, or by breaking up the work on the main thread), pass a\n * callback function.\n *\n * @param [bits] the size for the private key in bits, defaults to 2048.\n * @param [e] the public exponent to use, defaults to 65537.\n * @param [options] options for key-pair generation, if given then 'bits'\n * and 'e' must *not* be given:\n * bits the size for the private key in bits, (default: 2048).\n * e the public exponent to use, (default: 65537 (0x10001)).\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * prng a custom crypto-secure pseudo-random number generator to use,\n * that must define \"getBytesSync\". Disables use of native APIs.\n * algorithm the algorithm to use (default: 'PRIMEINC').\n * @param [callback(err, keypair)] called once the operation completes.\n *\n * @return an object with privateKey and publicKey properties.\n */\npki.rsa.generateKeyPair = function(bits, e, options, callback) {\n // (bits), (options), (callback)\n if(arguments.length === 1) {\n if(typeof bits === 'object') {\n options = bits;\n bits = undefined;\n } else if(typeof bits === 'function') {\n callback = bits;\n bits = undefined;\n }\n } else if(arguments.length === 2) {\n // (bits, e), (bits, options), (bits, callback), (options, callback)\n if(typeof bits === 'number') {\n if(typeof e === 'function') {\n callback = e;\n e = undefined;\n } else if(typeof e !== 'number') {\n options = e;\n e = undefined;\n }\n } else {\n options = bits;\n callback = e;\n bits = undefined;\n e = undefined;\n }\n } else if(arguments.length === 3) {\n // (bits, e, options), (bits, e, callback), (bits, options, callback)\n if(typeof e === 'number') {\n if(typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n } else {\n callback = options;\n options = e;\n e = undefined;\n }\n }\n options = options || {};\n if(bits === undefined) {\n bits = options.bits || 2048;\n }\n if(e === undefined) {\n e = options.e || 0x10001;\n }\n\n // use native code if permitted, available, and parameters are acceptable\n if(!forge.options.usePureJavaScript && !options.prng &&\n bits >= 256 && bits <= 16384 && (e === 0x10001 || e === 3)) {\n if(callback) {\n // try native async\n if(_detectNodeCrypto('generateKeyPair')) {\n return _crypto.generateKeyPair('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n }, function(err, pub, priv) {\n if(err) {\n return callback(err);\n }\n callback(null, {\n privateKey: pki.privateKeyFromPem(priv),\n publicKey: pki.publicKeyFromPem(pub)\n });\n });\n }\n if(_detectSubtleCrypto('generateKey') &&\n _detectSubtleCrypto('exportKey')) {\n // use standard native generateKey\n return util.globalScope.crypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify'])\n .then(function(pair) {\n return util.globalScope.crypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n // avoiding catch(function(err) {...}) to support IE <= 8\n }).then(undefined, function(err) {\n callback(err);\n }).then(function(pkcs8) {\n if(pkcs8) {\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n }\n });\n }\n if(_detectSubtleMsCrypto('generateKey') &&\n _detectSubtleMsCrypto('exportKey')) {\n var genOp = util.globalScope.msCrypto.subtle.generateKey({\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: _intToUint8Array(e),\n hash: {name: 'SHA-256'}\n }, true /* key can be exported*/, ['sign', 'verify']);\n genOp.oncomplete = function(e) {\n var pair = e.target.result;\n var exportOp = util.globalScope.msCrypto.subtle.exportKey(\n 'pkcs8', pair.privateKey);\n exportOp.oncomplete = function(e) {\n var pkcs8 = e.target.result;\n var privateKey = pki.privateKeyFromAsn1(\n asn1.fromDer(forge.util.createBuffer(pkcs8)));\n callback(null, {\n privateKey: privateKey,\n publicKey: pki.setRsaPublicKey(privateKey.n, privateKey.e)\n });\n };\n exportOp.onerror = function(err) {\n callback(err);\n };\n };\n genOp.onerror = function(err) {\n callback(err);\n };\n return;\n }\n } else {\n // try native sync\n if(_detectNodeCrypto('generateKeyPairSync')) {\n var keypair = _crypto.generateKeyPairSync('rsa', {\n modulusLength: bits,\n publicExponent: e,\n publicKeyEncoding: {\n type: 'spki',\n format: 'pem'\n },\n privateKeyEncoding: {\n type: 'pkcs8',\n format: 'pem'\n }\n });\n return {\n privateKey: pki.privateKeyFromPem(keypair.privateKey),\n publicKey: pki.publicKeyFromPem(keypair.publicKey)\n };\n }\n }\n }\n\n // use JavaScript implementation\n var state = pki.rsa.createKeyPairGenerationState(bits, e, options);\n if(!callback) {\n pki.rsa.stepKeyPairGenerationState(state, 0);\n return state.keys;\n }\n _generateKeyPair(state, options, callback);\n};\n\n/**\n * Sets an RSA public key from BigIntegers modulus and exponent.\n *\n * @param n the modulus.\n * @param e the exponent.\n *\n * @return the public key.\n */\npki.setRsaPublicKey = pki.rsa.setPublicKey = function(n, e) {\n var key = {\n n: n,\n e: e\n };\n\n /**\n * Encrypts the given data with this public key. Newer applications\n * should use the 'RSA-OAEP' decryption scheme, 'RSAES-PKCS1-V1_5' is for\n * legacy applications.\n *\n * @param data the byte string to encrypt.\n * @param scheme the encryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA encryption,\n * an object with an 'encode' property set to a function\n * with the signature 'function(data, key)' that returns\n * a binary-encoded string representing the encoded data.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the encrypted byte string.\n */\n key.encrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {\n encode: function(m, key, pub) {\n return _encodePkcs1_v1_5(m, key, 0x02).getBytes();\n }\n };\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n encode: function(m, key) {\n return forge.pkcs1.encode_rsa_oaep(key, m, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {encode: function(e) {return e;}};\n } else if(typeof scheme === 'string') {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // do scheme-based encoding then rsa encryption\n var e = scheme.encode(data, key, true);\n return pki.rsa.encrypt(e, key, true);\n };\n\n /**\n * Verifies the given signature against the given digest.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5, in which case once RSA-decrypted, the\n * signature is an OCTET STRING that holds a DigestInfo.\n *\n * DigestInfo ::= SEQUENCE {\n * digestAlgorithm DigestAlgorithmIdentifier,\n * digest Digest\n * }\n * DigestAlgorithmIdentifier ::= AlgorithmIdentifier\n * Digest ::= OCTET STRING\n *\n * To perform PSS signature verification, provide an instance\n * of Forge PSS object as the scheme parameter.\n *\n * @param digest the message digest hash to compare against the signature,\n * as a binary-encoded string.\n * @param signature the signature to verify, as a binary-encoded string.\n * @param scheme signature verification scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be expected, but\n * PKCS#1 v1.5 padding will still be used.\n * @param options optional verify options\n * _parseAllDigestBytes testing flag to control parsing of all\n * digest bytes. Unsupported and not for general usage.\n * (default: true)\n *\n * @return true if the signature was verified, false if not.\n */\n key.verify = function(digest, signature, scheme, options) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSASSA-PKCS1-V1_5';\n }\n if(options === undefined) {\n options = {\n _parseAllDigestBytes: true\n };\n }\n if(!('_parseAllDigestBytes' in options)) {\n options._parseAllDigestBytes = true;\n }\n\n if(scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n // d is ASN.1 BER-encoded DigestInfo\n var obj = asn1.fromDer(d, {\n parseAllBytes: options._parseAllDigestBytes\n });\n\n // validate DigestInfo\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, digestInfoValidator, capture, errors)) {\n var error = new Error(\n 'ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 ' +\n 'DigestInfo value.');\n error.errors = errors;\n throw error;\n }\n // check hash algorithm identifier\n // see PKCS1-v1-5DigestAlgorithms in RFC 8017\n // FIXME: add support to vaidator for strict value choices\n var oid = asn1.derToOid(capture.algorithmIdentifier);\n if(!(oid === forge.oids.md2 ||\n oid === forge.oids.md5 ||\n oid === forge.oids.sha1 ||\n oid === forge.oids.sha224 ||\n oid === forge.oids.sha256 ||\n oid === forge.oids.sha384 ||\n oid === forge.oids.sha512 ||\n oid === forge.oids['sha512-224'] ||\n oid === forge.oids['sha512-256'])) {\n var error = new Error(\n 'Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier.');\n error.oid = oid;\n throw error;\n }\n\n // special check for md2 and md5 that NULL parameters exist\n if(oid === forge.oids.md2 || oid === forge.oids.md5) {\n if(!('parameters' in capture)) {\n throw new Error(\n 'ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 ' +\n 'DigestInfo value. ' +\n 'Missing algorithm identifer NULL parameters.');\n }\n }\n\n // compare the given digest to the decrypted one\n return digest === capture.digest;\n }\n };\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {\n verify: function(digest, d) {\n // remove padding\n d = _decodePkcs1_v1_5(d, key, true);\n return digest === d;\n }\n };\n }\n\n // do rsa decryption w/o any decoding, then verify -- which does decoding\n var d = pki.rsa.decrypt(signature, key, true, false);\n return scheme.verify(digest, d, key.n.bitLength());\n };\n\n return key;\n};\n\n/**\n * Sets an RSA private key from BigIntegers modulus, exponent, primes,\n * prime exponents, and modular multiplicative inverse.\n *\n * @param n the modulus.\n * @param e the public exponent.\n * @param d the private exponent ((inverse of e) mod n).\n * @param p the first prime.\n * @param q the second prime.\n * @param dP exponent1 (d mod (p-1)).\n * @param dQ exponent2 (d mod (q-1)).\n * @param qInv ((inverse of q) mod p)\n *\n * @return the private key.\n */\npki.setRsaPrivateKey = pki.rsa.setPrivateKey = function(\n n, e, d, p, q, dP, dQ, qInv) {\n var key = {\n n: n,\n e: e,\n d: d,\n p: p,\n q: q,\n dP: dP,\n dQ: dQ,\n qInv: qInv\n };\n\n /**\n * Decrypts the given data with this private key. The decryption scheme\n * must match the one used to encrypt the data.\n *\n * @param data the byte string to decrypt.\n * @param scheme the decryption scheme to use:\n * 'RSAES-PKCS1-V1_5' (default),\n * 'RSA-OAEP',\n * 'RAW', 'NONE', or null to perform raw RSA decryption.\n * @param schemeOptions any scheme-specific options.\n *\n * @return the decrypted byte string.\n */\n key.decrypt = function(data, scheme, schemeOptions) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSAES-PKCS1-V1_5';\n }\n\n // do rsa decryption w/o any decoding\n var d = pki.rsa.decrypt(data, key, false, false);\n\n if(scheme === 'RSAES-PKCS1-V1_5') {\n scheme = {decode: _decodePkcs1_v1_5};\n } else if(scheme === 'RSA-OAEP' || scheme === 'RSAES-OAEP') {\n scheme = {\n decode: function(d, key) {\n return forge.pkcs1.decode_rsa_oaep(key, d, schemeOptions);\n }\n };\n } else if(['RAW', 'NONE', 'NULL', null].indexOf(scheme) !== -1) {\n scheme = {decode: function(d) {return d;}};\n } else {\n throw new Error('Unsupported encryption scheme: \"' + scheme + '\".');\n }\n\n // decode according to scheme\n return scheme.decode(d, key, false);\n };\n\n /**\n * Signs the given digest, producing a signature.\n *\n * PKCS#1 supports multiple (currently two) signature schemes:\n * RSASSA-PKCS1-V1_5 and RSASSA-PSS.\n *\n * By default this implementation uses the \"old scheme\", i.e.\n * RSASSA-PKCS1-V1_5. In order to generate a PSS signature, provide\n * an instance of Forge PSS object as the scheme parameter.\n *\n * @param md the message digest object with the hash to sign.\n * @param scheme the signature scheme to use:\n * 'RSASSA-PKCS1-V1_5' or undefined for RSASSA PKCS#1 v1.5,\n * a Forge PSS object for RSASSA-PSS,\n * 'NONE' or null for none, DigestInfo will not be used but\n * PKCS#1 v1.5 padding will still be used.\n *\n * @return the signature as a byte string.\n */\n key.sign = function(md, scheme) {\n /* Note: The internal implementation of RSA operations is being\n transitioned away from a PKCS#1 v1.5 hard-coded scheme. Some legacy\n code like the use of an encoding block identifier 'bt' will eventually\n be removed. */\n\n // private key operation\n var bt = false;\n\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n }\n\n if(scheme === undefined || scheme === 'RSASSA-PKCS1-V1_5') {\n scheme = {encode: emsaPkcs1v15encode};\n bt = 0x01;\n } else if(scheme === 'NONE' || scheme === 'NULL' || scheme === null) {\n scheme = {encode: function() {return md;}};\n bt = 0x01;\n }\n\n // encode and then encrypt\n var d = scheme.encode(md, key.n.bitLength());\n return pki.rsa.encrypt(d, key, bt);\n };\n\n return key;\n};\n\n/**\n * Wraps an RSAPrivateKey ASN.1 object in an ASN.1 PrivateKeyInfo object.\n *\n * @param rsaKey the ASN.1 RSAPrivateKey.\n *\n * @return the ASN.1 PrivateKeyInfo.\n */\npki.wrapRsaPrivateKey = function(rsaKey) {\n // PrivateKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // privateKeyAlgorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // PrivateKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false,\n asn1.toDer(rsaKey).getBytes())\n ]);\n};\n\n/**\n * Converts a private key from an ASN.1 object.\n *\n * @param obj the ASN.1 representation of a PrivateKeyInfo containing an\n * RSAPrivateKey or an RSAPrivateKey.\n *\n * @return the private key.\n */\npki.privateKeyFromAsn1 = function(obj) {\n // get PrivateKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, privateKeyValidator, capture, errors)) {\n obj = asn1.fromDer(forge.util.createBuffer(capture.privateKey));\n }\n\n // get RSAPrivateKey\n capture = {};\n errors = [];\n if(!asn1.validate(obj, rsaPrivateKeyValidator, capture, errors)) {\n var error = new Error('Cannot read private key. ' +\n 'ASN.1 object does not contain an RSAPrivateKey.');\n error.errors = errors;\n throw error;\n }\n\n // Note: Version is currently ignored.\n // capture.privateKeyVersion\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n, e, d, p, q, dP, dQ, qInv;\n n = forge.util.createBuffer(capture.privateKeyModulus).toHex();\n e = forge.util.createBuffer(capture.privateKeyPublicExponent).toHex();\n d = forge.util.createBuffer(capture.privateKeyPrivateExponent).toHex();\n p = forge.util.createBuffer(capture.privateKeyPrime1).toHex();\n q = forge.util.createBuffer(capture.privateKeyPrime2).toHex();\n dP = forge.util.createBuffer(capture.privateKeyExponent1).toHex();\n dQ = forge.util.createBuffer(capture.privateKeyExponent2).toHex();\n qInv = forge.util.createBuffer(capture.privateKeyCoefficient).toHex();\n\n // set private key\n return pki.setRsaPrivateKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16),\n new BigInteger(d, 16),\n new BigInteger(p, 16),\n new BigInteger(q, 16),\n new BigInteger(dP, 16),\n new BigInteger(dQ, 16),\n new BigInteger(qInv, 16));\n};\n\n/**\n * Converts a private key to an ASN.1 RSAPrivateKey.\n *\n * @param key the private key.\n *\n * @return the ASN.1 representation of an RSAPrivateKey.\n */\npki.privateKeyToAsn1 = pki.privateKeyToRSAPrivateKey = function(key) {\n // RSAPrivateKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version (0 = only 2 primes, 1 multiple primes)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(0).getBytes()),\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e)),\n // privateExponent (d)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.d)),\n // privateKeyPrime1 (p)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.p)),\n // privateKeyPrime2 (q)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.q)),\n // privateKeyExponent1 (dP)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dP)),\n // privateKeyExponent2 (dQ)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.dQ)),\n // coefficient (qInv)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.qInv))\n ]);\n};\n\n/**\n * Converts a public key from an ASN.1 SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @param obj the asn1 representation of a SubjectPublicKeyInfo or RSAPublicKey.\n *\n * @return the public key.\n */\npki.publicKeyFromAsn1 = function(obj) {\n // get SubjectPublicKeyInfo\n var capture = {};\n var errors = [];\n if(asn1.validate(obj, publicKeyValidator, capture, errors)) {\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n var error = new Error('Cannot read public key. Unknown OID.');\n error.oid = oid;\n throw error;\n }\n obj = capture.rsaPublicKey;\n }\n\n // get RSA params\n errors = [];\n if(!asn1.validate(obj, rsaPublicKeyValidator, capture, errors)) {\n var error = new Error('Cannot read public key. ' +\n 'ASN.1 object does not contain an RSAPublicKey.');\n error.errors = errors;\n throw error;\n }\n\n // FIXME: inefficient, get a BigInteger that uses byte strings\n var n = forge.util.createBuffer(capture.publicKeyModulus).toHex();\n var e = forge.util.createBuffer(capture.publicKeyExponent).toHex();\n\n // set public key\n return pki.setRsaPublicKey(\n new BigInteger(n, 16),\n new BigInteger(e, 16));\n};\n\n/**\n * Converts a public key to an ASN.1 SubjectPublicKeyInfo.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a SubjectPublicKeyInfo.\n */\npki.publicKeyToAsn1 = pki.publicKeyToSubjectPublicKeyInfo = function(key) {\n // SubjectPublicKeyInfo\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AlgorithmIdentifier\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(pki.oids.rsaEncryption).getBytes()),\n // parameters (null)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ]),\n // subjectPublicKey\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, [\n pki.publicKeyToRSAPublicKey(key)\n ])\n ]);\n};\n\n/**\n * Converts a public key to an ASN.1 RSAPublicKey.\n *\n * @param key the public key.\n *\n * @return the asn1 representation of a RSAPublicKey.\n */\npki.publicKeyToRSAPublicKey = function(key) {\n // RSAPublicKey\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // modulus (n)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.n)),\n // publicExponent (e)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n _bnToBytes(key.e))\n ]);\n};\n\n/**\n * Encodes a message using PKCS#1 v1.5 padding.\n *\n * @param m the message to encode.\n * @param key the RSA key to use.\n * @param bt the block type to use, i.e. either 0x01 (for signing) or 0x02\n * (for encryption).\n *\n * @return the padded byte buffer.\n */\nfunction _encodePkcs1_v1_5(m, key, bt) {\n var eb = forge.util.createBuffer();\n\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* use PKCS#1 v1.5 padding */\n if(m.length > (k - 11)) {\n var error = new Error('Message is too long for PKCS#1 v1.5 padding.');\n error.length = m.length;\n error.max = k - 11;\n throw error;\n }\n\n /* A block type BT, a padding string PS, and the data D shall be\n formatted into an octet string EB, the encryption block:\n\n EB = 00 || BT || PS || 00 || D\n\n The block type BT shall be a single octet indicating the structure of\n the encryption block. For this version of the document it shall have\n value 00, 01, or 02. For a private-key operation, the block type\n shall be 00 or 01. For a public-key operation, it shall be 02.\n\n The padding string PS shall consist of k-3-||D|| octets. For block\n type 00, the octets shall have value 00; for block type 01, they\n shall have value FF; and for block type 02, they shall be\n pseudorandomly generated and nonzero. This makes the length of the\n encryption block EB equal to k. */\n\n // build the encryption block\n eb.putByte(0x00);\n eb.putByte(bt);\n\n // create the padding\n var padNum = k - 3 - m.length;\n var padByte;\n // private key op\n if(bt === 0x00 || bt === 0x01) {\n padByte = (bt === 0x00) ? 0x00 : 0xFF;\n for(var i = 0; i < padNum; ++i) {\n eb.putByte(padByte);\n }\n } else {\n // public key op\n // pad with random non-zero values\n while(padNum > 0) {\n var numZeros = 0;\n var padBytes = forge.random.getBytes(padNum);\n for(var i = 0; i < padNum; ++i) {\n padByte = padBytes.charCodeAt(i);\n if(padByte === 0) {\n ++numZeros;\n } else {\n eb.putByte(padByte);\n }\n }\n padNum = numZeros;\n }\n }\n\n // zero followed by message\n eb.putByte(0x00);\n eb.putBytes(m);\n\n return eb;\n}\n\n/**\n * Decodes a message using PKCS#1 v1.5 padding.\n *\n * @param em the message to decode.\n * @param key the RSA key to use.\n * @param pub true if the key is a public key, false if it is private.\n * @param ml the message length, if specified.\n *\n * @return the decoded bytes.\n */\nfunction _decodePkcs1_v1_5(em, key, pub, ml) {\n // get the length of the modulus in bytes\n var k = Math.ceil(key.n.bitLength() / 8);\n\n /* It is an error if any of the following conditions occurs:\n\n 1. The encryption block EB cannot be parsed unambiguously.\n 2. The padding string PS consists of fewer than eight octets\n or is inconsisent with the block type BT.\n 3. The decryption process is a public-key operation and the block\n type BT is not 00 or 01, or the decryption process is a\n private-key operation and the block type is not 02.\n */\n\n // parse the encryption block\n var eb = forge.util.createBuffer(em);\n var first = eb.getByte();\n var bt = eb.getByte();\n if(first !== 0x00 ||\n (pub && bt !== 0x00 && bt !== 0x01) ||\n (!pub && bt != 0x02) ||\n (pub && bt === 0x00 && typeof(ml) === 'undefined')) {\n throw new Error('Encryption block is invalid.');\n }\n\n var padNum = 0;\n if(bt === 0x00) {\n // check all padding bytes for 0x00\n padNum = k - 3 - ml;\n for(var i = 0; i < padNum; ++i) {\n if(eb.getByte() !== 0x00) {\n throw new Error('Encryption block is invalid.');\n }\n }\n } else if(bt === 0x01) {\n // find the first byte that isn't 0xFF, should be after all padding\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() !== 0xFF) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n } else if(bt === 0x02) {\n // look for 0x00 byte\n padNum = 0;\n while(eb.length() > 1) {\n if(eb.getByte() === 0x00) {\n --eb.read;\n break;\n }\n ++padNum;\n }\n }\n\n // zero must be 0x00 and padNum must be (k - 3 - message length)\n var zero = eb.getByte();\n if(zero !== 0x00 || padNum !== (k - 3 - eb.length())) {\n throw new Error('Encryption block is invalid.');\n }\n\n return eb.getBytes();\n}\n\n/**\n * Runs the key-generation algorithm asynchronously, either in the background\n * via Web Workers, or using the main thread and setImmediate.\n *\n * @param state the key-pair generation state.\n * @param [options] options for key-pair generation:\n * workerScript the worker script URL.\n * workers the number of web workers (if supported) to use,\n * (default: 2, -1 to use estimated cores minus one).\n * workLoad the size of the work load, ie: number of possible prime\n * numbers for each web worker to check per work assignment,\n * (default: 100).\n * @param callback(err, keypair) called once the operation completes.\n */\nfunction _generateKeyPair(state, options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n\n var opts = {\n algorithm: {\n name: options.algorithm || 'PRIMEINC',\n options: {\n workers: options.workers || 2,\n workLoad: options.workLoad || 100,\n workerScript: options.workerScript\n }\n }\n };\n if('prng' in options) {\n opts.prng = options.prng;\n }\n\n generate();\n\n function generate() {\n // find p and then q (done in series to simplify)\n getPrime(state.pBits, function(err, num) {\n if(err) {\n return callback(err);\n }\n state.p = num;\n if(state.q !== null) {\n return finish(err, state.q);\n }\n getPrime(state.qBits, finish);\n });\n }\n\n function getPrime(bits, callback) {\n forge.prime.generateProbablePrime(bits, opts, callback);\n }\n\n function finish(err, num) {\n if(err) {\n return callback(err);\n }\n\n // set q\n state.q = num;\n\n // ensure p is larger than q (swap them if not)\n if(state.p.compareTo(state.q) < 0) {\n var tmp = state.p;\n state.p = state.q;\n state.q = tmp;\n }\n\n // ensure p is coprime with e\n if(state.p.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.p = null;\n generate();\n return;\n }\n\n // ensure q is coprime with e\n if(state.q.subtract(BigInteger.ONE).gcd(state.e)\n .compareTo(BigInteger.ONE) !== 0) {\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // compute phi: (p - 1)(q - 1) (Euler's totient function)\n state.p1 = state.p.subtract(BigInteger.ONE);\n state.q1 = state.q.subtract(BigInteger.ONE);\n state.phi = state.p1.multiply(state.q1);\n\n // ensure e and phi are coprime\n if(state.phi.gcd(state.e).compareTo(BigInteger.ONE) !== 0) {\n // phi and e aren't coprime, so generate a new p and q\n state.p = state.q = null;\n generate();\n return;\n }\n\n // create n, ensure n is has the right number of bits\n state.n = state.p.multiply(state.q);\n if(state.n.bitLength() !== state.bits) {\n // failed, get new q\n state.q = null;\n getPrime(state.qBits, finish);\n return;\n }\n\n // set keys\n var d = state.e.modInverse(state.phi);\n state.keys = {\n privateKey: pki.rsa.setPrivateKey(\n state.n, state.e, d, state.p, state.q,\n d.mod(state.p1), d.mod(state.q1),\n state.q.modInverse(state.p)),\n publicKey: pki.rsa.setPublicKey(state.n, state.e)\n };\n\n callback(null, state.keys);\n }\n}\n\n/**\n * Converts a positive BigInteger into 2's-complement big-endian bytes.\n *\n * @param b the big integer to convert.\n *\n * @return the bytes.\n */\nfunction _bnToBytes(b) {\n // prepend 0x00 if first byte >= 0x80\n var hex = b.toString(16);\n if(hex[0] >= '8') {\n hex = '00' + hex;\n }\n var bytes = forge.util.hexToBytes(hex);\n\n // ensure integer is minimally-encoded\n if(bytes.length > 1 &&\n // leading 0x00 for positive integer\n ((bytes.charCodeAt(0) === 0 &&\n (bytes.charCodeAt(1) & 0x80) === 0) ||\n // leading 0xFF for negative integer\n (bytes.charCodeAt(0) === 0xFF &&\n (bytes.charCodeAt(1) & 0x80) === 0x80))) {\n return bytes.substr(1);\n }\n return bytes;\n}\n\n/**\n * Returns the required number of Miller-Rabin tests to generate a\n * prime with an error probability of (1/2)^80.\n *\n * See Handbook of Applied Cryptography Chapter 4, Table 4.4.\n *\n * @param bits the bit size.\n *\n * @return the required number of iterations.\n */\nfunction _getMillerRabinTests(bits) {\n if(bits <= 100) return 27;\n if(bits <= 150) return 18;\n if(bits <= 200) return 15;\n if(bits <= 250) return 12;\n if(bits <= 300) return 9;\n if(bits <= 350) return 8;\n if(bits <= 400) return 7;\n if(bits <= 500) return 6;\n if(bits <= 600) return 5;\n if(bits <= 800) return 4;\n if(bits <= 1250) return 3;\n return 2;\n}\n\n/**\n * Performs feature detection on the Node crypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectNodeCrypto(fn) {\n return forge.util.isNodejs && typeof _crypto[fn] === 'function';\n}\n\n/**\n * Performs feature detection on the SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.crypto === 'object' &&\n typeof util.globalScope.crypto.subtle === 'object' &&\n typeof util.globalScope.crypto.subtle[fn] === 'function');\n}\n\n/**\n * Performs feature detection on the deprecated Microsoft Internet Explorer\n * outdated SubtleCrypto interface. This function should only be used after\n * checking for the modern, standard SubtleCrypto interface.\n *\n * @param fn the feature (function) to detect.\n *\n * @return true if detected, false if not.\n */\nfunction _detectSubtleMsCrypto(fn) {\n return (typeof util.globalScope !== 'undefined' &&\n typeof util.globalScope.msCrypto === 'object' &&\n typeof util.globalScope.msCrypto.subtle === 'object' &&\n typeof util.globalScope.msCrypto.subtle[fn] === 'function');\n}\n\nfunction _intToUint8Array(x) {\n var bytes = forge.util.hexToBytes(x.toString(16));\n var buffer = new Uint8Array(bytes.length);\n for(var i = 0; i < bytes.length; ++i) {\n buffer[i] = bytes.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction _privateKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error(\n 'Unsupported key algorithm \"' + jwk.kty + '\"; algorithm must be \"RSA\".');\n }\n return pki.setRsaPrivateKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e),\n _base64ToBigInt(jwk.d),\n _base64ToBigInt(jwk.p),\n _base64ToBigInt(jwk.q),\n _base64ToBigInt(jwk.dp),\n _base64ToBigInt(jwk.dq),\n _base64ToBigInt(jwk.qi));\n}\n\nfunction _publicKeyFromJwk(jwk) {\n if(jwk.kty !== 'RSA') {\n throw new Error('Key algorithm must be \"RSA\".');\n }\n return pki.setRsaPublicKey(\n _base64ToBigInt(jwk.n),\n _base64ToBigInt(jwk.e));\n}\n\nfunction _base64ToBigInt(b64) {\n return new BigInteger(forge.util.bytesToHex(forge.util.decode64(b64)), 16);\n}\n","/**\n * Secure Hash Algorithm with 160-bit digest (SHA-1) implementation.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha1 = module.exports = forge.sha1 = forge.sha1 || {};\nforge.md.sha1 = forge.md.algorithms.sha1 = sha1;\n\n/**\n * Creates a SHA-1 message digest object.\n *\n * @return a message digest object.\n */\nsha1.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // SHA-1 state contains five 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(80);\n\n // message digest object\n var md = {\n algorithm: 'sha1',\n blockLength: 64,\n digestLength: 20,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x67452301,\n h1: 0xEFCDAB89,\n h2: 0x98BADCFE,\n h3: 0x10325476,\n h4: 0xC3D2E1F0\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-1 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3,\n h4: _state.h4\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32(s2.h0);\n rval.putInt32(s2.h1);\n rval.putInt32(s2.h2);\n rval.putInt32(s2.h3);\n rval.putInt32(s2.h4);\n return rval;\n };\n\n return md;\n};\n\n// sha-1 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-1 state with the given byte buffer.\n *\n * @param s the SHA-1 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t, a, b, c, d, e, f, i;\n var len = bytes.length();\n while(len >= 64) {\n // the w array will be populated with sixteen 32-bit big-endian words\n // and then extended into 80 32-bit words according to SHA-1 algorithm\n // and for 32-79 using Max Locktyukhin's optimization\n\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n e = s.h4;\n\n // round 1\n for(i = 0; i < 16; ++i) {\n t = bytes.getInt32();\n w[i] = t;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for(; i < 20; ++i) {\n t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);\n t = (t << 1) | (t >>> 31);\n w[i] = t;\n f = d ^ (b & (c ^ d));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x5A827999 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 2\n for(; i < 32; ++i) {\n t = (w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]);\n t = (t << 1) | (t >>> 31);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n for(; i < 40; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0x6ED9EBA1 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 3\n for(; i < 60; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = (b & c) | (d & (b ^ c));\n t = ((a << 5) | (a >>> 27)) + f + e + 0x8F1BBCDC + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n // round 4\n for(; i < 80; ++i) {\n t = (w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]);\n t = (t << 2) | (t >>> 30);\n w[i] = t;\n f = b ^ c ^ d;\n t = ((a << 5) | (a >>> 27)) + f + e + 0xCA62C1D6 + t;\n e = d;\n d = c;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n c = ((b << 30) | (b >>> 2)) >>> 0;\n b = a;\n a = t;\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n s.h4 = (s.h4 + e) | 0;\n\n len -= 64;\n }\n}\n","/**\n * Secure Hash Algorithm with 256-bit digest (SHA-256) implementation.\n *\n * See FIPS 180-2 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha256 = module.exports = forge.sha256 = forge.sha256 || {};\nforge.md.sha256 = forge.md.algorithms.sha256 = sha256;\n\n/**\n * Creates a SHA-256 message digest object.\n *\n * @return a message digest object.\n */\nsha256.create = function() {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n // SHA-256 state contains eight 32-bit integers\n var _state = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for word storage\n var _w = new Array(64);\n\n // message digest object\n var md = {\n algorithm: 'sha256',\n blockLength: 64,\n digestLength: 32,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 8\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength64 for backwards-compatibility)\n md.fullMessageLength = md.messageLength64 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _state = {\n h0: 0x6A09E667,\n h1: 0xBB67AE85,\n h2: 0x3C6EF372,\n h3: 0xA54FF53A,\n h4: 0x510E527F,\n h5: 0x9B05688C,\n h6: 0x1F83D9AB,\n h7: 0x5BE0CD19\n };\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_state, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-256 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 448 mod 512. In other words,\n the data to be digested must be a multiple of 512 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 8 bytes (64\n bits), that means that the last segment of the data must have 56 bytes\n (448 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 448 mod 512 because\n 512 - 128 = 448.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 448 mod 512, then 512 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var s2 = {\n h0: _state.h0,\n h1: _state.h1,\n h2: _state.h2,\n h3: _state.h3,\n h4: _state.h4,\n h5: _state.h5,\n h6: _state.h6,\n h7: _state.h7\n };\n _update(s2, _w, finalBlock);\n var rval = forge.util.createBuffer();\n rval.putInt32(s2.h0);\n rval.putInt32(s2.h1);\n rval.putInt32(s2.h2);\n rval.putInt32(s2.h3);\n rval.putInt32(s2.h4);\n rval.putInt32(s2.h5);\n rval.putInt32(s2.h6);\n rval.putInt32(s2.h7);\n return rval;\n };\n\n return md;\n};\n\n// sha-256 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n// table of constants\nvar _k = null;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 64);\n\n // create K table for SHA-256\n _k = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-256 state with the given byte buffer.\n *\n * @param s the SHA-256 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (64 byte) chunks\n var t1, t2, s0, s1, ch, maj, i, a, b, c, d, e, f, g, h;\n var len = bytes.length();\n while(len >= 64) {\n // the w array will be populated with sixteen 32-bit big-endian words\n // and then extended into 64 32-bit words according to SHA-256\n for(i = 0; i < 16; ++i) {\n w[i] = bytes.getInt32();\n }\n for(; i < 64; ++i) {\n // XOR word 2 words ago rot right 17, rot right 19, shft right 10\n t1 = w[i - 2];\n t1 =\n ((t1 >>> 17) | (t1 << 15)) ^\n ((t1 >>> 19) | (t1 << 13)) ^\n (t1 >>> 10);\n // XOR word 15 words ago rot right 7, rot right 18, shft right 3\n t2 = w[i - 15];\n t2 =\n ((t2 >>> 7) | (t2 << 25)) ^\n ((t2 >>> 18) | (t2 << 14)) ^\n (t2 >>> 3);\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^32\n w[i] = (t1 + w[i - 7] + t2 + w[i - 16]) | 0;\n }\n\n // initialize hash value for this chunk\n a = s.h0;\n b = s.h1;\n c = s.h2;\n d = s.h3;\n e = s.h4;\n f = s.h5;\n g = s.h6;\n h = s.h7;\n\n // round function\n for(i = 0; i < 64; ++i) {\n // Sum1(e)\n s1 =\n ((e >>> 6) | (e << 26)) ^\n ((e >>> 11) | (e << 21)) ^\n ((e >>> 25) | (e << 7));\n // Ch(e, f, g) (optimized the same way as SHA-1)\n ch = g ^ (e & (f ^ g));\n // Sum0(a)\n s0 =\n ((a >>> 2) | (a << 30)) ^\n ((a >>> 13) | (a << 19)) ^\n ((a >>> 22) | (a << 10));\n // Maj(a, b, c) (optimized the same way as SHA-1)\n maj = (a & b) | (c & (a ^ b));\n\n // main algorithm\n t1 = h + s1 + ch + _k[i] + w[i];\n t2 = s0 + maj;\n h = g;\n g = f;\n f = e;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n // can't truncate with `| 0`\n e = (d + t1) >>> 0;\n d = c;\n c = b;\n b = a;\n // `>>> 0` necessary to avoid iOS/Safari 10 optimization bug\n // can't truncate with `| 0`\n a = (t1 + t2) >>> 0;\n }\n\n // update hash state\n s.h0 = (s.h0 + a) | 0;\n s.h1 = (s.h1 + b) | 0;\n s.h2 = (s.h2 + c) | 0;\n s.h3 = (s.h3 + d) | 0;\n s.h4 = (s.h4 + e) | 0;\n s.h5 = (s.h5 + f) | 0;\n s.h6 = (s.h6 + g) | 0;\n s.h7 = (s.h7 + h) | 0;\n len -= 64;\n }\n}\n","/**\n * Secure Hash Algorithm with a 1024-bit block size implementation.\n *\n * This includes: SHA-512, SHA-384, SHA-512/224, and SHA-512/256. For\n * SHA-256 (block size 512 bits), see sha256.js.\n *\n * See FIPS 180-4 for details.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2014-2015 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nrequire('./md');\nrequire('./util');\n\nvar sha512 = module.exports = forge.sha512 = forge.sha512 || {};\n\n// SHA-512\nforge.md.sha512 = forge.md.algorithms.sha512 = sha512;\n\n// SHA-384\nvar sha384 = forge.sha384 = forge.sha512.sha384 = forge.sha512.sha384 || {};\nsha384.create = function() {\n return sha512.create('SHA-384');\n};\nforge.md.sha384 = forge.md.algorithms.sha384 = sha384;\n\n// SHA-512/256\nforge.sha512.sha256 = forge.sha512.sha256 || {\n create: function() {\n return sha512.create('SHA-512/256');\n }\n};\nforge.md['sha512/256'] = forge.md.algorithms['sha512/256'] =\n forge.sha512.sha256;\n\n// SHA-512/224\nforge.sha512.sha224 = forge.sha512.sha224 || {\n create: function() {\n return sha512.create('SHA-512/224');\n }\n};\nforge.md['sha512/224'] = forge.md.algorithms['sha512/224'] =\n forge.sha512.sha224;\n\n/**\n * Creates a SHA-2 message digest object.\n *\n * @param algorithm the algorithm to use (SHA-512, SHA-384, SHA-512/224,\n * SHA-512/256).\n *\n * @return a message digest object.\n */\nsha512.create = function(algorithm) {\n // do initialization as necessary\n if(!_initialized) {\n _init();\n }\n\n if(typeof algorithm === 'undefined') {\n algorithm = 'SHA-512';\n }\n\n if(!(algorithm in _states)) {\n throw new Error('Invalid SHA-512 algorithm: ' + algorithm);\n }\n\n // SHA-512 state contains eight 64-bit integers (each as two 32-bit ints)\n var _state = _states[algorithm];\n var _h = null;\n\n // input buffer\n var _input = forge.util.createBuffer();\n\n // used for 64-bit word storage\n var _w = new Array(80);\n for(var wi = 0; wi < 80; ++wi) {\n _w[wi] = new Array(2);\n }\n\n // determine digest length by algorithm name (default)\n var digestLength = 64;\n switch(algorithm) {\n case 'SHA-384':\n digestLength = 48;\n break;\n case 'SHA-512/256':\n digestLength = 32;\n break;\n case 'SHA-512/224':\n digestLength = 28;\n break;\n }\n\n // message digest object\n var md = {\n // SHA-512 => sha512\n algorithm: algorithm.replace('-', '').toLowerCase(),\n blockLength: 128,\n digestLength: digestLength,\n // 56-bit length of message so far (does not including padding)\n messageLength: 0,\n // true message length\n fullMessageLength: null,\n // size of message length in bytes\n messageLengthSize: 16\n };\n\n /**\n * Starts the digest.\n *\n * @return this digest object.\n */\n md.start = function() {\n // up to 56-bit message length for convenience\n md.messageLength = 0;\n\n // full message length (set md.messageLength128 for backwards-compatibility)\n md.fullMessageLength = md.messageLength128 = [];\n var int32s = md.messageLengthSize / 4;\n for(var i = 0; i < int32s; ++i) {\n md.fullMessageLength.push(0);\n }\n _input = forge.util.createBuffer();\n _h = new Array(_state.length);\n for(var i = 0; i < _state.length; ++i) {\n _h[i] = _state[i].slice(0);\n }\n return md;\n };\n // start digest automatically for first time\n md.start();\n\n /**\n * Updates the digest with the given message input. The given input can\n * treated as raw input (no encoding will be applied) or an encoding of\n * 'utf8' maybe given to encode the input using UTF-8.\n *\n * @param msg the message input to update with.\n * @param encoding the encoding to use (default: 'raw', other: 'utf8').\n *\n * @return this digest object.\n */\n md.update = function(msg, encoding) {\n if(encoding === 'utf8') {\n msg = forge.util.encodeUtf8(msg);\n }\n\n // update message length\n var len = msg.length;\n md.messageLength += len;\n len = [(len / 0x100000000) >>> 0, len >>> 0];\n for(var i = md.fullMessageLength.length - 1; i >= 0; --i) {\n md.fullMessageLength[i] += len[1];\n len[1] = len[0] + ((md.fullMessageLength[i] / 0x100000000) >>> 0);\n md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0;\n len[0] = ((len[1] / 0x100000000) >>> 0);\n }\n\n // add bytes to input buffer\n _input.putBytes(msg);\n\n // process bytes\n _update(_h, _w, _input);\n\n // compact input buffer every 2K or if empty\n if(_input.read > 2048 || _input.length() === 0) {\n _input.compact();\n }\n\n return md;\n };\n\n /**\n * Produces the digest.\n *\n * @return a byte buffer containing the digest value.\n */\n md.digest = function() {\n /* Note: Here we copy the remaining bytes in the input buffer and\n add the appropriate SHA-512 padding. Then we do the final update\n on a copy of the state so that if the user wants to get\n intermediate digests they can do so. */\n\n /* Determine the number of bytes that must be added to the message\n to ensure its length is congruent to 896 mod 1024. In other words,\n the data to be digested must be a multiple of 1024 bits (or 128 bytes).\n This data includes the message, some padding, and the length of the\n message. Since the length of the message will be encoded as 16 bytes (128\n bits), that means that the last segment of the data must have 112 bytes\n (896 bits) of message and padding. Therefore, the length of the message\n plus the padding must be congruent to 896 mod 1024 because\n 1024 - 128 = 896.\n\n In order to fill up the message length it must be filled with\n padding that begins with 1 bit followed by all 0 bits. Padding\n must *always* be present, so if the message length is already\n congruent to 896 mod 1024, then 1024 padding bits must be added. */\n\n var finalBlock = forge.util.createBuffer();\n finalBlock.putBytes(_input.bytes());\n\n // compute remaining size to be digested (include message length size)\n var remaining = (\n md.fullMessageLength[md.fullMessageLength.length - 1] +\n md.messageLengthSize);\n\n // add padding for overflow blockSize - overflow\n // _padding starts with 1 byte with first bit is set (byte value 128), then\n // there may be up to (blockSize - 1) other pad bytes\n var overflow = remaining & (md.blockLength - 1);\n finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow));\n\n // serialize message length in bits in big-endian order; since length\n // is stored in bytes we multiply by 8 and add carry from next int\n var next, carry;\n var bits = md.fullMessageLength[0] * 8;\n for(var i = 0; i < md.fullMessageLength.length - 1; ++i) {\n next = md.fullMessageLength[i + 1] * 8;\n carry = (next / 0x100000000) >>> 0;\n bits += carry;\n finalBlock.putInt32(bits >>> 0);\n bits = next >>> 0;\n }\n finalBlock.putInt32(bits);\n\n var h = new Array(_h.length);\n for(var i = 0; i < _h.length; ++i) {\n h[i] = _h[i].slice(0);\n }\n _update(h, _w, finalBlock);\n var rval = forge.util.createBuffer();\n var hlen;\n if(algorithm === 'SHA-512') {\n hlen = h.length;\n } else if(algorithm === 'SHA-384') {\n hlen = h.length - 2;\n } else {\n hlen = h.length - 4;\n }\n for(var i = 0; i < hlen; ++i) {\n rval.putInt32(h[i][0]);\n if(i !== hlen - 1 || algorithm !== 'SHA-512/224') {\n rval.putInt32(h[i][1]);\n }\n }\n return rval;\n };\n\n return md;\n};\n\n// sha-512 padding bytes not initialized yet\nvar _padding = null;\nvar _initialized = false;\n\n// table of constants\nvar _k = null;\n\n// initial hash states\nvar _states = null;\n\n/**\n * Initializes the constant tables.\n */\nfunction _init() {\n // create padding\n _padding = String.fromCharCode(128);\n _padding += forge.util.fillString(String.fromCharCode(0x00), 128);\n\n // create K table for SHA-512\n _k = [\n [0x428a2f98, 0xd728ae22], [0x71374491, 0x23ef65cd],\n [0xb5c0fbcf, 0xec4d3b2f], [0xe9b5dba5, 0x8189dbbc],\n [0x3956c25b, 0xf348b538], [0x59f111f1, 0xb605d019],\n [0x923f82a4, 0xaf194f9b], [0xab1c5ed5, 0xda6d8118],\n [0xd807aa98, 0xa3030242], [0x12835b01, 0x45706fbe],\n [0x243185be, 0x4ee4b28c], [0x550c7dc3, 0xd5ffb4e2],\n [0x72be5d74, 0xf27b896f], [0x80deb1fe, 0x3b1696b1],\n [0x9bdc06a7, 0x25c71235], [0xc19bf174, 0xcf692694],\n [0xe49b69c1, 0x9ef14ad2], [0xefbe4786, 0x384f25e3],\n [0x0fc19dc6, 0x8b8cd5b5], [0x240ca1cc, 0x77ac9c65],\n [0x2de92c6f, 0x592b0275], [0x4a7484aa, 0x6ea6e483],\n [0x5cb0a9dc, 0xbd41fbd4], [0x76f988da, 0x831153b5],\n [0x983e5152, 0xee66dfab], [0xa831c66d, 0x2db43210],\n [0xb00327c8, 0x98fb213f], [0xbf597fc7, 0xbeef0ee4],\n [0xc6e00bf3, 0x3da88fc2], [0xd5a79147, 0x930aa725],\n [0x06ca6351, 0xe003826f], [0x14292967, 0x0a0e6e70],\n [0x27b70a85, 0x46d22ffc], [0x2e1b2138, 0x5c26c926],\n [0x4d2c6dfc, 0x5ac42aed], [0x53380d13, 0x9d95b3df],\n [0x650a7354, 0x8baf63de], [0x766a0abb, 0x3c77b2a8],\n [0x81c2c92e, 0x47edaee6], [0x92722c85, 0x1482353b],\n [0xa2bfe8a1, 0x4cf10364], [0xa81a664b, 0xbc423001],\n [0xc24b8b70, 0xd0f89791], [0xc76c51a3, 0x0654be30],\n [0xd192e819, 0xd6ef5218], [0xd6990624, 0x5565a910],\n [0xf40e3585, 0x5771202a], [0x106aa070, 0x32bbd1b8],\n [0x19a4c116, 0xb8d2d0c8], [0x1e376c08, 0x5141ab53],\n [0x2748774c, 0xdf8eeb99], [0x34b0bcb5, 0xe19b48a8],\n [0x391c0cb3, 0xc5c95a63], [0x4ed8aa4a, 0xe3418acb],\n [0x5b9cca4f, 0x7763e373], [0x682e6ff3, 0xd6b2b8a3],\n [0x748f82ee, 0x5defb2fc], [0x78a5636f, 0x43172f60],\n [0x84c87814, 0xa1f0ab72], [0x8cc70208, 0x1a6439ec],\n [0x90befffa, 0x23631e28], [0xa4506ceb, 0xde82bde9],\n [0xbef9a3f7, 0xb2c67915], [0xc67178f2, 0xe372532b],\n [0xca273ece, 0xea26619c], [0xd186b8c7, 0x21c0c207],\n [0xeada7dd6, 0xcde0eb1e], [0xf57d4f7f, 0xee6ed178],\n [0x06f067aa, 0x72176fba], [0x0a637dc5, 0xa2c898a6],\n [0x113f9804, 0xbef90dae], [0x1b710b35, 0x131c471b],\n [0x28db77f5, 0x23047d84], [0x32caab7b, 0x40c72493],\n [0x3c9ebe0a, 0x15c9bebc], [0x431d67c4, 0x9c100d4c],\n [0x4cc5d4be, 0xcb3e42b6], [0x597f299c, 0xfc657e2a],\n [0x5fcb6fab, 0x3ad6faec], [0x6c44198c, 0x4a475817]\n ];\n\n // initial hash states\n _states = {};\n _states['SHA-512'] = [\n [0x6a09e667, 0xf3bcc908],\n [0xbb67ae85, 0x84caa73b],\n [0x3c6ef372, 0xfe94f82b],\n [0xa54ff53a, 0x5f1d36f1],\n [0x510e527f, 0xade682d1],\n [0x9b05688c, 0x2b3e6c1f],\n [0x1f83d9ab, 0xfb41bd6b],\n [0x5be0cd19, 0x137e2179]\n ];\n _states['SHA-384'] = [\n [0xcbbb9d5d, 0xc1059ed8],\n [0x629a292a, 0x367cd507],\n [0x9159015a, 0x3070dd17],\n [0x152fecd8, 0xf70e5939],\n [0x67332667, 0xffc00b31],\n [0x8eb44a87, 0x68581511],\n [0xdb0c2e0d, 0x64f98fa7],\n [0x47b5481d, 0xbefa4fa4]\n ];\n _states['SHA-512/256'] = [\n [0x22312194, 0xFC2BF72C],\n [0x9F555FA3, 0xC84C64C2],\n [0x2393B86B, 0x6F53B151],\n [0x96387719, 0x5940EABD],\n [0x96283EE2, 0xA88EFFE3],\n [0xBE5E1E25, 0x53863992],\n [0x2B0199FC, 0x2C85B8AA],\n [0x0EB72DDC, 0x81C52CA2]\n ];\n _states['SHA-512/224'] = [\n [0x8C3D37C8, 0x19544DA2],\n [0x73E19966, 0x89DCD4D6],\n [0x1DFAB7AE, 0x32FF9C82],\n [0x679DD514, 0x582F9FCF],\n [0x0F6D2B69, 0x7BD44DA8],\n [0x77E36F73, 0x04C48942],\n [0x3F9D85A8, 0x6A1D36C8],\n [0x1112E6AD, 0x91D692A1]\n ];\n\n // now initialized\n _initialized = true;\n}\n\n/**\n * Updates a SHA-512 state with the given byte buffer.\n *\n * @param s the SHA-512 state to update.\n * @param w the array to use to store words.\n * @param bytes the byte buffer to update with.\n */\nfunction _update(s, w, bytes) {\n // consume 512 bit (128 byte) chunks\n var t1_hi, t1_lo;\n var t2_hi, t2_lo;\n var s0_hi, s0_lo;\n var s1_hi, s1_lo;\n var ch_hi, ch_lo;\n var maj_hi, maj_lo;\n var a_hi, a_lo;\n var b_hi, b_lo;\n var c_hi, c_lo;\n var d_hi, d_lo;\n var e_hi, e_lo;\n var f_hi, f_lo;\n var g_hi, g_lo;\n var h_hi, h_lo;\n var i, hi, lo, w2, w7, w15, w16;\n var len = bytes.length();\n while(len >= 128) {\n // the w array will be populated with sixteen 64-bit big-endian words\n // and then extended into 64 64-bit words according to SHA-512\n for(i = 0; i < 16; ++i) {\n w[i][0] = bytes.getInt32() >>> 0;\n w[i][1] = bytes.getInt32() >>> 0;\n }\n for(; i < 80; ++i) {\n // for word 2 words ago: ROTR 19(x) ^ ROTR 61(x) ^ SHR 6(x)\n w2 = w[i - 2];\n hi = w2[0];\n lo = w2[1];\n\n // high bits\n t1_hi = (\n ((hi >>> 19) | (lo << 13)) ^ // ROTR 19\n ((lo >>> 29) | (hi << 3)) ^ // ROTR 61/(swap + ROTR 29)\n (hi >>> 6)) >>> 0; // SHR 6\n // low bits\n t1_lo = (\n ((hi << 13) | (lo >>> 19)) ^ // ROTR 19\n ((lo << 3) | (hi >>> 29)) ^ // ROTR 61/(swap + ROTR 29)\n ((hi << 26) | (lo >>> 6))) >>> 0; // SHR 6\n\n // for word 15 words ago: ROTR 1(x) ^ ROTR 8(x) ^ SHR 7(x)\n w15 = w[i - 15];\n hi = w15[0];\n lo = w15[1];\n\n // high bits\n t2_hi = (\n ((hi >>> 1) | (lo << 31)) ^ // ROTR 1\n ((hi >>> 8) | (lo << 24)) ^ // ROTR 8\n (hi >>> 7)) >>> 0; // SHR 7\n // low bits\n t2_lo = (\n ((hi << 31) | (lo >>> 1)) ^ // ROTR 1\n ((hi << 24) | (lo >>> 8)) ^ // ROTR 8\n ((hi << 25) | (lo >>> 7))) >>> 0; // SHR 7\n\n // sum(t1, word 7 ago, t2, word 16 ago) modulo 2^64 (carry lo overflow)\n w7 = w[i - 7];\n w16 = w[i - 16];\n lo = (t1_lo + w7[1] + t2_lo + w16[1]);\n w[i][0] = (t1_hi + w7[0] + t2_hi + w16[0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n w[i][1] = lo >>> 0;\n }\n\n // initialize hash value for this chunk\n a_hi = s[0][0];\n a_lo = s[0][1];\n b_hi = s[1][0];\n b_lo = s[1][1];\n c_hi = s[2][0];\n c_lo = s[2][1];\n d_hi = s[3][0];\n d_lo = s[3][1];\n e_hi = s[4][0];\n e_lo = s[4][1];\n f_hi = s[5][0];\n f_lo = s[5][1];\n g_hi = s[6][0];\n g_lo = s[6][1];\n h_hi = s[7][0];\n h_lo = s[7][1];\n\n // round function\n for(i = 0; i < 80; ++i) {\n // Sum1(e) = ROTR 14(e) ^ ROTR 18(e) ^ ROTR 41(e)\n s1_hi = (\n ((e_hi >>> 14) | (e_lo << 18)) ^ // ROTR 14\n ((e_hi >>> 18) | (e_lo << 14)) ^ // ROTR 18\n ((e_lo >>> 9) | (e_hi << 23))) >>> 0; // ROTR 41/(swap + ROTR 9)\n s1_lo = (\n ((e_hi << 18) | (e_lo >>> 14)) ^ // ROTR 14\n ((e_hi << 14) | (e_lo >>> 18)) ^ // ROTR 18\n ((e_lo << 23) | (e_hi >>> 9))) >>> 0; // ROTR 41/(swap + ROTR 9)\n\n // Ch(e, f, g) (optimized the same way as SHA-1)\n ch_hi = (g_hi ^ (e_hi & (f_hi ^ g_hi))) >>> 0;\n ch_lo = (g_lo ^ (e_lo & (f_lo ^ g_lo))) >>> 0;\n\n // Sum0(a) = ROTR 28(a) ^ ROTR 34(a) ^ ROTR 39(a)\n s0_hi = (\n ((a_hi >>> 28) | (a_lo << 4)) ^ // ROTR 28\n ((a_lo >>> 2) | (a_hi << 30)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo >>> 7) | (a_hi << 25))) >>> 0; // ROTR 39/(swap + ROTR 7)\n s0_lo = (\n ((a_hi << 4) | (a_lo >>> 28)) ^ // ROTR 28\n ((a_lo << 30) | (a_hi >>> 2)) ^ // ROTR 34/(swap + ROTR 2)\n ((a_lo << 25) | (a_hi >>> 7))) >>> 0; // ROTR 39/(swap + ROTR 7)\n\n // Maj(a, b, c) (optimized the same way as SHA-1)\n maj_hi = ((a_hi & b_hi) | (c_hi & (a_hi ^ b_hi))) >>> 0;\n maj_lo = ((a_lo & b_lo) | (c_lo & (a_lo ^ b_lo))) >>> 0;\n\n // main algorithm\n // t1 = (h + s1 + ch + _k[i] + _w[i]) modulo 2^64 (carry lo overflow)\n lo = (h_lo + s1_lo + ch_lo + _k[i][1] + w[i][1]);\n t1_hi = (h_hi + s1_hi + ch_hi + _k[i][0] + w[i][0] +\n ((lo / 0x100000000) >>> 0)) >>> 0;\n t1_lo = lo >>> 0;\n\n // t2 = s0 + maj modulo 2^64 (carry lo overflow)\n lo = s0_lo + maj_lo;\n t2_hi = (s0_hi + maj_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n t2_lo = lo >>> 0;\n\n h_hi = g_hi;\n h_lo = g_lo;\n\n g_hi = f_hi;\n g_lo = f_lo;\n\n f_hi = e_hi;\n f_lo = e_lo;\n\n // e = (d + t1) modulo 2^64 (carry lo overflow)\n lo = d_lo + t1_lo;\n e_hi = (d_hi + t1_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n e_lo = lo >>> 0;\n\n d_hi = c_hi;\n d_lo = c_lo;\n\n c_hi = b_hi;\n c_lo = b_lo;\n\n b_hi = a_hi;\n b_lo = a_lo;\n\n // a = (t1 + t2) modulo 2^64 (carry lo overflow)\n lo = t1_lo + t2_lo;\n a_hi = (t1_hi + t2_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n a_lo = lo >>> 0;\n }\n\n // update hash state (additional modulo 2^64)\n lo = s[0][1] + a_lo;\n s[0][0] = (s[0][0] + a_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[0][1] = lo >>> 0;\n\n lo = s[1][1] + b_lo;\n s[1][0] = (s[1][0] + b_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[1][1] = lo >>> 0;\n\n lo = s[2][1] + c_lo;\n s[2][0] = (s[2][0] + c_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[2][1] = lo >>> 0;\n\n lo = s[3][1] + d_lo;\n s[3][0] = (s[3][0] + d_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[3][1] = lo >>> 0;\n\n lo = s[4][1] + e_lo;\n s[4][0] = (s[4][0] + e_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[4][1] = lo >>> 0;\n\n lo = s[5][1] + f_lo;\n s[5][0] = (s[5][0] + f_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[5][1] = lo >>> 0;\n\n lo = s[6][1] + g_lo;\n s[6][0] = (s[6][0] + g_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[6][1] = lo >>> 0;\n\n lo = s[7][1] + h_lo;\n s[7][0] = (s[7][0] + h_hi + ((lo / 0x100000000) >>> 0)) >>> 0;\n s[7][1] = lo >>> 0;\n\n len -= 128;\n }\n}\n","/**\n * Functions to output keys in SSH-friendly formats.\n *\n * This is part of the Forge project which may be used under the terms of\n * either the BSD License or the GNU General Public License (GPL) Version 2.\n *\n * See: https://github.com/digitalbazaar/forge/blob/cbebca3780658703d925b61b2caffb1d263a6c1d/LICENSE\n *\n * @author https://github.com/shellac\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./hmac');\nrequire('./md5');\nrequire('./sha1');\nrequire('./util');\n\nvar ssh = module.exports = forge.ssh = forge.ssh || {};\n\n/**\n * Encodes (and optionally encrypts) a private RSA key as a Putty PPK file.\n *\n * @param privateKey the key.\n * @param passphrase a passphrase to protect the key (falsy for no encryption).\n * @param comment a comment to include in the key file.\n *\n * @return the PPK file as a string.\n */\nssh.privateKeyToPutty = function(privateKey, passphrase, comment) {\n comment = comment || '';\n passphrase = passphrase || '';\n var algorithm = 'ssh-rsa';\n var encryptionAlgorithm = (passphrase === '') ? 'none' : 'aes256-cbc';\n\n var ppk = 'PuTTY-User-Key-File-2: ' + algorithm + '\\r\\n';\n ppk += 'Encryption: ' + encryptionAlgorithm + '\\r\\n';\n ppk += 'Comment: ' + comment + '\\r\\n';\n\n // public key into buffer for ppk\n var pubbuffer = forge.util.createBuffer();\n _addStringToBuffer(pubbuffer, algorithm);\n _addBigIntegerToBuffer(pubbuffer, privateKey.e);\n _addBigIntegerToBuffer(pubbuffer, privateKey.n);\n\n // write public key\n var pub = forge.util.encode64(pubbuffer.bytes(), 64);\n var length = Math.floor(pub.length / 66) + 1; // 66 = 64 + \\r\\n\n ppk += 'Public-Lines: ' + length + '\\r\\n';\n ppk += pub;\n\n // private key into a buffer\n var privbuffer = forge.util.createBuffer();\n _addBigIntegerToBuffer(privbuffer, privateKey.d);\n _addBigIntegerToBuffer(privbuffer, privateKey.p);\n _addBigIntegerToBuffer(privbuffer, privateKey.q);\n _addBigIntegerToBuffer(privbuffer, privateKey.qInv);\n\n // optionally encrypt the private key\n var priv;\n if(!passphrase) {\n // use the unencrypted buffer\n priv = forge.util.encode64(privbuffer.bytes(), 64);\n } else {\n // encrypt RSA key using passphrase\n var encLen = privbuffer.length() + 16 - 1;\n encLen -= encLen % 16;\n\n // pad private key with sha1-d data -- needs to be a multiple of 16\n var padding = _sha1(privbuffer.bytes());\n\n padding.truncate(padding.length() - encLen + privbuffer.length());\n privbuffer.putBuffer(padding);\n\n var aeskey = forge.util.createBuffer();\n aeskey.putBuffer(_sha1('\\x00\\x00\\x00\\x00', passphrase));\n aeskey.putBuffer(_sha1('\\x00\\x00\\x00\\x01', passphrase));\n\n // encrypt some bytes using CBC mode\n // key is 40 bytes, so truncate *by* 8 bytes\n var cipher = forge.aes.createEncryptionCipher(aeskey.truncate(8), 'CBC');\n cipher.start(forge.util.createBuffer().fillWithByte(0, 16));\n cipher.update(privbuffer.copy());\n cipher.finish();\n var encrypted = cipher.output;\n\n // Note: this appears to differ from Putty -- is forge wrong, or putty?\n // due to padding we finish as an exact multiple of 16\n encrypted.truncate(16); // all padding\n\n priv = forge.util.encode64(encrypted.bytes(), 64);\n }\n\n // output private key\n length = Math.floor(priv.length / 66) + 1; // 64 + \\r\\n\n ppk += '\\r\\nPrivate-Lines: ' + length + '\\r\\n';\n ppk += priv;\n\n // MAC\n var mackey = _sha1('putty-private-key-file-mac-key', passphrase);\n\n var macbuffer = forge.util.createBuffer();\n _addStringToBuffer(macbuffer, algorithm);\n _addStringToBuffer(macbuffer, encryptionAlgorithm);\n _addStringToBuffer(macbuffer, comment);\n macbuffer.putInt32(pubbuffer.length());\n macbuffer.putBuffer(pubbuffer);\n macbuffer.putInt32(privbuffer.length());\n macbuffer.putBuffer(privbuffer);\n\n var hmac = forge.hmac.create();\n hmac.start('sha1', mackey);\n hmac.update(macbuffer.bytes());\n\n ppk += '\\r\\nPrivate-MAC: ' + hmac.digest().toHex() + '\\r\\n';\n\n return ppk;\n};\n\n/**\n * Encodes a public RSA key as an OpenSSH file.\n *\n * @param key the key.\n * @param comment a comment.\n *\n * @return the public key in OpenSSH format.\n */\nssh.publicKeyToOpenSSH = function(key, comment) {\n var type = 'ssh-rsa';\n comment = comment || '';\n\n var buffer = forge.util.createBuffer();\n _addStringToBuffer(buffer, type);\n _addBigIntegerToBuffer(buffer, key.e);\n _addBigIntegerToBuffer(buffer, key.n);\n\n return type + ' ' + forge.util.encode64(buffer.bytes()) + ' ' + comment;\n};\n\n/**\n * Encodes a private RSA key as an OpenSSH file.\n *\n * @param key the key.\n * @param passphrase a passphrase to protect the key (falsy for no encryption).\n *\n * @return the public key in OpenSSH format.\n */\nssh.privateKeyToOpenSSH = function(privateKey, passphrase) {\n if(!passphrase) {\n return forge.pki.privateKeyToPem(privateKey);\n }\n // OpenSSH private key is just a legacy format, it seems\n return forge.pki.encryptRsaPrivateKey(privateKey, passphrase,\n {legacy: true, algorithm: 'aes128'});\n};\n\n/**\n * Gets the SSH fingerprint for the given public key.\n *\n * @param options the options to use.\n * [md] the message digest object to use (defaults to forge.md.md5).\n * [encoding] an alternative output encoding, such as 'hex'\n * (defaults to none, outputs a byte buffer).\n * [delimiter] the delimiter to use between bytes for 'hex' encoded\n * output, eg: ':' (defaults to none).\n *\n * @return the fingerprint as a byte buffer or other encoding based on options.\n */\nssh.getPublicKeyFingerprint = function(key, options) {\n options = options || {};\n var md = options.md || forge.md.md5.create();\n\n var type = 'ssh-rsa';\n var buffer = forge.util.createBuffer();\n _addStringToBuffer(buffer, type);\n _addBigIntegerToBuffer(buffer, key.e);\n _addBigIntegerToBuffer(buffer, key.n);\n\n // hash public key bytes\n md.start();\n md.update(buffer.getBytes());\n var digest = md.digest();\n if(options.encoding === 'hex') {\n var hex = digest.toHex();\n if(options.delimiter) {\n return hex.match(/.{2}/g).join(options.delimiter);\n }\n return hex;\n } else if(options.encoding === 'binary') {\n return digest.getBytes();\n } else if(options.encoding) {\n throw new Error('Unknown encoding \"' + options.encoding + '\".');\n }\n return digest;\n};\n\n/**\n * Adds len(val) then val to a buffer.\n *\n * @param buffer the buffer to add to.\n * @param val a big integer.\n */\nfunction _addBigIntegerToBuffer(buffer, val) {\n var hexVal = val.toString(16);\n // ensure 2s complement +ve\n if(hexVal[0] >= '8') {\n hexVal = '00' + hexVal;\n }\n var bytes = forge.util.hexToBytes(hexVal);\n buffer.putInt32(bytes.length);\n buffer.putBytes(bytes);\n}\n\n/**\n * Adds len(val) then val to a buffer.\n *\n * @param buffer the buffer to add to.\n * @param val a string.\n */\nfunction _addStringToBuffer(buffer, val) {\n buffer.putInt32(val.length);\n buffer.putString(val);\n}\n\n/**\n * Hashes the arguments into one value using SHA-1.\n *\n * @return the sha1 hash of the provided arguments.\n */\nfunction _sha1() {\n var sha = forge.md.sha1.create();\n var num = arguments.length;\n for (var i = 0; i < num; ++i) {\n sha.update(arguments[i]);\n }\n return sha.digest();\n}\n","/**\n * A Javascript implementation of Transport Layer Security (TLS).\n *\n * @author Dave Longley\n *\n * Copyright (c) 2009-2014 Digital Bazaar, Inc.\n *\n * The TLS Handshake Protocol involves the following steps:\n *\n * - Exchange hello messages to agree on algorithms, exchange random values,\n * and check for session resumption.\n *\n * - Exchange the necessary cryptographic parameters to allow the client and\n * server to agree on a premaster secret.\n *\n * - Exchange certificates and cryptographic information to allow the client\n * and server to authenticate themselves.\n *\n * - Generate a master secret from the premaster secret and exchanged random\n * values.\n *\n * - Provide security parameters to the record layer.\n *\n * - Allow the client and server to verify that their peer has calculated the\n * same security parameters and that the handshake occurred without tampering\n * by an attacker.\n *\n * Up to 4 different messages may be sent during a key exchange. The server\n * certificate, the server key exchange, the client certificate, and the\n * client key exchange.\n *\n * A typical handshake (from the client's perspective).\n *\n * 1. Client sends ClientHello.\n * 2. Client receives ServerHello.\n * 3. Client receives optional Certificate.\n * 4. Client receives optional ServerKeyExchange.\n * 5. Client receives ServerHelloDone.\n * 6. Client sends optional Certificate.\n * 7. Client sends ClientKeyExchange.\n * 8. Client sends optional CertificateVerify.\n * 9. Client sends ChangeCipherSpec.\n * 10. Client sends Finished.\n * 11. Client receives ChangeCipherSpec.\n * 12. Client receives Finished.\n * 13. Client sends/receives application data.\n *\n * To reuse an existing session:\n *\n * 1. Client sends ClientHello with session ID for reuse.\n * 2. Client receives ServerHello with same session ID if reusing.\n * 3. Client receives ChangeCipherSpec message if reusing.\n * 4. Client receives Finished.\n * 5. Client sends ChangeCipherSpec.\n * 6. Client sends Finished.\n *\n * Note: Client ignores HelloRequest if in the middle of a handshake.\n *\n * Record Layer:\n *\n * The record layer fragments information blocks into TLSPlaintext records\n * carrying data in chunks of 2^14 bytes or less. Client message boundaries are\n * not preserved in the record layer (i.e., multiple client messages of the\n * same ContentType MAY be coalesced into a single TLSPlaintext record, or a\n * single message MAY be fragmented across several records).\n *\n * struct {\n * uint8 major;\n * uint8 minor;\n * } ProtocolVersion;\n *\n * struct {\n * ContentType type;\n * ProtocolVersion version;\n * uint16 length;\n * opaque fragment[TLSPlaintext.length];\n * } TLSPlaintext;\n *\n * type:\n * The higher-level protocol used to process the enclosed fragment.\n *\n * version:\n * The version of the protocol being employed. TLS Version 1.2 uses version\n * {3, 3}. TLS Version 1.0 uses version {3, 1}. Note that a client that\n * supports multiple versions of TLS may not know what version will be\n * employed before it receives the ServerHello.\n *\n * length:\n * The length (in bytes) of the following TLSPlaintext.fragment. The length\n * MUST NOT exceed 2^14 = 16384 bytes.\n *\n * fragment:\n * The application data. This data is transparent and treated as an\n * independent block to be dealt with by the higher-level protocol specified\n * by the type field.\n *\n * Implementations MUST NOT send zero-length fragments of Handshake, Alert, or\n * ChangeCipherSpec content types. Zero-length fragments of Application data\n * MAY be sent as they are potentially useful as a traffic analysis\n * countermeasure.\n *\n * Note: Data of different TLS record layer content types MAY be interleaved.\n * Application data is generally of lower precedence for transmission than\n * other content types. However, records MUST be delivered to the network in\n * the same order as they are protected by the record layer. Recipients MUST\n * receive and process interleaved application layer traffic during handshakes\n * subsequent to the first one on a connection.\n *\n * struct {\n * ContentType type; // same as TLSPlaintext.type\n * ProtocolVersion version;// same as TLSPlaintext.version\n * uint16 length;\n * opaque fragment[TLSCompressed.length];\n * } TLSCompressed;\n *\n * length:\n * The length (in bytes) of the following TLSCompressed.fragment.\n * The length MUST NOT exceed 2^14 + 1024.\n *\n * fragment:\n * The compressed form of TLSPlaintext.fragment.\n *\n * Note: A CompressionMethod.null operation is an identity operation; no fields\n * are altered. In this implementation, since no compression is supported,\n * uncompressed records are always the same as compressed records.\n *\n * Encryption Information:\n *\n * The encryption and MAC functions translate a TLSCompressed structure into a\n * TLSCiphertext. The decryption functions reverse the process. The MAC of the\n * record also includes a sequence number so that missing, extra, or repeated\n * messages are detectable.\n *\n * struct {\n * ContentType type;\n * ProtocolVersion version;\n * uint16 length;\n * select (SecurityParameters.cipher_type) {\n * case stream: GenericStreamCipher;\n * case block: GenericBlockCipher;\n * case aead: GenericAEADCipher;\n * } fragment;\n * } TLSCiphertext;\n *\n * type:\n * The type field is identical to TLSCompressed.type.\n *\n * version:\n * The version field is identical to TLSCompressed.version.\n *\n * length:\n * The length (in bytes) of the following TLSCiphertext.fragment.\n * The length MUST NOT exceed 2^14 + 2048.\n *\n * fragment:\n * The encrypted form of TLSCompressed.fragment, with the MAC.\n *\n * Note: Only CBC Block Ciphers are supported by this implementation.\n *\n * The TLSCompressed.fragment structures are converted to/from block\n * TLSCiphertext.fragment structures.\n *\n * struct {\n * opaque IV[SecurityParameters.record_iv_length];\n * block-ciphered struct {\n * opaque content[TLSCompressed.length];\n * opaque MAC[SecurityParameters.mac_length];\n * uint8 padding[GenericBlockCipher.padding_length];\n * uint8 padding_length;\n * };\n * } GenericBlockCipher;\n *\n * The MAC is generated as described in Section 6.2.3.1.\n *\n * IV:\n * The Initialization Vector (IV) SHOULD be chosen at random, and MUST be\n * unpredictable. Note that in versions of TLS prior to 1.1, there was no\n * IV field, and the last ciphertext block of the previous record (the \"CBC\n * residue\") was used as the IV. This was changed to prevent the attacks\n * described in [CBCATT]. For block ciphers, the IV length is of length\n * SecurityParameters.record_iv_length, which is equal to the\n * SecurityParameters.block_size.\n *\n * padding:\n * Padding that is added to force the length of the plaintext to be an\n * integral multiple of the block cipher's block length. The padding MAY be\n * any length up to 255 bytes, as long as it results in the\n * TLSCiphertext.length being an integral multiple of the block length.\n * Lengths longer than necessary might be desirable to frustrate attacks on\n * a protocol that are based on analysis of the lengths of exchanged\n * messages. Each uint8 in the padding data vector MUST be filled with the\n * padding length value. The receiver MUST check this padding and MUST use\n * the bad_record_mac alert to indicate padding errors.\n *\n * padding_length:\n * The padding length MUST be such that the total size of the\n * GenericBlockCipher structure is a multiple of the cipher's block length.\n * Legal values range from zero to 255, inclusive. This length specifies the\n * length of the padding field exclusive of the padding_length field itself.\n *\n * The encrypted data length (TLSCiphertext.length) is one more than the sum of\n * SecurityParameters.block_length, TLSCompressed.length,\n * SecurityParameters.mac_length, and padding_length.\n *\n * Example: If the block length is 8 bytes, the content length\n * (TLSCompressed.length) is 61 bytes, and the MAC length is 20 bytes, then the\n * length before padding is 82 bytes (this does not include the IV. Thus, the\n * padding length modulo 8 must be equal to 6 in order to make the total length\n * an even multiple of 8 bytes (the block length). The padding length can be\n * 6, 14, 22, and so on, through 254. If the padding length were the minimum\n * necessary, 6, the padding would be 6 bytes, each containing the value 6.\n * Thus, the last 8 octets of the GenericBlockCipher before block encryption\n * would be xx 06 06 06 06 06 06 06, where xx is the last octet of the MAC.\n *\n * Note: With block ciphers in CBC mode (Cipher Block Chaining), it is critical\n * that the entire plaintext of the record be known before any ciphertext is\n * transmitted. Otherwise, it is possible for the attacker to mount the attack\n * described in [CBCATT].\n *\n * Implementation note: Canvel et al. [CBCTIME] have demonstrated a timing\n * attack on CBC padding based on the time required to compute the MAC. In\n * order to defend against this attack, implementations MUST ensure that\n * record processing time is essentially the same whether or not the padding\n * is correct. In general, the best way to do this is to compute the MAC even\n * if the padding is incorrect, and only then reject the packet. For instance,\n * if the pad appears to be incorrect, the implementation might assume a\n * zero-length pad and then compute the MAC. This leaves a small timing\n * channel, since MAC performance depends, to some extent, on the size of the\n * data fragment, but it is not believed to be large enough to be exploitable,\n * due to the large block size of existing MACs and the small size of the\n * timing signal.\n */\nvar forge = require('./forge');\nrequire('./asn1');\nrequire('./hmac');\nrequire('./md5');\nrequire('./pem');\nrequire('./pki');\nrequire('./random');\nrequire('./sha1');\nrequire('./util');\n\n/**\n * Generates pseudo random bytes by mixing the result of two hash functions,\n * MD5 and SHA-1.\n *\n * prf_TLS1(secret, label, seed) =\n * P_MD5(S1, label + seed) XOR P_SHA-1(S2, label + seed);\n *\n * Each P_hash function functions as follows:\n *\n * P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +\n * HMAC_hash(secret, A(2) + seed) +\n * HMAC_hash(secret, A(3) + seed) + ...\n * A() is defined as:\n * A(0) = seed\n * A(i) = HMAC_hash(secret, A(i-1))\n *\n * The '+' operator denotes concatenation.\n *\n * As many iterations A(N) as are needed are performed to generate enough\n * pseudo random byte output. If an iteration creates more data than is\n * necessary, then it is truncated.\n *\n * Therefore:\n * A(1) = HMAC_hash(secret, A(0))\n * = HMAC_hash(secret, seed)\n * A(2) = HMAC_hash(secret, A(1))\n * = HMAC_hash(secret, HMAC_hash(secret, seed))\n *\n * Therefore:\n * P_hash(secret, seed) =\n * HMAC_hash(secret, HMAC_hash(secret, A(0)) + seed) +\n * HMAC_hash(secret, HMAC_hash(secret, A(1)) + seed) +\n * ...\n *\n * Therefore:\n * P_hash(secret, seed) =\n * HMAC_hash(secret, HMAC_hash(secret, seed) + seed) +\n * HMAC_hash(secret, HMAC_hash(secret, HMAC_hash(secret, seed)) + seed) +\n * ...\n *\n * @param secret the secret to use.\n * @param label the label to use.\n * @param seed the seed value to use.\n * @param length the number of bytes to generate.\n *\n * @return the pseudo random bytes in a byte buffer.\n */\nvar prf_TLS1 = function(secret, label, seed, length) {\n var rval = forge.util.createBuffer();\n\n /* For TLS 1.0, the secret is split in half, into two secrets of equal\n length. If the secret has an odd length then the last byte of the first\n half will be the same as the first byte of the second. The length of the\n two secrets is half of the secret rounded up. */\n var idx = (secret.length >> 1);\n var slen = idx + (secret.length & 1);\n var s1 = secret.substr(0, slen);\n var s2 = secret.substr(idx, slen);\n var ai = forge.util.createBuffer();\n var hmac = forge.hmac.create();\n seed = label + seed;\n\n // determine the number of iterations that must be performed to generate\n // enough output bytes, md5 creates 16 byte hashes, sha1 creates 20\n var md5itr = Math.ceil(length / 16);\n var sha1itr = Math.ceil(length / 20);\n\n // do md5 iterations\n hmac.start('MD5', s1);\n var md5bytes = forge.util.createBuffer();\n ai.putBytes(seed);\n for(var i = 0; i < md5itr; ++i) {\n // HMAC_hash(secret, A(i-1))\n hmac.start(null, null);\n hmac.update(ai.getBytes());\n ai.putBuffer(hmac.digest());\n\n // HMAC_hash(secret, A(i) + seed)\n hmac.start(null, null);\n hmac.update(ai.bytes() + seed);\n md5bytes.putBuffer(hmac.digest());\n }\n\n // do sha1 iterations\n hmac.start('SHA1', s2);\n var sha1bytes = forge.util.createBuffer();\n ai.clear();\n ai.putBytes(seed);\n for(var i = 0; i < sha1itr; ++i) {\n // HMAC_hash(secret, A(i-1))\n hmac.start(null, null);\n hmac.update(ai.getBytes());\n ai.putBuffer(hmac.digest());\n\n // HMAC_hash(secret, A(i) + seed)\n hmac.start(null, null);\n hmac.update(ai.bytes() + seed);\n sha1bytes.putBuffer(hmac.digest());\n }\n\n // XOR the md5 bytes with the sha1 bytes\n rval.putBytes(forge.util.xorBytes(\n md5bytes.getBytes(), sha1bytes.getBytes(), length));\n\n return rval;\n};\n\n/**\n * Generates pseudo random bytes using a SHA256 algorithm. For TLS 1.2.\n *\n * @param secret the secret to use.\n * @param label the label to use.\n * @param seed the seed value to use.\n * @param length the number of bytes to generate.\n *\n * @return the pseudo random bytes in a byte buffer.\n */\nvar prf_sha256 = function(secret, label, seed, length) {\n // FIXME: implement me for TLS 1.2\n};\n\n/**\n * Gets a MAC for a record using the SHA-1 hash algorithm.\n *\n * @param key the mac key.\n * @param state the sequence number (array of two 32-bit integers).\n * @param record the record.\n *\n * @return the sha-1 hash (20 bytes) for the given record.\n */\nvar hmac_sha1 = function(key, seqNum, record) {\n /* MAC is computed like so:\n HMAC_hash(\n key, seqNum +\n TLSCompressed.type +\n TLSCompressed.version +\n TLSCompressed.length +\n TLSCompressed.fragment)\n */\n var hmac = forge.hmac.create();\n hmac.start('SHA1', key);\n var b = forge.util.createBuffer();\n b.putInt32(seqNum[0]);\n b.putInt32(seqNum[1]);\n b.putByte(record.type);\n b.putByte(record.version.major);\n b.putByte(record.version.minor);\n b.putInt16(record.length);\n b.putBytes(record.fragment.bytes());\n hmac.update(b.getBytes());\n return hmac.digest().getBytes();\n};\n\n/**\n * Compresses the TLSPlaintext record into a TLSCompressed record using the\n * deflate algorithm.\n *\n * @param c the TLS connection.\n * @param record the TLSPlaintext record to compress.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nvar deflate = function(c, record, s) {\n var rval = false;\n\n try {\n var bytes = c.deflate(record.fragment.getBytes());\n record.fragment = forge.util.createBuffer(bytes);\n record.length = bytes.length;\n rval = true;\n } catch(ex) {\n // deflate error, fail out\n }\n\n return rval;\n};\n\n/**\n * Decompresses the TLSCompressed record into a TLSPlaintext record using the\n * deflate algorithm.\n *\n * @param c the TLS connection.\n * @param record the TLSCompressed record to decompress.\n * @param s the ConnectionState to use.\n *\n * @return true on success, false on failure.\n */\nvar inflate = function(c, record, s) {\n var rval = false;\n\n try {\n var bytes = c.inflate(record.fragment.getBytes());\n record.fragment = forge.util.createBuffer(bytes);\n record.length = bytes.length;\n rval = true;\n } catch(ex) {\n // inflate error, fail out\n }\n\n return rval;\n};\n\n/**\n * Reads a TLS variable-length vector from a byte buffer.\n *\n * Variable-length vectors are defined by specifying a subrange of legal\n * lengths, inclusively, using the notation . When these are\n * encoded, the actual length precedes the vector's contents in the byte\n * stream. The length will be in the form of a number consuming as many bytes\n * as required to hold the vector's specified maximum (ceiling) length. A\n * variable-length vector with an actual length field of zero is referred to\n * as an empty vector.\n *\n * @param b the byte buffer.\n * @param lenBytes the number of bytes required to store the length.\n *\n * @return the resulting byte buffer.\n */\nvar readVector = function(b, lenBytes) {\n var len = 0;\n switch(lenBytes) {\n case 1:\n len = b.getByte();\n break;\n case 2:\n len = b.getInt16();\n break;\n case 3:\n len = b.getInt24();\n break;\n case 4:\n len = b.getInt32();\n break;\n }\n\n // read vector bytes into a new buffer\n return forge.util.createBuffer(b.getBytes(len));\n};\n\n/**\n * Writes a TLS variable-length vector to a byte buffer.\n *\n * @param b the byte buffer.\n * @param lenBytes the number of bytes required to store the length.\n * @param v the byte buffer vector.\n */\nvar writeVector = function(b, lenBytes, v) {\n // encode length at the start of the vector, where the number of bytes for\n // the length is the maximum number of bytes it would take to encode the\n // vector's ceiling\n b.putInt(v.length(), lenBytes << 3);\n b.putBuffer(v);\n};\n\n/**\n * The tls implementation.\n */\nvar tls = {};\n\n/**\n * Version: TLS 1.2 = 3.3, TLS 1.1 = 3.2, TLS 1.0 = 3.1. Both TLS 1.1 and\n * TLS 1.2 were still too new (ie: openSSL didn't implement them) at the time\n * of this implementation so TLS 1.0 was implemented instead.\n */\ntls.Versions = {\n TLS_1_0: {major: 3, minor: 1},\n TLS_1_1: {major: 3, minor: 2},\n TLS_1_2: {major: 3, minor: 3}\n};\ntls.SupportedVersions = [\n tls.Versions.TLS_1_1,\n tls.Versions.TLS_1_0\n];\ntls.Version = tls.SupportedVersions[0];\n\n/**\n * Maximum fragment size. True maximum is 16384, but we fragment before that\n * to allow for unusual small increases during compression.\n */\ntls.MaxFragment = 16384 - 1024;\n\n/**\n * Whether this entity is considered the \"client\" or \"server\".\n * enum { server, client } ConnectionEnd;\n */\ntls.ConnectionEnd = {\n server: 0,\n client: 1\n};\n\n/**\n * Pseudo-random function algorithm used to generate keys from the master\n * secret.\n * enum { tls_prf_sha256 } PRFAlgorithm;\n */\ntls.PRFAlgorithm = {\n tls_prf_sha256: 0\n};\n\n/**\n * Bulk encryption algorithms.\n * enum { null, rc4, des3, aes } BulkCipherAlgorithm;\n */\ntls.BulkCipherAlgorithm = {\n none: null,\n rc4: 0,\n des3: 1,\n aes: 2\n};\n\n/**\n * Cipher types.\n * enum { stream, block, aead } CipherType;\n */\ntls.CipherType = {\n stream: 0,\n block: 1,\n aead: 2\n};\n\n/**\n * MAC (Message Authentication Code) algorithms.\n * enum { null, hmac_md5, hmac_sha1, hmac_sha256,\n * hmac_sha384, hmac_sha512} MACAlgorithm;\n */\ntls.MACAlgorithm = {\n none: null,\n hmac_md5: 0,\n hmac_sha1: 1,\n hmac_sha256: 2,\n hmac_sha384: 3,\n hmac_sha512: 4\n};\n\n/**\n * Compression algorithms.\n * enum { null(0), deflate(1), (255) } CompressionMethod;\n */\ntls.CompressionMethod = {\n none: 0,\n deflate: 1\n};\n\n/**\n * TLS record content types.\n * enum {\n * change_cipher_spec(20), alert(21), handshake(22),\n * application_data(23), (255)\n * } ContentType;\n */\ntls.ContentType = {\n change_cipher_spec: 20,\n alert: 21,\n handshake: 22,\n application_data: 23,\n heartbeat: 24\n};\n\n/**\n * TLS handshake types.\n * enum {\n * hello_request(0), client_hello(1), server_hello(2),\n * certificate(11), server_key_exchange (12),\n * certificate_request(13), server_hello_done(14),\n * certificate_verify(15), client_key_exchange(16),\n * finished(20), (255)\n * } HandshakeType;\n */\ntls.HandshakeType = {\n hello_request: 0,\n client_hello: 1,\n server_hello: 2,\n certificate: 11,\n server_key_exchange: 12,\n certificate_request: 13,\n server_hello_done: 14,\n certificate_verify: 15,\n client_key_exchange: 16,\n finished: 20\n};\n\n/**\n * TLS Alert Protocol.\n *\n * enum { warning(1), fatal(2), (255) } AlertLevel;\n *\n * enum {\n * close_notify(0),\n * unexpected_message(10),\n * bad_record_mac(20),\n * decryption_failed(21),\n * record_overflow(22),\n * decompression_failure(30),\n * handshake_failure(40),\n * bad_certificate(42),\n * unsupported_certificate(43),\n * certificate_revoked(44),\n * certificate_expired(45),\n * certificate_unknown(46),\n * illegal_parameter(47),\n * unknown_ca(48),\n * access_denied(49),\n * decode_error(50),\n * decrypt_error(51),\n * export_restriction(60),\n * protocol_version(70),\n * insufficient_security(71),\n * internal_error(80),\n * user_canceled(90),\n * no_renegotiation(100),\n * (255)\n * } AlertDescription;\n *\n * struct {\n * AlertLevel level;\n * AlertDescription description;\n * } Alert;\n */\ntls.Alert = {};\ntls.Alert.Level = {\n warning: 1,\n fatal: 2\n};\ntls.Alert.Description = {\n close_notify: 0,\n unexpected_message: 10,\n bad_record_mac: 20,\n decryption_failed: 21,\n record_overflow: 22,\n decompression_failure: 30,\n handshake_failure: 40,\n bad_certificate: 42,\n unsupported_certificate: 43,\n certificate_revoked: 44,\n certificate_expired: 45,\n certificate_unknown: 46,\n illegal_parameter: 47,\n unknown_ca: 48,\n access_denied: 49,\n decode_error: 50,\n decrypt_error: 51,\n export_restriction: 60,\n protocol_version: 70,\n insufficient_security: 71,\n internal_error: 80,\n user_canceled: 90,\n no_renegotiation: 100\n};\n\n/**\n * TLS Heartbeat Message types.\n * enum {\n * heartbeat_request(1),\n * heartbeat_response(2),\n * (255)\n * } HeartbeatMessageType;\n */\ntls.HeartbeatMessageType = {\n heartbeat_request: 1,\n heartbeat_response: 2\n};\n\n/**\n * Supported cipher suites.\n */\ntls.CipherSuites = {};\n\n/**\n * Gets a supported cipher suite from its 2 byte ID.\n *\n * @param twoBytes two bytes in a string.\n *\n * @return the matching supported cipher suite or null.\n */\ntls.getCipherSuite = function(twoBytes) {\n var rval = null;\n for(var key in tls.CipherSuites) {\n var cs = tls.CipherSuites[key];\n if(cs.id[0] === twoBytes.charCodeAt(0) &&\n cs.id[1] === twoBytes.charCodeAt(1)) {\n rval = cs;\n break;\n }\n }\n return rval;\n};\n\n/**\n * Called when an unexpected record is encountered.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleUnexpected = function(c, record) {\n // if connection is client and closed, ignore unexpected messages\n var ignore = (!c.open && c.entity === tls.ConnectionEnd.client);\n if(!ignore) {\n c.error(c, {\n message: 'Unexpected message. Received TLS record out of order.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.unexpected_message\n }\n });\n }\n};\n\n/**\n * Called when a client receives a HelloRequest record.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleHelloRequest = function(c, record, length) {\n // ignore renegotiation requests from the server during a handshake, but\n // if handshaking, send a warning alert that renegotation is denied\n if(!c.handshaking && c.handshakes > 0) {\n // send alert warning\n tls.queue(c, tls.createAlert(c, {\n level: tls.Alert.Level.warning,\n description: tls.Alert.Description.no_renegotiation\n }));\n tls.flush(c);\n }\n\n // continue\n c.process();\n};\n\n/**\n * Parses a hello message from a ClientHello or ServerHello record.\n *\n * @param record the record to parse.\n *\n * @return the parsed message.\n */\ntls.parseHelloMessage = function(c, record, length) {\n var msg = null;\n\n var client = (c.entity === tls.ConnectionEnd.client);\n\n // minimum of 38 bytes in message\n if(length < 38) {\n c.error(c, {\n message: client ?\n 'Invalid ServerHello message. Message too short.' :\n 'Invalid ClientHello message. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n } else {\n // use 'remaining' to calculate # of remaining bytes in the message\n var b = record.fragment;\n var remaining = b.length();\n msg = {\n version: {\n major: b.getByte(),\n minor: b.getByte()\n },\n random: forge.util.createBuffer(b.getBytes(32)),\n session_id: readVector(b, 1),\n extensions: []\n };\n if(client) {\n msg.cipher_suite = b.getBytes(2);\n msg.compression_method = b.getByte();\n } else {\n msg.cipher_suites = readVector(b, 2);\n msg.compression_methods = readVector(b, 1);\n }\n\n // read extensions if there are any bytes left in the message\n remaining = length - (remaining - b.length());\n if(remaining > 0) {\n // parse extensions\n var exts = readVector(b, 2);\n while(exts.length() > 0) {\n msg.extensions.push({\n type: [exts.getByte(), exts.getByte()],\n data: readVector(exts, 2)\n });\n }\n\n // TODO: make extension support modular\n if(!client) {\n for(var i = 0; i < msg.extensions.length; ++i) {\n var ext = msg.extensions[i];\n\n // support SNI extension\n if(ext.type[0] === 0x00 && ext.type[1] === 0x00) {\n // get server name list\n var snl = readVector(ext.data, 2);\n while(snl.length() > 0) {\n // read server name type\n var snType = snl.getByte();\n\n // only HostName type (0x00) is known, break out if\n // another type is detected\n if(snType !== 0x00) {\n break;\n }\n\n // add host name to server name list\n c.session.extensions.server_name.serverNameList.push(\n readVector(snl, 2).getBytes());\n }\n }\n }\n }\n }\n\n // version already set, do not allow version change\n if(c.session.version) {\n if(msg.version.major !== c.session.version.major ||\n msg.version.minor !== c.session.version.minor) {\n return c.error(c, {\n message: 'TLS version change is disallowed during renegotiation.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.protocol_version\n }\n });\n }\n }\n\n // get the chosen (ServerHello) cipher suite\n if(client) {\n // FIXME: should be checking configured acceptable cipher suites\n c.session.cipherSuite = tls.getCipherSuite(msg.cipher_suite);\n } else {\n // get a supported preferred (ClientHello) cipher suite\n // choose the first supported cipher suite\n var tmp = forge.util.createBuffer(msg.cipher_suites.bytes());\n while(tmp.length() > 0) {\n // FIXME: should be checking configured acceptable suites\n // cipher suites take up 2 bytes\n c.session.cipherSuite = tls.getCipherSuite(tmp.getBytes(2));\n if(c.session.cipherSuite !== null) {\n break;\n }\n }\n }\n\n // cipher suite not supported\n if(c.session.cipherSuite === null) {\n return c.error(c, {\n message: 'No cipher suites in common.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.handshake_failure\n },\n cipherSuite: forge.util.bytesToHex(msg.cipher_suite)\n });\n }\n\n // TODO: handle compression methods\n if(client) {\n c.session.compressionMethod = msg.compression_method;\n } else {\n // no compression\n c.session.compressionMethod = tls.CompressionMethod.none;\n }\n }\n\n return msg;\n};\n\n/**\n * Creates security parameters for the given connection based on the given\n * hello message.\n *\n * @param c the TLS connection.\n * @param msg the hello message.\n */\ntls.createSecurityParameters = function(c, msg) {\n /* Note: security params are from TLS 1.2, some values like prf_algorithm\n are ignored for TLS 1.0/1.1 and the builtin as specified in the spec is\n used. */\n\n // TODO: handle other options from server when more supported\n\n // get client and server randoms\n var client = (c.entity === tls.ConnectionEnd.client);\n var msgRandom = msg.random.bytes();\n var cRandom = client ? c.session.sp.client_random : msgRandom;\n var sRandom = client ? msgRandom : tls.createRandom().getBytes();\n\n // create new security parameters\n c.session.sp = {\n entity: c.entity,\n prf_algorithm: tls.PRFAlgorithm.tls_prf_sha256,\n bulk_cipher_algorithm: null,\n cipher_type: null,\n enc_key_length: null,\n block_length: null,\n fixed_iv_length: null,\n record_iv_length: null,\n mac_algorithm: null,\n mac_length: null,\n mac_key_length: null,\n compression_algorithm: c.session.compressionMethod,\n pre_master_secret: null,\n master_secret: null,\n client_random: cRandom,\n server_random: sRandom\n };\n};\n\n/**\n * Called when a client receives a ServerHello record.\n *\n * When a ServerHello message will be sent:\n * The server will send this message in response to a client hello message\n * when it was able to find an acceptable set of algorithms. If it cannot\n * find such a match, it will respond with a handshake failure alert.\n *\n * uint24 length;\n * struct {\n * ProtocolVersion server_version;\n * Random random;\n * SessionID session_id;\n * CipherSuite cipher_suite;\n * CompressionMethod compression_method;\n * select(extensions_present) {\n * case false:\n * struct {};\n * case true:\n * Extension extensions<0..2^16-1>;\n * };\n * } ServerHello;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleServerHello = function(c, record, length) {\n var msg = tls.parseHelloMessage(c, record, length);\n if(c.fail) {\n return;\n }\n\n // ensure server version is compatible\n if(msg.version.minor <= c.version.minor) {\n c.version.minor = msg.version.minor;\n } else {\n return c.error(c, {\n message: 'Incompatible TLS version.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.protocol_version\n }\n });\n }\n\n // indicate session version has been set\n c.session.version = c.version;\n\n // get the session ID from the message\n var sessionId = msg.session_id.bytes();\n\n // if the session ID is not blank and matches the cached one, resume\n // the session\n if(sessionId.length > 0 && sessionId === c.session.id) {\n // resuming session, expect a ChangeCipherSpec next\n c.expect = SCC;\n c.session.resuming = true;\n\n // get new server random\n c.session.sp.server_random = msg.random.bytes();\n } else {\n // not resuming, expect a server Certificate message next\n c.expect = SCE;\n c.session.resuming = false;\n\n // create new security parameters\n tls.createSecurityParameters(c, msg);\n }\n\n // set new session ID\n c.session.id = sessionId;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a server receives a ClientHello record.\n *\n * When a ClientHello message will be sent:\n * When a client first connects to a server it is required to send the\n * client hello as its first message. The client can also send a client\n * hello in response to a hello request or on its own initiative in order\n * to renegotiate the security parameters in an existing connection.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleClientHello = function(c, record, length) {\n var msg = tls.parseHelloMessage(c, record, length);\n if(c.fail) {\n return;\n }\n\n // get the session ID from the message\n var sessionId = msg.session_id.bytes();\n\n // see if the given session ID is in the cache\n var session = null;\n if(c.sessionCache) {\n session = c.sessionCache.getSession(sessionId);\n if(session === null) {\n // session ID not found\n sessionId = '';\n } else if(session.version.major !== msg.version.major ||\n session.version.minor > msg.version.minor) {\n // if session version is incompatible with client version, do not resume\n session = null;\n sessionId = '';\n }\n }\n\n // no session found to resume, generate a new session ID\n if(sessionId.length === 0) {\n sessionId = forge.random.getBytes(32);\n }\n\n // update session\n c.session.id = sessionId;\n c.session.clientHelloVersion = msg.version;\n c.session.sp = {};\n if(session) {\n // use version and security parameters from resumed session\n c.version = c.session.version = session.version;\n c.session.sp = session.sp;\n } else {\n // use highest compatible minor version\n var version;\n for(var i = 1; i < tls.SupportedVersions.length; ++i) {\n version = tls.SupportedVersions[i];\n if(version.minor <= msg.version.minor) {\n break;\n }\n }\n c.version = {major: version.major, minor: version.minor};\n c.session.version = c.version;\n }\n\n // if a session is set, resume it\n if(session !== null) {\n // resuming session, expect a ChangeCipherSpec next\n c.expect = CCC;\n c.session.resuming = true;\n\n // get new client random\n c.session.sp.client_random = msg.random.bytes();\n } else {\n // not resuming, expect a Certificate or ClientKeyExchange\n c.expect = (c.verifyClient !== false) ? CCE : CKE;\n c.session.resuming = false;\n\n // create new security parameters\n tls.createSecurityParameters(c, msg);\n }\n\n // connection now open\n c.open = true;\n\n // queue server hello\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createServerHello(c)\n }));\n\n if(c.session.resuming) {\n // queue change cipher spec message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.change_cipher_spec,\n data: tls.createChangeCipherSpec()\n }));\n\n // create pending state\n c.state.pending = tls.createConnectionState(c);\n\n // change current write state to pending write state\n c.state.current.write = c.state.pending.write;\n\n // queue finished\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createFinished(c)\n }));\n } else {\n // queue server certificate\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificate(c)\n }));\n\n if(!c.fail) {\n // queue server key exchange\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createServerKeyExchange(c)\n }));\n\n // request client certificate if set\n if(c.verifyClient !== false) {\n // queue certificate request\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificateRequest(c)\n }));\n }\n\n // queue server hello done\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createServerHelloDone(c)\n }));\n }\n }\n\n // send records\n tls.flush(c);\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a Certificate record.\n *\n * When this message will be sent:\n * The server must send a certificate whenever the agreed-upon key exchange\n * method is not an anonymous one. This message will always immediately\n * follow the server hello message.\n *\n * Meaning of this message:\n * The certificate type must be appropriate for the selected cipher suite's\n * key exchange algorithm, and is generally an X.509v3 certificate. It must\n * contain a key which matches the key exchange method, as follows. Unless\n * otherwise specified, the signing algorithm for the certificate must be\n * the same as the algorithm for the certificate key. Unless otherwise\n * specified, the public key may be of any length.\n *\n * opaque ASN.1Cert<1..2^24-1>;\n * struct {\n * ASN.1Cert certificate_list<1..2^24-1>;\n * } Certificate;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleCertificate = function(c, record, length) {\n // minimum of 3 bytes in message\n if(length < 3) {\n return c.error(c, {\n message: 'Invalid Certificate message. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n var b = record.fragment;\n var msg = {\n certificate_list: readVector(b, 3)\n };\n\n /* The sender's certificate will be first in the list (chain), each\n subsequent one that follows will certify the previous one, but root\n certificates (self-signed) that specify the certificate authority may\n be omitted under the assumption that clients must already possess it. */\n var cert, asn1;\n var certs = [];\n try {\n while(msg.certificate_list.length() > 0) {\n // each entry in msg.certificate_list is a vector with 3 len bytes\n cert = readVector(msg.certificate_list, 3);\n asn1 = forge.asn1.fromDer(cert);\n cert = forge.pki.certificateFromAsn1(asn1, true);\n certs.push(cert);\n }\n } catch(ex) {\n return c.error(c, {\n message: 'Could not parse certificate list.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.bad_certificate\n }\n });\n }\n\n // ensure at least 1 certificate was provided if in client-mode\n // or if verifyClient was set to true to require a certificate\n // (as opposed to 'optional')\n var client = (c.entity === tls.ConnectionEnd.client);\n if((client || c.verifyClient === true) && certs.length === 0) {\n // error, no certificate\n c.error(c, {\n message: client ?\n 'No server certificate provided.' :\n 'No client certificate provided.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n } else if(certs.length === 0) {\n // no certs to verify\n // expect a ServerKeyExchange or ClientKeyExchange message next\n c.expect = client ? SKE : CKE;\n } else {\n // save certificate in session\n if(client) {\n c.session.serverCertificate = certs[0];\n } else {\n c.session.clientCertificate = certs[0];\n }\n\n if(tls.verifyCertificateChain(c, certs)) {\n // expect a ServerKeyExchange or ClientKeyExchange message next\n c.expect = client ? SKE : CKE;\n }\n }\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a ServerKeyExchange record.\n *\n * When this message will be sent:\n * This message will be sent immediately after the server certificate\n * message (or the server hello message, if this is an anonymous\n * negotiation).\n *\n * The server key exchange message is sent by the server only when the\n * server certificate message (if sent) does not contain enough data to\n * allow the client to exchange a premaster secret.\n *\n * Meaning of this message:\n * This message conveys cryptographic information to allow the client to\n * communicate the premaster secret: either an RSA public key to encrypt\n * the premaster secret with, or a Diffie-Hellman public key with which the\n * client can complete a key exchange (with the result being the premaster\n * secret.)\n *\n * enum {\n * dhe_dss, dhe_rsa, dh_anon, rsa, dh_dss, dh_rsa\n * } KeyExchangeAlgorithm;\n *\n * struct {\n * opaque dh_p<1..2^16-1>;\n * opaque dh_g<1..2^16-1>;\n * opaque dh_Ys<1..2^16-1>;\n * } ServerDHParams;\n *\n * struct {\n * select(KeyExchangeAlgorithm) {\n * case dh_anon:\n * ServerDHParams params;\n * case dhe_dss:\n * case dhe_rsa:\n * ServerDHParams params;\n * digitally-signed struct {\n * opaque client_random[32];\n * opaque server_random[32];\n * ServerDHParams params;\n * } signed_params;\n * case rsa:\n * case dh_dss:\n * case dh_rsa:\n * struct {};\n * };\n * } ServerKeyExchange;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleServerKeyExchange = function(c, record, length) {\n // this implementation only supports RSA, no Diffie-Hellman support\n // so any length > 0 is invalid\n if(length > 0) {\n return c.error(c, {\n message: 'Invalid key parameters. Only RSA is supported.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.unsupported_certificate\n }\n });\n }\n\n // expect an optional CertificateRequest message next\n c.expect = SCR;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a ClientKeyExchange record.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleClientKeyExchange = function(c, record, length) {\n // this implementation only supports RSA, no Diffie-Hellman support\n // so any length < 48 is invalid\n if(length < 48) {\n return c.error(c, {\n message: 'Invalid key parameters. Only RSA is supported.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.unsupported_certificate\n }\n });\n }\n\n var b = record.fragment;\n var msg = {\n enc_pre_master_secret: readVector(b, 2).getBytes()\n };\n\n // do rsa decryption\n var privateKey = null;\n if(c.getPrivateKey) {\n try {\n privateKey = c.getPrivateKey(c, c.session.serverCertificate);\n privateKey = forge.pki.privateKeyFromPem(privateKey);\n } catch(ex) {\n c.error(c, {\n message: 'Could not get private key.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n }\n\n if(privateKey === null) {\n return c.error(c, {\n message: 'No private key set.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n\n try {\n // decrypt 48-byte pre-master secret\n var sp = c.session.sp;\n sp.pre_master_secret = privateKey.decrypt(msg.enc_pre_master_secret);\n\n // ensure client hello version matches first 2 bytes\n var version = c.session.clientHelloVersion;\n if(version.major !== sp.pre_master_secret.charCodeAt(0) ||\n version.minor !== sp.pre_master_secret.charCodeAt(1)) {\n // error, do not send alert (see BLEI attack below)\n throw new Error('TLS version rollback attack detected.');\n }\n } catch(ex) {\n /* Note: Daniel Bleichenbacher [BLEI] can be used to attack a\n TLS server which is using PKCS#1 encoded RSA, so instead of\n failing here, we generate 48 random bytes and use that as\n the pre-master secret. */\n sp.pre_master_secret = forge.random.getBytes(48);\n }\n\n // expect a CertificateVerify message if a Certificate was received that\n // does not have fixed Diffie-Hellman params, otherwise expect\n // ChangeCipherSpec\n c.expect = CCC;\n if(c.session.clientCertificate !== null) {\n // only RSA support, so expect CertificateVerify\n // TODO: support Diffie-Hellman\n c.expect = CCV;\n }\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a CertificateRequest record.\n *\n * When this message will be sent:\n * A non-anonymous server can optionally request a certificate from the\n * client, if appropriate for the selected cipher suite. This message, if\n * sent, will immediately follow the Server Key Exchange message (if it is\n * sent; otherwise, the Server Certificate message).\n *\n * enum {\n * rsa_sign(1), dss_sign(2), rsa_fixed_dh(3), dss_fixed_dh(4),\n * rsa_ephemeral_dh_RESERVED(5), dss_ephemeral_dh_RESERVED(6),\n * fortezza_dms_RESERVED(20), (255)\n * } ClientCertificateType;\n *\n * opaque DistinguishedName<1..2^16-1>;\n *\n * struct {\n * ClientCertificateType certificate_types<1..2^8-1>;\n * SignatureAndHashAlgorithm supported_signature_algorithms<2^16-1>;\n * DistinguishedName certificate_authorities<0..2^16-1>;\n * } CertificateRequest;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleCertificateRequest = function(c, record, length) {\n // minimum of 3 bytes in message\n if(length < 3) {\n return c.error(c, {\n message: 'Invalid CertificateRequest. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n // TODO: TLS 1.2+ has different format including\n // SignatureAndHashAlgorithm after cert types\n var b = record.fragment;\n var msg = {\n certificate_types: readVector(b, 1),\n certificate_authorities: readVector(b, 2)\n };\n\n // save certificate request in session\n c.session.certificateRequest = msg;\n\n // expect a ServerHelloDone message next\n c.expect = SHD;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a server receives a CertificateVerify record.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleCertificateVerify = function(c, record, length) {\n if(length < 2) {\n return c.error(c, {\n message: 'Invalid CertificateVerify. Message too short.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n // rewind to get full bytes for message so it can be manually\n // digested below (special case for CertificateVerify messages because\n // they must be digested *after* handling as opposed to all others)\n var b = record.fragment;\n b.read -= 4;\n var msgBytes = b.bytes();\n b.read += 4;\n\n var msg = {\n signature: readVector(b, 2).getBytes()\n };\n\n // TODO: add support for DSA\n\n // generate data to verify\n var verify = forge.util.createBuffer();\n verify.putBuffer(c.session.md5.digest());\n verify.putBuffer(c.session.sha1.digest());\n verify = verify.getBytes();\n\n try {\n var cert = c.session.clientCertificate;\n /*b = forge.pki.rsa.decrypt(\n msg.signature, cert.publicKey, true, verify.length);\n if(b !== verify) {*/\n if(!cert.publicKey.verify(verify, msg.signature, 'NONE')) {\n throw new Error('CertificateVerify signature does not match.');\n }\n\n // digest message now that it has been handled\n c.session.md5.update(msgBytes);\n c.session.sha1.update(msgBytes);\n } catch(ex) {\n return c.error(c, {\n message: 'Bad signature in CertificateVerify.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.handshake_failure\n }\n });\n }\n\n // expect ChangeCipherSpec\n c.expect = CCC;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a client receives a ServerHelloDone record.\n *\n * When this message will be sent:\n * The server hello done message is sent by the server to indicate the end\n * of the server hello and associated messages. After sending this message\n * the server will wait for a client response.\n *\n * Meaning of this message:\n * This message means that the server is done sending messages to support\n * the key exchange, and the client can proceed with its phase of the key\n * exchange.\n *\n * Upon receipt of the server hello done message the client should verify\n * that the server provided a valid certificate if required and check that\n * the server hello parameters are acceptable.\n *\n * struct {} ServerHelloDone;\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleServerHelloDone = function(c, record, length) {\n // len must be 0 bytes\n if(length > 0) {\n return c.error(c, {\n message: 'Invalid ServerHelloDone message. Invalid length.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.record_overflow\n }\n });\n }\n\n if(c.serverCertificate === null) {\n // no server certificate was provided\n var error = {\n message: 'No server certificate provided. Not enough security.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.insufficient_security\n }\n };\n\n // call application callback\n var depth = 0;\n var ret = c.verify(c, error.alert.description, depth, []);\n if(ret !== true) {\n // check for custom alert info\n if(ret || ret === 0) {\n // set custom message and alert description\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.alert) {\n error.alert.description = ret.alert;\n }\n } else if(typeof ret === 'number') {\n // set custom alert description\n error.alert.description = ret;\n }\n }\n\n // send error\n return c.error(c, error);\n }\n }\n\n // create client certificate message if requested\n if(c.session.certificateRequest !== null) {\n record = tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificate(c)\n });\n tls.queue(c, record);\n }\n\n // create client key exchange message\n record = tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createClientKeyExchange(c)\n });\n tls.queue(c, record);\n\n // expect no messages until the following callback has been called\n c.expect = SER;\n\n // create callback to handle client signature (for client-certs)\n var callback = function(c, signature) {\n if(c.session.certificateRequest !== null &&\n c.session.clientCertificate !== null) {\n // create certificate verify message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createCertificateVerify(c, signature)\n }));\n }\n\n // create change cipher spec message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.change_cipher_spec,\n data: tls.createChangeCipherSpec()\n }));\n\n // create pending state\n c.state.pending = tls.createConnectionState(c);\n\n // change current write state to pending write state\n c.state.current.write = c.state.pending.write;\n\n // create finished message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createFinished(c)\n }));\n\n // expect a server ChangeCipherSpec message next\n c.expect = SCC;\n\n // send records\n tls.flush(c);\n\n // continue\n c.process();\n };\n\n // if there is no certificate request or no client certificate, do\n // callback immediately\n if(c.session.certificateRequest === null ||\n c.session.clientCertificate === null) {\n return callback(c, null);\n }\n\n // otherwise get the client signature\n tls.getClientSignature(c, callback);\n};\n\n/**\n * Called when a ChangeCipherSpec record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleChangeCipherSpec = function(c, record) {\n if(record.fragment.getByte() !== 0x01) {\n return c.error(c, {\n message: 'Invalid ChangeCipherSpec message received.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.illegal_parameter\n }\n });\n }\n\n // create pending state if:\n // 1. Resuming session in client mode OR\n // 2. NOT resuming session in server mode\n var client = (c.entity === tls.ConnectionEnd.client);\n if((c.session.resuming && client) || (!c.session.resuming && !client)) {\n c.state.pending = tls.createConnectionState(c);\n }\n\n // change current read state to pending read state\n c.state.current.read = c.state.pending.read;\n\n // clear pending state if:\n // 1. NOT resuming session in client mode OR\n // 2. resuming a session in server mode\n if((!c.session.resuming && client) || (c.session.resuming && !client)) {\n c.state.pending = null;\n }\n\n // expect a Finished record next\n c.expect = client ? SFI : CFI;\n\n // continue\n c.process();\n};\n\n/**\n * Called when a Finished record is received.\n *\n * When this message will be sent:\n * A finished message is always sent immediately after a change\n * cipher spec message to verify that the key exchange and\n * authentication processes were successful. It is essential that a\n * change cipher spec message be received between the other\n * handshake messages and the Finished message.\n *\n * Meaning of this message:\n * The finished message is the first protected with the just-\n * negotiated algorithms, keys, and secrets. Recipients of finished\n * messages must verify that the contents are correct. Once a side\n * has sent its Finished message and received and validated the\n * Finished message from its peer, it may begin to send and receive\n * application data over the connection.\n *\n * struct {\n * opaque verify_data[verify_data_length];\n * } Finished;\n *\n * verify_data\n * PRF(master_secret, finished_label, Hash(handshake_messages))\n * [0..verify_data_length-1];\n *\n * finished_label\n * For Finished messages sent by the client, the string\n * \"client finished\". For Finished messages sent by the server, the\n * string \"server finished\".\n *\n * verify_data_length depends on the cipher suite. If it is not specified\n * by the cipher suite, then it is 12. Versions of TLS < 1.2 always used\n * 12 bytes.\n *\n * @param c the connection.\n * @param record the record.\n * @param length the length of the handshake message.\n */\ntls.handleFinished = function(c, record, length) {\n // rewind to get full bytes for message so it can be manually\n // digested below (special case for Finished messages because they\n // must be digested *after* handling as opposed to all others)\n var b = record.fragment;\n b.read -= 4;\n var msgBytes = b.bytes();\n b.read += 4;\n\n // message contains only verify_data\n var vd = record.fragment.getBytes();\n\n // ensure verify data is correct\n b = forge.util.createBuffer();\n b.putBuffer(c.session.md5.digest());\n b.putBuffer(c.session.sha1.digest());\n\n // set label based on entity type\n var client = (c.entity === tls.ConnectionEnd.client);\n var label = client ? 'server finished' : 'client finished';\n\n // TODO: determine prf function and verify length for TLS 1.2\n var sp = c.session.sp;\n var vdl = 12;\n var prf = prf_TLS1;\n b = prf(sp.master_secret, label, b.getBytes(), vdl);\n if(b.getBytes() !== vd) {\n return c.error(c, {\n message: 'Invalid verify_data in Finished message.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.decrypt_error\n }\n });\n }\n\n // digest finished message now that it has been handled\n c.session.md5.update(msgBytes);\n c.session.sha1.update(msgBytes);\n\n // resuming session as client or NOT resuming session as server\n if((c.session.resuming && client) || (!c.session.resuming && !client)) {\n // create change cipher spec message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.change_cipher_spec,\n data: tls.createChangeCipherSpec()\n }));\n\n // change current write state to pending write state, clear pending\n c.state.current.write = c.state.pending.write;\n c.state.pending = null;\n\n // create finished message\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createFinished(c)\n }));\n }\n\n // expect application data next\n c.expect = client ? SAD : CAD;\n\n // handshake complete\n c.handshaking = false;\n ++c.handshakes;\n\n // save access to peer certificate\n c.peerCertificate = client ?\n c.session.serverCertificate : c.session.clientCertificate;\n\n // send records\n tls.flush(c);\n\n // now connected\n c.isConnected = true;\n c.connected(c);\n\n // continue\n c.process();\n};\n\n/**\n * Called when an Alert record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleAlert = function(c, record) {\n // read alert\n var b = record.fragment;\n var alert = {\n level: b.getByte(),\n description: b.getByte()\n };\n\n // TODO: consider using a table?\n // get appropriate message\n var msg;\n switch(alert.description) {\n case tls.Alert.Description.close_notify:\n msg = 'Connection closed.';\n break;\n case tls.Alert.Description.unexpected_message:\n msg = 'Unexpected message.';\n break;\n case tls.Alert.Description.bad_record_mac:\n msg = 'Bad record MAC.';\n break;\n case tls.Alert.Description.decryption_failed:\n msg = 'Decryption failed.';\n break;\n case tls.Alert.Description.record_overflow:\n msg = 'Record overflow.';\n break;\n case tls.Alert.Description.decompression_failure:\n msg = 'Decompression failed.';\n break;\n case tls.Alert.Description.handshake_failure:\n msg = 'Handshake failure.';\n break;\n case tls.Alert.Description.bad_certificate:\n msg = 'Bad certificate.';\n break;\n case tls.Alert.Description.unsupported_certificate:\n msg = 'Unsupported certificate.';\n break;\n case tls.Alert.Description.certificate_revoked:\n msg = 'Certificate revoked.';\n break;\n case tls.Alert.Description.certificate_expired:\n msg = 'Certificate expired.';\n break;\n case tls.Alert.Description.certificate_unknown:\n msg = 'Certificate unknown.';\n break;\n case tls.Alert.Description.illegal_parameter:\n msg = 'Illegal parameter.';\n break;\n case tls.Alert.Description.unknown_ca:\n msg = 'Unknown certificate authority.';\n break;\n case tls.Alert.Description.access_denied:\n msg = 'Access denied.';\n break;\n case tls.Alert.Description.decode_error:\n msg = 'Decode error.';\n break;\n case tls.Alert.Description.decrypt_error:\n msg = 'Decrypt error.';\n break;\n case tls.Alert.Description.export_restriction:\n msg = 'Export restriction.';\n break;\n case tls.Alert.Description.protocol_version:\n msg = 'Unsupported protocol version.';\n break;\n case tls.Alert.Description.insufficient_security:\n msg = 'Insufficient security.';\n break;\n case tls.Alert.Description.internal_error:\n msg = 'Internal error.';\n break;\n case tls.Alert.Description.user_canceled:\n msg = 'User canceled.';\n break;\n case tls.Alert.Description.no_renegotiation:\n msg = 'Renegotiation not supported.';\n break;\n default:\n msg = 'Unknown error.';\n break;\n }\n\n // close connection on close_notify, not an error\n if(alert.description === tls.Alert.Description.close_notify) {\n return c.close();\n }\n\n // call error handler\n c.error(c, {\n message: msg,\n send: false,\n // origin is the opposite end\n origin: (c.entity === tls.ConnectionEnd.client) ? 'server' : 'client',\n alert: alert\n });\n\n // continue\n c.process();\n};\n\n/**\n * Called when a Handshake record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleHandshake = function(c, record) {\n // get the handshake type and message length\n var b = record.fragment;\n var type = b.getByte();\n var length = b.getInt24();\n\n // see if the record fragment doesn't yet contain the full message\n if(length > b.length()) {\n // cache the record, clear its fragment, and reset the buffer read\n // pointer before the type and length were read\n c.fragmented = record;\n record.fragment = forge.util.createBuffer();\n b.read -= 4;\n\n // continue\n return c.process();\n }\n\n // full message now available, clear cache, reset read pointer to\n // before type and length\n c.fragmented = null;\n b.read -= 4;\n\n // save the handshake bytes for digestion after handler is found\n // (include type and length of handshake msg)\n var bytes = b.bytes(length + 4);\n\n // restore read pointer\n b.read += 4;\n\n // handle expected message\n if(type in hsTable[c.entity][c.expect]) {\n // initialize server session\n if(c.entity === tls.ConnectionEnd.server && !c.open && !c.fail) {\n c.handshaking = true;\n c.session = {\n version: null,\n extensions: {\n server_name: {\n serverNameList: []\n }\n },\n cipherSuite: null,\n compressionMethod: null,\n serverCertificate: null,\n clientCertificate: null,\n md5: forge.md.md5.create(),\n sha1: forge.md.sha1.create()\n };\n }\n\n /* Update handshake messages digest. Finished and CertificateVerify\n messages are not digested here. They can't be digested as part of\n the verify_data that they contain. These messages are manually\n digested in their handlers. HelloRequest messages are simply never\n included in the handshake message digest according to spec. */\n if(type !== tls.HandshakeType.hello_request &&\n type !== tls.HandshakeType.certificate_verify &&\n type !== tls.HandshakeType.finished) {\n c.session.md5.update(bytes);\n c.session.sha1.update(bytes);\n }\n\n // handle specific handshake type record\n hsTable[c.entity][c.expect][type](c, record, length);\n } else {\n // unexpected record\n tls.handleUnexpected(c, record);\n }\n};\n\n/**\n * Called when an ApplicationData record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleApplicationData = function(c, record) {\n // buffer data, notify that its ready\n c.data.putBuffer(record.fragment);\n c.dataReady(c);\n\n // continue\n c.process();\n};\n\n/**\n * Called when a Heartbeat record is received.\n *\n * @param c the connection.\n * @param record the record.\n */\ntls.handleHeartbeat = function(c, record) {\n // get the heartbeat type and payload\n var b = record.fragment;\n var type = b.getByte();\n var length = b.getInt16();\n var payload = b.getBytes(length);\n\n if(type === tls.HeartbeatMessageType.heartbeat_request) {\n // discard request during handshake or if length is too large\n if(c.handshaking || length > payload.length) {\n // continue\n return c.process();\n }\n // retransmit payload\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.heartbeat,\n data: tls.createHeartbeat(\n tls.HeartbeatMessageType.heartbeat_response, payload)\n }));\n tls.flush(c);\n } else if(type === tls.HeartbeatMessageType.heartbeat_response) {\n // check payload against expected payload, discard heartbeat if no match\n if(payload !== c.expectedHeartbeatPayload) {\n // continue\n return c.process();\n }\n\n // notify that a valid heartbeat was received\n if(c.heartbeatReceived) {\n c.heartbeatReceived(c, forge.util.createBuffer(payload));\n }\n }\n\n // continue\n c.process();\n};\n\n/**\n * The transistional state tables for receiving TLS records. It maps the\n * current TLS engine state and a received record to a function to handle the\n * record and update the state.\n *\n * For instance, if the current state is SHE, then the TLS engine is expecting\n * a ServerHello record. Once a record is received, the handler function is\n * looked up using the state SHE and the record's content type.\n *\n * The resulting function will either be an error handler or a record handler.\n * The function will take whatever action is appropriate and update the state\n * for the next record.\n *\n * The states are all based on possible server record types. Note that the\n * client will never specifically expect to receive a HelloRequest or an alert\n * from the server so there is no state that reflects this. These messages may\n * occur at any time.\n *\n * There are two tables for mapping states because there is a second tier of\n * types for handshake messages. Once a record with a content type of handshake\n * is received, the handshake record handler will look up the handshake type in\n * the secondary map to get its appropriate handler.\n *\n * Valid message orders are as follows:\n *\n * =======================FULL HANDSHAKE======================\n * Client Server\n *\n * ClientHello -------->\n * ServerHello\n * Certificate*\n * ServerKeyExchange*\n * CertificateRequest*\n * <-------- ServerHelloDone\n * Certificate*\n * ClientKeyExchange\n * CertificateVerify*\n * [ChangeCipherSpec]\n * Finished -------->\n * [ChangeCipherSpec]\n * <-------- Finished\n * Application Data <-------> Application Data\n *\n * =====================SESSION RESUMPTION=====================\n * Client Server\n *\n * ClientHello -------->\n * ServerHello\n * [ChangeCipherSpec]\n * <-------- Finished\n * [ChangeCipherSpec]\n * Finished -------->\n * Application Data <-------> Application Data\n */\n// client expect states (indicate which records are expected to be received)\nvar SHE = 0; // rcv server hello\nvar SCE = 1; // rcv server certificate\nvar SKE = 2; // rcv server key exchange\nvar SCR = 3; // rcv certificate request\nvar SHD = 4; // rcv server hello done\nvar SCC = 5; // rcv change cipher spec\nvar SFI = 6; // rcv finished\nvar SAD = 7; // rcv application data\nvar SER = 8; // not expecting any messages at this point\n\n// server expect states\nvar CHE = 0; // rcv client hello\nvar CCE = 1; // rcv client certificate\nvar CKE = 2; // rcv client key exchange\nvar CCV = 3; // rcv certificate verify\nvar CCC = 4; // rcv change cipher spec\nvar CFI = 5; // rcv finished\nvar CAD = 6; // rcv application data\nvar CER = 7; // not expecting any messages at this point\n\n// map client current expect state and content type to function\nvar __ = tls.handleUnexpected;\nvar R0 = tls.handleChangeCipherSpec;\nvar R1 = tls.handleAlert;\nvar R2 = tls.handleHandshake;\nvar R3 = tls.handleApplicationData;\nvar R4 = tls.handleHeartbeat;\nvar ctTable = [];\nctTable[tls.ConnectionEnd.client] = [\n// CC,AL,HS,AD,HB\n/*SHE*/[__,R1,R2,__,R4],\n/*SCE*/[__,R1,R2,__,R4],\n/*SKE*/[__,R1,R2,__,R4],\n/*SCR*/[__,R1,R2,__,R4],\n/*SHD*/[__,R1,R2,__,R4],\n/*SCC*/[R0,R1,__,__,R4],\n/*SFI*/[__,R1,R2,__,R4],\n/*SAD*/[__,R1,R2,R3,R4],\n/*SER*/[__,R1,R2,__,R4]\n];\n\n// map server current expect state and content type to function\nctTable[tls.ConnectionEnd.server] = [\n// CC,AL,HS,AD\n/*CHE*/[__,R1,R2,__,R4],\n/*CCE*/[__,R1,R2,__,R4],\n/*CKE*/[__,R1,R2,__,R4],\n/*CCV*/[__,R1,R2,__,R4],\n/*CCC*/[R0,R1,__,__,R4],\n/*CFI*/[__,R1,R2,__,R4],\n/*CAD*/[__,R1,R2,R3,R4],\n/*CER*/[__,R1,R2,__,R4]\n];\n\n// map client current expect state and handshake type to function\nvar H0 = tls.handleHelloRequest;\nvar H1 = tls.handleServerHello;\nvar H2 = tls.handleCertificate;\nvar H3 = tls.handleServerKeyExchange;\nvar H4 = tls.handleCertificateRequest;\nvar H5 = tls.handleServerHelloDone;\nvar H6 = tls.handleFinished;\nvar hsTable = [];\nhsTable[tls.ConnectionEnd.client] = [\n// HR,01,SH,03,04,05,06,07,08,09,10,SC,SK,CR,HD,15,CK,17,18,19,FI\n/*SHE*/[__,__,H1,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*SCE*/[H0,__,__,__,__,__,__,__,__,__,__,H2,H3,H4,H5,__,__,__,__,__,__],\n/*SKE*/[H0,__,__,__,__,__,__,__,__,__,__,__,H3,H4,H5,__,__,__,__,__,__],\n/*SCR*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,H4,H5,__,__,__,__,__,__],\n/*SHD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,H5,__,__,__,__,__,__],\n/*SCC*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*SFI*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6],\n/*SAD*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*SER*/[H0,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__]\n];\n\n// map server current expect state and handshake type to function\n// Note: CAD[CH] does not map to FB because renegotation is prohibited\nvar H7 = tls.handleClientHello;\nvar H8 = tls.handleClientKeyExchange;\nvar H9 = tls.handleCertificateVerify;\nhsTable[tls.ConnectionEnd.server] = [\n// 01,CH,02,03,04,05,06,07,08,09,10,CC,12,13,14,CV,CK,17,18,19,FI\n/*CHE*/[__,H7,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*CCE*/[__,__,__,__,__,__,__,__,__,__,__,H2,__,__,__,__,__,__,__,__,__],\n/*CKE*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H8,__,__,__,__],\n/*CCV*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H9,__,__,__,__,__],\n/*CCC*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*CFI*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,H6],\n/*CAD*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__],\n/*CER*/[__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__]\n];\n\n/**\n * Generates the master_secret and keys using the given security parameters.\n *\n * The security parameters for a TLS connection state are defined as such:\n *\n * struct {\n * ConnectionEnd entity;\n * PRFAlgorithm prf_algorithm;\n * BulkCipherAlgorithm bulk_cipher_algorithm;\n * CipherType cipher_type;\n * uint8 enc_key_length;\n * uint8 block_length;\n * uint8 fixed_iv_length;\n * uint8 record_iv_length;\n * MACAlgorithm mac_algorithm;\n * uint8 mac_length;\n * uint8 mac_key_length;\n * CompressionMethod compression_algorithm;\n * opaque master_secret[48];\n * opaque client_random[32];\n * opaque server_random[32];\n * } SecurityParameters;\n *\n * Note that this definition is from TLS 1.2. In TLS 1.0 some of these\n * parameters are ignored because, for instance, the PRFAlgorithm is a\n * builtin-fixed algorithm combining iterations of MD5 and SHA-1 in TLS 1.0.\n *\n * The Record Protocol requires an algorithm to generate keys required by the\n * current connection state.\n *\n * The master secret is expanded into a sequence of secure bytes, which is then\n * split to a client write MAC key, a server write MAC key, a client write\n * encryption key, and a server write encryption key. In TLS 1.0 a client write\n * IV and server write IV are also generated. Each of these is generated from\n * the byte sequence in that order. Unused values are empty. In TLS 1.2, some\n * AEAD ciphers may additionally require a client write IV and a server write\n * IV (see Section 6.2.3.3).\n *\n * When keys, MAC keys, and IVs are generated, the master secret is used as an\n * entropy source.\n *\n * To generate the key material, compute:\n *\n * master_secret = PRF(pre_master_secret, \"master secret\",\n * ClientHello.random + ServerHello.random)\n *\n * key_block = PRF(SecurityParameters.master_secret,\n * \"key expansion\",\n * SecurityParameters.server_random +\n * SecurityParameters.client_random);\n *\n * until enough output has been generated. Then, the key_block is\n * partitioned as follows:\n *\n * client_write_MAC_key[SecurityParameters.mac_key_length]\n * server_write_MAC_key[SecurityParameters.mac_key_length]\n * client_write_key[SecurityParameters.enc_key_length]\n * server_write_key[SecurityParameters.enc_key_length]\n * client_write_IV[SecurityParameters.fixed_iv_length]\n * server_write_IV[SecurityParameters.fixed_iv_length]\n *\n * In TLS 1.2, the client_write_IV and server_write_IV are only generated for\n * implicit nonce techniques as described in Section 3.2.1 of [AEAD]. This\n * implementation uses TLS 1.0 so IVs are generated.\n *\n * Implementation note: The currently defined cipher suite which requires the\n * most material is AES_256_CBC_SHA256. It requires 2 x 32 byte keys and 2 x 32\n * byte MAC keys, for a total 128 bytes of key material. In TLS 1.0 it also\n * requires 2 x 16 byte IVs, so it actually takes 160 bytes of key material.\n *\n * @param c the connection.\n * @param sp the security parameters to use.\n *\n * @return the security keys.\n */\ntls.generateKeys = function(c, sp) {\n // TLS_RSA_WITH_AES_128_CBC_SHA (required to be compliant with TLS 1.2) &\n // TLS_RSA_WITH_AES_256_CBC_SHA are the only cipher suites implemented\n // at present\n\n // TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA is required to be compliant with\n // TLS 1.0 but we don't care right now because AES is better and we have\n // an implementation for it\n\n // TODO: TLS 1.2 implementation\n /*\n // determine the PRF\n var prf;\n switch(sp.prf_algorithm) {\n case tls.PRFAlgorithm.tls_prf_sha256:\n prf = prf_sha256;\n break;\n default:\n // should never happen\n throw new Error('Invalid PRF');\n }\n */\n\n // TLS 1.0/1.1 implementation\n var prf = prf_TLS1;\n\n // concatenate server and client random\n var random = sp.client_random + sp.server_random;\n\n // only create master secret if session is new\n if(!c.session.resuming) {\n // create master secret, clean up pre-master secret\n sp.master_secret = prf(\n sp.pre_master_secret, 'master secret', random, 48).bytes();\n sp.pre_master_secret = null;\n }\n\n // generate the amount of key material needed\n random = sp.server_random + sp.client_random;\n var length = 2 * sp.mac_key_length + 2 * sp.enc_key_length;\n\n // include IV for TLS/1.0\n var tls10 = (c.version.major === tls.Versions.TLS_1_0.major &&\n c.version.minor === tls.Versions.TLS_1_0.minor);\n if(tls10) {\n length += 2 * sp.fixed_iv_length;\n }\n var km = prf(sp.master_secret, 'key expansion', random, length);\n\n // split the key material into the MAC and encryption keys\n var rval = {\n client_write_MAC_key: km.getBytes(sp.mac_key_length),\n server_write_MAC_key: km.getBytes(sp.mac_key_length),\n client_write_key: km.getBytes(sp.enc_key_length),\n server_write_key: km.getBytes(sp.enc_key_length)\n };\n\n // include TLS 1.0 IVs\n if(tls10) {\n rval.client_write_IV = km.getBytes(sp.fixed_iv_length);\n rval.server_write_IV = km.getBytes(sp.fixed_iv_length);\n }\n\n return rval;\n};\n\n/**\n * Creates a new initialized TLS connection state. A connection state has\n * a read mode and a write mode.\n *\n * compression state:\n * The current state of the compression algorithm.\n *\n * cipher state:\n * The current state of the encryption algorithm. This will consist of the\n * scheduled key for that connection. For stream ciphers, this will also\n * contain whatever state information is necessary to allow the stream to\n * continue to encrypt or decrypt data.\n *\n * MAC key:\n * The MAC key for the connection.\n *\n * sequence number:\n * Each connection state contains a sequence number, which is maintained\n * separately for read and write states. The sequence number MUST be set to\n * zero whenever a connection state is made the active state. Sequence\n * numbers are of type uint64 and may not exceed 2^64-1. Sequence numbers do\n * not wrap. If a TLS implementation would need to wrap a sequence number,\n * it must renegotiate instead. A sequence number is incremented after each\n * record: specifically, the first record transmitted under a particular\n * connection state MUST use sequence number 0.\n *\n * @param c the connection.\n *\n * @return the new initialized TLS connection state.\n */\ntls.createConnectionState = function(c) {\n var client = (c.entity === tls.ConnectionEnd.client);\n\n var createMode = function() {\n var mode = {\n // two 32-bit numbers, first is most significant\n sequenceNumber: [0, 0],\n macKey: null,\n macLength: 0,\n macFunction: null,\n cipherState: null,\n cipherFunction: function(record) {return true;},\n compressionState: null,\n compressFunction: function(record) {return true;},\n updateSequenceNumber: function() {\n if(mode.sequenceNumber[1] === 0xFFFFFFFF) {\n mode.sequenceNumber[1] = 0;\n ++mode.sequenceNumber[0];\n } else {\n ++mode.sequenceNumber[1];\n }\n }\n };\n return mode;\n };\n var state = {\n read: createMode(),\n write: createMode()\n };\n\n // update function in read mode will decrypt then decompress a record\n state.read.update = function(c, record) {\n if(!state.read.cipherFunction(record, state.read)) {\n c.error(c, {\n message: 'Could not decrypt record or bad MAC.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n // doesn't matter if decryption failed or MAC was\n // invalid, return the same error so as not to reveal\n // which one occurred\n description: tls.Alert.Description.bad_record_mac\n }\n });\n } else if(!state.read.compressFunction(c, record, state.read)) {\n c.error(c, {\n message: 'Could not decompress record.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.decompression_failure\n }\n });\n }\n return !c.fail;\n };\n\n // update function in write mode will compress then encrypt a record\n state.write.update = function(c, record) {\n if(!state.write.compressFunction(c, record, state.write)) {\n // error, but do not send alert since it would require\n // compression as well\n c.error(c, {\n message: 'Could not compress record.',\n send: false,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n } else if(!state.write.cipherFunction(record, state.write)) {\n // error, but do not send alert since it would require\n // encryption as well\n c.error(c, {\n message: 'Could not encrypt record.',\n send: false,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n return !c.fail;\n };\n\n // handle security parameters\n if(c.session) {\n var sp = c.session.sp;\n c.session.cipherSuite.initSecurityParameters(sp);\n\n // generate keys\n sp.keys = tls.generateKeys(c, sp);\n state.read.macKey = client ?\n sp.keys.server_write_MAC_key : sp.keys.client_write_MAC_key;\n state.write.macKey = client ?\n sp.keys.client_write_MAC_key : sp.keys.server_write_MAC_key;\n\n // cipher suite setup\n c.session.cipherSuite.initConnectionState(state, c, sp);\n\n // compression setup\n switch(sp.compression_algorithm) {\n case tls.CompressionMethod.none:\n break;\n case tls.CompressionMethod.deflate:\n state.read.compressFunction = inflate;\n state.write.compressFunction = deflate;\n break;\n default:\n throw new Error('Unsupported compression algorithm.');\n }\n }\n\n return state;\n};\n\n/**\n * Creates a Random structure.\n *\n * struct {\n * uint32 gmt_unix_time;\n * opaque random_bytes[28];\n * } Random;\n *\n * gmt_unix_time:\n * The current time and date in standard UNIX 32-bit format (seconds since\n * the midnight starting Jan 1, 1970, UTC, ignoring leap seconds) according\n * to the sender's internal clock. Clocks are not required to be set\n * correctly by the basic TLS protocol; higher-level or application\n * protocols may define additional requirements. Note that, for historical\n * reasons, the data element is named using GMT, the predecessor of the\n * current worldwide time base, UTC.\n * random_bytes:\n * 28 bytes generated by a secure random number generator.\n *\n * @return the Random structure as a byte array.\n */\ntls.createRandom = function() {\n // get UTC milliseconds\n var d = new Date();\n var utc = +d + d.getTimezoneOffset() * 60000;\n var rval = forge.util.createBuffer();\n rval.putInt32(utc);\n rval.putBytes(forge.random.getBytes(28));\n return rval;\n};\n\n/**\n * Creates a TLS record with the given type and data.\n *\n * @param c the connection.\n * @param options:\n * type: the record type.\n * data: the plain text data in a byte buffer.\n *\n * @return the created record.\n */\ntls.createRecord = function(c, options) {\n if(!options.data) {\n return null;\n }\n var record = {\n type: options.type,\n version: {\n major: c.version.major,\n minor: c.version.minor\n },\n length: options.data.length(),\n fragment: options.data\n };\n return record;\n};\n\n/**\n * Creates a TLS alert record.\n *\n * @param c the connection.\n * @param alert:\n * level: the TLS alert level.\n * description: the TLS alert description.\n *\n * @return the created alert record.\n */\ntls.createAlert = function(c, alert) {\n var b = forge.util.createBuffer();\n b.putByte(alert.level);\n b.putByte(alert.description);\n return tls.createRecord(c, {\n type: tls.ContentType.alert,\n data: b\n });\n};\n\n/* The structure of a TLS handshake message.\n *\n * struct {\n * HandshakeType msg_type; // handshake type\n * uint24 length; // bytes in message\n * select(HandshakeType) {\n * case hello_request: HelloRequest;\n * case client_hello: ClientHello;\n * case server_hello: ServerHello;\n * case certificate: Certificate;\n * case server_key_exchange: ServerKeyExchange;\n * case certificate_request: CertificateRequest;\n * case server_hello_done: ServerHelloDone;\n * case certificate_verify: CertificateVerify;\n * case client_key_exchange: ClientKeyExchange;\n * case finished: Finished;\n * } body;\n * } Handshake;\n */\n\n/**\n * Creates a ClientHello message.\n *\n * opaque SessionID<0..32>;\n * enum { null(0), deflate(1), (255) } CompressionMethod;\n * uint8 CipherSuite[2];\n *\n * struct {\n * ProtocolVersion client_version;\n * Random random;\n * SessionID session_id;\n * CipherSuite cipher_suites<2..2^16-2>;\n * CompressionMethod compression_methods<1..2^8-1>;\n * select(extensions_present) {\n * case false:\n * struct {};\n * case true:\n * Extension extensions<0..2^16-1>;\n * };\n * } ClientHello;\n *\n * The extension format for extended client hellos and server hellos is:\n *\n * struct {\n * ExtensionType extension_type;\n * opaque extension_data<0..2^16-1>;\n * } Extension;\n *\n * Here:\n *\n * - \"extension_type\" identifies the particular extension type.\n * - \"extension_data\" contains information specific to the particular\n * extension type.\n *\n * The extension types defined in this document are:\n *\n * enum {\n * server_name(0), max_fragment_length(1),\n * client_certificate_url(2), trusted_ca_keys(3),\n * truncated_hmac(4), status_request(5), (65535)\n * } ExtensionType;\n *\n * @param c the connection.\n *\n * @return the ClientHello byte buffer.\n */\ntls.createClientHello = function(c) {\n // save hello version\n c.session.clientHelloVersion = {\n major: c.version.major,\n minor: c.version.minor\n };\n\n // create supported cipher suites\n var cipherSuites = forge.util.createBuffer();\n for(var i = 0; i < c.cipherSuites.length; ++i) {\n var cs = c.cipherSuites[i];\n cipherSuites.putByte(cs.id[0]);\n cipherSuites.putByte(cs.id[1]);\n }\n var cSuites = cipherSuites.length();\n\n // create supported compression methods, null always supported, but\n // also support deflate if connection has inflate and deflate methods\n var compressionMethods = forge.util.createBuffer();\n compressionMethods.putByte(tls.CompressionMethod.none);\n // FIXME: deflate support disabled until issues with raw deflate data\n // without zlib headers are resolved\n /*\n if(c.inflate !== null && c.deflate !== null) {\n compressionMethods.putByte(tls.CompressionMethod.deflate);\n }\n */\n var cMethods = compressionMethods.length();\n\n // create TLS SNI (server name indication) extension if virtual host\n // has been specified, see RFC 3546\n var extensions = forge.util.createBuffer();\n if(c.virtualHost) {\n // create extension struct\n var ext = forge.util.createBuffer();\n ext.putByte(0x00); // type server_name (ExtensionType is 2 bytes)\n ext.putByte(0x00);\n\n /* In order to provide the server name, clients MAY include an\n * extension of type \"server_name\" in the (extended) client hello.\n * The \"extension_data\" field of this extension SHALL contain\n * \"ServerNameList\" where:\n *\n * struct {\n * NameType name_type;\n * select(name_type) {\n * case host_name: HostName;\n * } name;\n * } ServerName;\n *\n * enum {\n * host_name(0), (255)\n * } NameType;\n *\n * opaque HostName<1..2^16-1>;\n *\n * struct {\n * ServerName server_name_list<1..2^16-1>\n * } ServerNameList;\n */\n var serverName = forge.util.createBuffer();\n serverName.putByte(0x00); // type host_name\n writeVector(serverName, 2, forge.util.createBuffer(c.virtualHost));\n\n // ServerNameList is in extension_data\n var snList = forge.util.createBuffer();\n writeVector(snList, 2, serverName);\n writeVector(ext, 2, snList);\n extensions.putBuffer(ext);\n }\n var extLength = extensions.length();\n if(extLength > 0) {\n // add extension vector length\n extLength += 2;\n }\n\n // determine length of the handshake message\n // cipher suites and compression methods size will need to be\n // updated if more get added to the list\n var sessionId = c.session.id;\n var length =\n sessionId.length + 1 + // session ID vector\n 2 + // version (major + minor)\n 4 + 28 + // random time and random bytes\n 2 + cSuites + // cipher suites vector\n 1 + cMethods + // compression methods vector\n extLength; // extensions vector\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.client_hello);\n rval.putInt24(length); // handshake length\n rval.putByte(c.version.major); // major version\n rval.putByte(c.version.minor); // minor version\n rval.putBytes(c.session.sp.client_random); // random time + bytes\n writeVector(rval, 1, forge.util.createBuffer(sessionId));\n writeVector(rval, 2, cipherSuites);\n writeVector(rval, 1, compressionMethods);\n if(extLength > 0) {\n writeVector(rval, 2, extensions);\n }\n return rval;\n};\n\n/**\n * Creates a ServerHello message.\n *\n * @param c the connection.\n *\n * @return the ServerHello byte buffer.\n */\ntls.createServerHello = function(c) {\n // determine length of the handshake message\n var sessionId = c.session.id;\n var length =\n sessionId.length + 1 + // session ID vector\n 2 + // version (major + minor)\n 4 + 28 + // random time and random bytes\n 2 + // chosen cipher suite\n 1; // chosen compression method\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.server_hello);\n rval.putInt24(length); // handshake length\n rval.putByte(c.version.major); // major version\n rval.putByte(c.version.minor); // minor version\n rval.putBytes(c.session.sp.server_random); // random time + bytes\n writeVector(rval, 1, forge.util.createBuffer(sessionId));\n rval.putByte(c.session.cipherSuite.id[0]);\n rval.putByte(c.session.cipherSuite.id[1]);\n rval.putByte(c.session.compressionMethod);\n return rval;\n};\n\n/**\n * Creates a Certificate message.\n *\n * When this message will be sent:\n * This is the first message the client can send after receiving a server\n * hello done message and the first message the server can send after\n * sending a ServerHello. This client message is only sent if the server\n * requests a certificate. If no suitable certificate is available, the\n * client should send a certificate message containing no certificates. If\n * client authentication is required by the server for the handshake to\n * continue, it may respond with a fatal handshake failure alert.\n *\n * opaque ASN.1Cert<1..2^24-1>;\n *\n * struct {\n * ASN.1Cert certificate_list<0..2^24-1>;\n * } Certificate;\n *\n * @param c the connection.\n *\n * @return the Certificate byte buffer.\n */\ntls.createCertificate = function(c) {\n // TODO: check certificate request to ensure types are supported\n\n // get a certificate (a certificate as a PEM string)\n var client = (c.entity === tls.ConnectionEnd.client);\n var cert = null;\n if(c.getCertificate) {\n var hint;\n if(client) {\n hint = c.session.certificateRequest;\n } else {\n hint = c.session.extensions.server_name.serverNameList;\n }\n cert = c.getCertificate(c, hint);\n }\n\n // buffer to hold certificate list\n var certList = forge.util.createBuffer();\n if(cert !== null) {\n try {\n // normalize cert to a chain of certificates\n if(!forge.util.isArray(cert)) {\n cert = [cert];\n }\n var asn1 = null;\n for(var i = 0; i < cert.length; ++i) {\n var msg = forge.pem.decode(cert[i])[0];\n if(msg.type !== 'CERTIFICATE' &&\n msg.type !== 'X509 CERTIFICATE' &&\n msg.type !== 'TRUSTED CERTIFICATE') {\n var error = new Error('Could not convert certificate from PEM; PEM ' +\n 'header type is not \"CERTIFICATE\", \"X509 CERTIFICATE\", or ' +\n '\"TRUSTED CERTIFICATE\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert certificate from PEM; PEM is encrypted.');\n }\n\n var der = forge.util.createBuffer(msg.body);\n if(asn1 === null) {\n asn1 = forge.asn1.fromDer(der.bytes(), false);\n }\n\n // certificate entry is itself a vector with 3 length bytes\n var certBuffer = forge.util.createBuffer();\n writeVector(certBuffer, 3, der);\n\n // add cert vector to cert list vector\n certList.putBuffer(certBuffer);\n }\n\n // save certificate\n cert = forge.pki.certificateFromAsn1(asn1);\n if(client) {\n c.session.clientCertificate = cert;\n } else {\n c.session.serverCertificate = cert;\n }\n } catch(ex) {\n return c.error(c, {\n message: 'Could not send certificate list.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.bad_certificate\n }\n });\n }\n }\n\n // determine length of the handshake message\n var length = 3 + certList.length(); // cert list vector\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.certificate);\n rval.putInt24(length);\n writeVector(rval, 3, certList);\n return rval;\n};\n\n/**\n * Creates a ClientKeyExchange message.\n *\n * When this message will be sent:\n * This message is always sent by the client. It will immediately follow the\n * client certificate message, if it is sent. Otherwise it will be the first\n * message sent by the client after it receives the server hello done\n * message.\n *\n * Meaning of this message:\n * With this message, the premaster secret is set, either though direct\n * transmission of the RSA-encrypted secret, or by the transmission of\n * Diffie-Hellman parameters which will allow each side to agree upon the\n * same premaster secret. When the key exchange method is DH_RSA or DH_DSS,\n * client certification has been requested, and the client was able to\n * respond with a certificate which contained a Diffie-Hellman public key\n * whose parameters (group and generator) matched those specified by the\n * server in its certificate, this message will not contain any data.\n *\n * Meaning of this message:\n * If RSA is being used for key agreement and authentication, the client\n * generates a 48-byte premaster secret, encrypts it using the public key\n * from the server's certificate or the temporary RSA key provided in a\n * server key exchange message, and sends the result in an encrypted\n * premaster secret message. This structure is a variant of the client\n * key exchange message, not a message in itself.\n *\n * struct {\n * select(KeyExchangeAlgorithm) {\n * case rsa: EncryptedPreMasterSecret;\n * case diffie_hellman: ClientDiffieHellmanPublic;\n * } exchange_keys;\n * } ClientKeyExchange;\n *\n * struct {\n * ProtocolVersion client_version;\n * opaque random[46];\n * } PreMasterSecret;\n *\n * struct {\n * public-key-encrypted PreMasterSecret pre_master_secret;\n * } EncryptedPreMasterSecret;\n *\n * A public-key-encrypted element is encoded as a vector <0..2^16-1>.\n *\n * @param c the connection.\n *\n * @return the ClientKeyExchange byte buffer.\n */\ntls.createClientKeyExchange = function(c) {\n // create buffer to encrypt\n var b = forge.util.createBuffer();\n\n // add highest client-supported protocol to help server avoid version\n // rollback attacks\n b.putByte(c.session.clientHelloVersion.major);\n b.putByte(c.session.clientHelloVersion.minor);\n\n // generate and add 46 random bytes\n b.putBytes(forge.random.getBytes(46));\n\n // save pre-master secret\n var sp = c.session.sp;\n sp.pre_master_secret = b.getBytes();\n\n // RSA-encrypt the pre-master secret\n var key = c.session.serverCertificate.publicKey;\n b = key.encrypt(sp.pre_master_secret);\n\n /* Note: The encrypted pre-master secret will be stored in a\n public-key-encrypted opaque vector that has the length prefixed using\n 2 bytes, so include those 2 bytes in the handshake message length. This\n is done as a minor optimization instead of calling writeVector(). */\n\n // determine length of the handshake message\n var length = b.length + 2;\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.client_key_exchange);\n rval.putInt24(length);\n // add vector length bytes\n rval.putInt16(b.length);\n rval.putBytes(b);\n return rval;\n};\n\n/**\n * Creates a ServerKeyExchange message.\n *\n * @param c the connection.\n *\n * @return the ServerKeyExchange byte buffer.\n */\ntls.createServerKeyExchange = function(c) {\n // this implementation only supports RSA, no Diffie-Hellman support,\n // so this record is empty\n\n // determine length of the handshake message\n var length = 0;\n\n // build record fragment\n var rval = forge.util.createBuffer();\n if(length > 0) {\n rval.putByte(tls.HandshakeType.server_key_exchange);\n rval.putInt24(length);\n }\n return rval;\n};\n\n/**\n * Gets the signed data used to verify a client-side certificate. See\n * tls.createCertificateVerify() for details.\n *\n * @param c the connection.\n * @param callback the callback to call once the signed data is ready.\n */\ntls.getClientSignature = function(c, callback) {\n // generate data to RSA encrypt\n var b = forge.util.createBuffer();\n b.putBuffer(c.session.md5.digest());\n b.putBuffer(c.session.sha1.digest());\n b = b.getBytes();\n\n // create default signing function as necessary\n c.getSignature = c.getSignature || function(c, b, callback) {\n // do rsa encryption, call callback\n var privateKey = null;\n if(c.getPrivateKey) {\n try {\n privateKey = c.getPrivateKey(c, c.session.clientCertificate);\n privateKey = forge.pki.privateKeyFromPem(privateKey);\n } catch(ex) {\n c.error(c, {\n message: 'Could not get private key.',\n cause: ex,\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n }\n }\n if(privateKey === null) {\n c.error(c, {\n message: 'No private key set.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.internal_error\n }\n });\n } else {\n b = privateKey.sign(b, null);\n }\n callback(c, b);\n };\n\n // get client signature\n c.getSignature(c, b, callback);\n};\n\n/**\n * Creates a CertificateVerify message.\n *\n * Meaning of this message:\n * This structure conveys the client's Diffie-Hellman public value\n * (Yc) if it was not already included in the client's certificate.\n * The encoding used for Yc is determined by the enumerated\n * PublicValueEncoding. This structure is a variant of the client\n * key exchange message, not a message in itself.\n *\n * When this message will be sent:\n * This message is used to provide explicit verification of a client\n * certificate. This message is only sent following a client\n * certificate that has signing capability (i.e. all certificates\n * except those containing fixed Diffie-Hellman parameters). When\n * sent, it will immediately follow the client key exchange message.\n *\n * struct {\n * Signature signature;\n * } CertificateVerify;\n *\n * CertificateVerify.signature.md5_hash\n * MD5(handshake_messages);\n *\n * Certificate.signature.sha_hash\n * SHA(handshake_messages);\n *\n * Here handshake_messages refers to all handshake messages sent or\n * received starting at client hello up to but not including this\n * message, including the type and length fields of the handshake\n * messages.\n *\n * select(SignatureAlgorithm) {\n * case anonymous: struct { };\n * case rsa:\n * digitally-signed struct {\n * opaque md5_hash[16];\n * opaque sha_hash[20];\n * };\n * case dsa:\n * digitally-signed struct {\n * opaque sha_hash[20];\n * };\n * } Signature;\n *\n * In digital signing, one-way hash functions are used as input for a\n * signing algorithm. A digitally-signed element is encoded as an opaque\n * vector <0..2^16-1>, where the length is specified by the signing\n * algorithm and key.\n *\n * In RSA signing, a 36-byte structure of two hashes (one SHA and one\n * MD5) is signed (encrypted with the private key). It is encoded with\n * PKCS #1 block type 0 or type 1 as described in [PKCS1].\n *\n * In DSS, the 20 bytes of the SHA hash are run directly through the\n * Digital Signing Algorithm with no additional hashing.\n *\n * @param c the connection.\n * @param signature the signature to include in the message.\n *\n * @return the CertificateVerify byte buffer.\n */\ntls.createCertificateVerify = function(c, signature) {\n /* Note: The signature will be stored in a \"digitally-signed\" opaque\n vector that has the length prefixed using 2 bytes, so include those\n 2 bytes in the handshake message length. This is done as a minor\n optimization instead of calling writeVector(). */\n\n // determine length of the handshake message\n var length = signature.length + 2;\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.certificate_verify);\n rval.putInt24(length);\n // add vector length bytes\n rval.putInt16(signature.length);\n rval.putBytes(signature);\n return rval;\n};\n\n/**\n * Creates a CertificateRequest message.\n *\n * @param c the connection.\n *\n * @return the CertificateRequest byte buffer.\n */\ntls.createCertificateRequest = function(c) {\n // TODO: support other certificate types\n var certTypes = forge.util.createBuffer();\n\n // common RSA certificate type\n certTypes.putByte(0x01);\n\n // add distinguished names from CA store\n var cAs = forge.util.createBuffer();\n for(var key in c.caStore.certs) {\n var cert = c.caStore.certs[key];\n var dn = forge.pki.distinguishedNameToAsn1(cert.subject);\n var byteBuffer = forge.asn1.toDer(dn);\n cAs.putInt16(byteBuffer.length());\n cAs.putBuffer(byteBuffer);\n }\n\n // TODO: TLS 1.2+ has a different format\n\n // determine length of the handshake message\n var length =\n 1 + certTypes.length() +\n 2 + cAs.length();\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.certificate_request);\n rval.putInt24(length);\n writeVector(rval, 1, certTypes);\n writeVector(rval, 2, cAs);\n return rval;\n};\n\n/**\n * Creates a ServerHelloDone message.\n *\n * @param c the connection.\n *\n * @return the ServerHelloDone byte buffer.\n */\ntls.createServerHelloDone = function(c) {\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.server_hello_done);\n rval.putInt24(0);\n return rval;\n};\n\n/**\n * Creates a ChangeCipherSpec message.\n *\n * The change cipher spec protocol exists to signal transitions in\n * ciphering strategies. The protocol consists of a single message,\n * which is encrypted and compressed under the current (not the pending)\n * connection state. The message consists of a single byte of value 1.\n *\n * struct {\n * enum { change_cipher_spec(1), (255) } type;\n * } ChangeCipherSpec;\n *\n * @return the ChangeCipherSpec byte buffer.\n */\ntls.createChangeCipherSpec = function() {\n var rval = forge.util.createBuffer();\n rval.putByte(0x01);\n return rval;\n};\n\n/**\n * Creates a Finished message.\n *\n * struct {\n * opaque verify_data[12];\n * } Finished;\n *\n * verify_data\n * PRF(master_secret, finished_label, MD5(handshake_messages) +\n * SHA-1(handshake_messages)) [0..11];\n *\n * finished_label\n * For Finished messages sent by the client, the string \"client\n * finished\". For Finished messages sent by the server, the\n * string \"server finished\".\n *\n * handshake_messages\n * All of the data from all handshake messages up to but not\n * including this message. This is only data visible at the\n * handshake layer and does not include record layer headers.\n * This is the concatenation of all the Handshake structures as\n * defined in 7.4 exchanged thus far.\n *\n * @param c the connection.\n *\n * @return the Finished byte buffer.\n */\ntls.createFinished = function(c) {\n // generate verify_data\n var b = forge.util.createBuffer();\n b.putBuffer(c.session.md5.digest());\n b.putBuffer(c.session.sha1.digest());\n\n // TODO: determine prf function and verify length for TLS 1.2\n var client = (c.entity === tls.ConnectionEnd.client);\n var sp = c.session.sp;\n var vdl = 12;\n var prf = prf_TLS1;\n var label = client ? 'client finished' : 'server finished';\n b = prf(sp.master_secret, label, b.getBytes(), vdl);\n\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(tls.HandshakeType.finished);\n rval.putInt24(b.length());\n rval.putBuffer(b);\n return rval;\n};\n\n/**\n * Creates a HeartbeatMessage (See RFC 6520).\n *\n * struct {\n * HeartbeatMessageType type;\n * uint16 payload_length;\n * opaque payload[HeartbeatMessage.payload_length];\n * opaque padding[padding_length];\n * } HeartbeatMessage;\n *\n * The total length of a HeartbeatMessage MUST NOT exceed 2^14 or\n * max_fragment_length when negotiated as defined in [RFC6066].\n *\n * type: The message type, either heartbeat_request or heartbeat_response.\n *\n * payload_length: The length of the payload.\n *\n * payload: The payload consists of arbitrary content.\n *\n * padding: The padding is random content that MUST be ignored by the\n * receiver. The length of a HeartbeatMessage is TLSPlaintext.length\n * for TLS and DTLSPlaintext.length for DTLS. Furthermore, the\n * length of the type field is 1 byte, and the length of the\n * payload_length is 2. Therefore, the padding_length is\n * TLSPlaintext.length - payload_length - 3 for TLS and\n * DTLSPlaintext.length - payload_length - 3 for DTLS. The\n * padding_length MUST be at least 16.\n *\n * The sender of a HeartbeatMessage MUST use a random padding of at\n * least 16 bytes. The padding of a received HeartbeatMessage message\n * MUST be ignored.\n *\n * If the payload_length of a received HeartbeatMessage is too large,\n * the received HeartbeatMessage MUST be discarded silently.\n *\n * @param c the connection.\n * @param type the tls.HeartbeatMessageType.\n * @param payload the heartbeat data to send as the payload.\n * @param [payloadLength] the payload length to use, defaults to the\n * actual payload length.\n *\n * @return the HeartbeatRequest byte buffer.\n */\ntls.createHeartbeat = function(type, payload, payloadLength) {\n if(typeof payloadLength === 'undefined') {\n payloadLength = payload.length;\n }\n // build record fragment\n var rval = forge.util.createBuffer();\n rval.putByte(type); // heartbeat message type\n rval.putInt16(payloadLength); // payload length\n rval.putBytes(payload); // payload\n // padding\n var plaintextLength = rval.length();\n var paddingLength = Math.max(16, plaintextLength - payloadLength - 3);\n rval.putBytes(forge.random.getBytes(paddingLength));\n return rval;\n};\n\n/**\n * Fragments, compresses, encrypts, and queues a record for delivery.\n *\n * @param c the connection.\n * @param record the record to queue.\n */\ntls.queue = function(c, record) {\n // error during record creation\n if(!record) {\n return;\n }\n\n if(record.fragment.length() === 0) {\n if(record.type === tls.ContentType.handshake ||\n record.type === tls.ContentType.alert ||\n record.type === tls.ContentType.change_cipher_spec) {\n // Empty handshake, alert of change cipher spec messages are not allowed per the TLS specification and should not be sent.\n return;\n }\n }\n\n // if the record is a handshake record, update handshake hashes\n if(record.type === tls.ContentType.handshake) {\n var bytes = record.fragment.bytes();\n c.session.md5.update(bytes);\n c.session.sha1.update(bytes);\n bytes = null;\n }\n\n // handle record fragmentation\n var records;\n if(record.fragment.length() <= tls.MaxFragment) {\n records = [record];\n } else {\n // fragment data as long as it is too long\n records = [];\n var data = record.fragment.bytes();\n while(data.length > tls.MaxFragment) {\n records.push(tls.createRecord(c, {\n type: record.type,\n data: forge.util.createBuffer(data.slice(0, tls.MaxFragment))\n }));\n data = data.slice(tls.MaxFragment);\n }\n // add last record\n if(data.length > 0) {\n records.push(tls.createRecord(c, {\n type: record.type,\n data: forge.util.createBuffer(data)\n }));\n }\n }\n\n // compress and encrypt all fragmented records\n for(var i = 0; i < records.length && !c.fail; ++i) {\n // update the record using current write state\n var rec = records[i];\n var s = c.state.current.write;\n if(s.update(c, rec)) {\n // store record\n c.records.push(rec);\n }\n }\n};\n\n/**\n * Flushes all queued records to the output buffer and calls the\n * tlsDataReady() handler on the given connection.\n *\n * @param c the connection.\n *\n * @return true on success, false on failure.\n */\ntls.flush = function(c) {\n for(var i = 0; i < c.records.length; ++i) {\n var record = c.records[i];\n\n // add record header and fragment\n c.tlsData.putByte(record.type);\n c.tlsData.putByte(record.version.major);\n c.tlsData.putByte(record.version.minor);\n c.tlsData.putInt16(record.fragment.length());\n c.tlsData.putBuffer(c.records[i].fragment);\n }\n c.records = [];\n return c.tlsDataReady(c);\n};\n\n/**\n * Maps a pki.certificateError to a tls.Alert.Description.\n *\n * @param error the error to map.\n *\n * @return the alert description.\n */\nvar _certErrorToAlertDesc = function(error) {\n switch(error) {\n case true:\n return true;\n case forge.pki.certificateError.bad_certificate:\n return tls.Alert.Description.bad_certificate;\n case forge.pki.certificateError.unsupported_certificate:\n return tls.Alert.Description.unsupported_certificate;\n case forge.pki.certificateError.certificate_revoked:\n return tls.Alert.Description.certificate_revoked;\n case forge.pki.certificateError.certificate_expired:\n return tls.Alert.Description.certificate_expired;\n case forge.pki.certificateError.certificate_unknown:\n return tls.Alert.Description.certificate_unknown;\n case forge.pki.certificateError.unknown_ca:\n return tls.Alert.Description.unknown_ca;\n default:\n return tls.Alert.Description.bad_certificate;\n }\n};\n\n/**\n * Maps a tls.Alert.Description to a pki.certificateError.\n *\n * @param desc the alert description.\n *\n * @return the certificate error.\n */\nvar _alertDescToCertError = function(desc) {\n switch(desc) {\n case true:\n return true;\n case tls.Alert.Description.bad_certificate:\n return forge.pki.certificateError.bad_certificate;\n case tls.Alert.Description.unsupported_certificate:\n return forge.pki.certificateError.unsupported_certificate;\n case tls.Alert.Description.certificate_revoked:\n return forge.pki.certificateError.certificate_revoked;\n case tls.Alert.Description.certificate_expired:\n return forge.pki.certificateError.certificate_expired;\n case tls.Alert.Description.certificate_unknown:\n return forge.pki.certificateError.certificate_unknown;\n case tls.Alert.Description.unknown_ca:\n return forge.pki.certificateError.unknown_ca;\n default:\n return forge.pki.certificateError.bad_certificate;\n }\n};\n\n/**\n * Verifies a certificate chain against the given connection's\n * Certificate Authority store.\n *\n * @param c the TLS connection.\n * @param chain the certificate chain to verify, with the root or highest\n * authority at the end.\n *\n * @return true if successful, false if not.\n */\ntls.verifyCertificateChain = function(c, chain) {\n try {\n // Make a copy of c.verifyOptions so that we can modify options.verify\n // without modifying c.verifyOptions.\n var options = {};\n for (var key in c.verifyOptions) {\n options[key] = c.verifyOptions[key];\n }\n\n options.verify = function(vfd, depth, chain) {\n // convert pki.certificateError to tls alert description\n var desc = _certErrorToAlertDesc(vfd);\n\n // call application callback\n var ret = c.verify(c, vfd, depth, chain);\n if(ret !== true) {\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n // throw custom error\n var error = new Error('The application rejected the certificate.');\n error.send = true;\n error.alert = {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.bad_certificate\n };\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.alert) {\n error.alert.description = ret.alert;\n }\n throw error;\n }\n\n // convert tls alert description to pki.certificateError\n if(ret !== vfd) {\n ret = _alertDescToCertError(ret);\n }\n }\n\n return ret;\n };\n\n // verify chain\n forge.pki.verifyCertificateChain(c.caStore, chain, options);\n } catch(ex) {\n // build tls error if not already customized\n var err = ex;\n if(typeof err !== 'object' || forge.util.isArray(err)) {\n err = {\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: _certErrorToAlertDesc(ex)\n }\n };\n }\n if(!('send' in err)) {\n err.send = true;\n }\n if(!('alert' in err)) {\n err.alert = {\n level: tls.Alert.Level.fatal,\n description: _certErrorToAlertDesc(err.error)\n };\n }\n\n // send error\n c.error(c, err);\n }\n\n return !c.fail;\n};\n\n/**\n * Creates a new TLS session cache.\n *\n * @param cache optional map of session ID to cached session.\n * @param capacity the maximum size for the cache (default: 100).\n *\n * @return the new TLS session cache.\n */\ntls.createSessionCache = function(cache, capacity) {\n var rval = null;\n\n // assume input is already a session cache object\n if(cache && cache.getSession && cache.setSession && cache.order) {\n rval = cache;\n } else {\n // create cache\n rval = {};\n rval.cache = cache || {};\n rval.capacity = Math.max(capacity || 100, 1);\n rval.order = [];\n\n // store order for sessions, delete session overflow\n for(var key in cache) {\n if(rval.order.length <= capacity) {\n rval.order.push(key);\n } else {\n delete cache[key];\n }\n }\n\n // get a session from a session ID (or get any session)\n rval.getSession = function(sessionId) {\n var session = null;\n var key = null;\n\n // if session ID provided, use it\n if(sessionId) {\n key = forge.util.bytesToHex(sessionId);\n } else if(rval.order.length > 0) {\n // get first session from cache\n key = rval.order[0];\n }\n\n if(key !== null && key in rval.cache) {\n // get cached session and remove from cache\n session = rval.cache[key];\n delete rval.cache[key];\n for(var i in rval.order) {\n if(rval.order[i] === key) {\n rval.order.splice(i, 1);\n break;\n }\n }\n }\n\n return session;\n };\n\n // set a session in the cache\n rval.setSession = function(sessionId, session) {\n // remove session from cache if at capacity\n if(rval.order.length === rval.capacity) {\n var key = rval.order.shift();\n delete rval.cache[key];\n }\n // add session to cache\n var key = forge.util.bytesToHex(sessionId);\n rval.order.push(key);\n rval.cache[key] = session;\n };\n }\n\n return rval;\n};\n\n/**\n * Creates a new TLS connection.\n *\n * See public createConnection() docs for more details.\n *\n * @param options the options for this connection.\n *\n * @return the new TLS connection.\n */\ntls.createConnection = function(options) {\n var caStore = null;\n if(options.caStore) {\n // if CA store is an array, convert it to a CA store object\n if(forge.util.isArray(options.caStore)) {\n caStore = forge.pki.createCaStore(options.caStore);\n } else {\n caStore = options.caStore;\n }\n } else {\n // create empty CA store\n caStore = forge.pki.createCaStore();\n }\n\n // setup default cipher suites\n var cipherSuites = options.cipherSuites || null;\n if(cipherSuites === null) {\n cipherSuites = [];\n for(var key in tls.CipherSuites) {\n cipherSuites.push(tls.CipherSuites[key]);\n }\n }\n\n // set default entity\n var entity = (options.server || false) ?\n tls.ConnectionEnd.server : tls.ConnectionEnd.client;\n\n // create session cache if requested\n var sessionCache = options.sessionCache ?\n tls.createSessionCache(options.sessionCache) : null;\n\n // create TLS connection\n var c = {\n version: {major: tls.Version.major, minor: tls.Version.minor},\n entity: entity,\n sessionId: options.sessionId,\n caStore: caStore,\n sessionCache: sessionCache,\n cipherSuites: cipherSuites,\n connected: options.connected,\n virtualHost: options.virtualHost || null,\n verifyClient: options.verifyClient || false,\n verify: options.verify || function(cn, vfd, dpth, cts) {return vfd;},\n verifyOptions: options.verifyOptions || {},\n getCertificate: options.getCertificate || null,\n getPrivateKey: options.getPrivateKey || null,\n getSignature: options.getSignature || null,\n input: forge.util.createBuffer(),\n tlsData: forge.util.createBuffer(),\n data: forge.util.createBuffer(),\n tlsDataReady: options.tlsDataReady,\n dataReady: options.dataReady,\n heartbeatReceived: options.heartbeatReceived,\n closed: options.closed,\n error: function(c, ex) {\n // set origin if not set\n ex.origin = ex.origin ||\n ((c.entity === tls.ConnectionEnd.client) ? 'client' : 'server');\n\n // send TLS alert\n if(ex.send) {\n tls.queue(c, tls.createAlert(c, ex.alert));\n tls.flush(c);\n }\n\n // error is fatal by default\n var fatal = (ex.fatal !== false);\n if(fatal) {\n // set fail flag\n c.fail = true;\n }\n\n // call error handler first\n options.error(c, ex);\n\n if(fatal) {\n // fatal error, close connection, do not clear fail\n c.close(false);\n }\n },\n deflate: options.deflate || null,\n inflate: options.inflate || null\n };\n\n /**\n * Resets a closed TLS connection for reuse. Called in c.close().\n *\n * @param clearFail true to clear the fail flag (default: true).\n */\n c.reset = function(clearFail) {\n c.version = {major: tls.Version.major, minor: tls.Version.minor};\n c.record = null;\n c.session = null;\n c.peerCertificate = null;\n c.state = {\n pending: null,\n current: null\n };\n c.expect = (c.entity === tls.ConnectionEnd.client) ? SHE : CHE;\n c.fragmented = null;\n c.records = [];\n c.open = false;\n c.handshakes = 0;\n c.handshaking = false;\n c.isConnected = false;\n c.fail = !(clearFail || typeof(clearFail) === 'undefined');\n c.input.clear();\n c.tlsData.clear();\n c.data.clear();\n c.state.current = tls.createConnectionState(c);\n };\n\n // do initial reset of connection\n c.reset();\n\n /**\n * Updates the current TLS engine state based on the given record.\n *\n * @param c the TLS connection.\n * @param record the TLS record to act on.\n */\n var _update = function(c, record) {\n // get record handler (align type in table by subtracting lowest)\n var aligned = record.type - tls.ContentType.change_cipher_spec;\n var handlers = ctTable[c.entity][c.expect];\n if(aligned in handlers) {\n handlers[aligned](c, record);\n } else {\n // unexpected record\n tls.handleUnexpected(c, record);\n }\n };\n\n /**\n * Reads the record header and initializes the next record on the given\n * connection.\n *\n * @param c the TLS connection with the next record.\n *\n * @return 0 if the input data could be processed, otherwise the\n * number of bytes required for data to be processed.\n */\n var _readRecordHeader = function(c) {\n var rval = 0;\n\n // get input buffer and its length\n var b = c.input;\n var len = b.length();\n\n // need at least 5 bytes to initialize a record\n if(len < 5) {\n rval = 5 - len;\n } else {\n // enough bytes for header\n // initialize record\n c.record = {\n type: b.getByte(),\n version: {\n major: b.getByte(),\n minor: b.getByte()\n },\n length: b.getInt16(),\n fragment: forge.util.createBuffer(),\n ready: false\n };\n\n // check record version\n var compatibleVersion = (c.record.version.major === c.version.major);\n if(compatibleVersion && c.session && c.session.version) {\n // session version already set, require same minor version\n compatibleVersion = (c.record.version.minor === c.version.minor);\n }\n if(!compatibleVersion) {\n c.error(c, {\n message: 'Incompatible TLS version.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description: tls.Alert.Description.protocol_version\n }\n });\n }\n }\n\n return rval;\n };\n\n /**\n * Reads the next record's contents and appends its message to any\n * previously fragmented message.\n *\n * @param c the TLS connection with the next record.\n *\n * @return 0 if the input data could be processed, otherwise the\n * number of bytes required for data to be processed.\n */\n var _readRecord = function(c) {\n var rval = 0;\n\n // ensure there is enough input data to get the entire record\n var b = c.input;\n var len = b.length();\n if(len < c.record.length) {\n // not enough data yet, return how much is required\n rval = c.record.length - len;\n } else {\n // there is enough data to parse the pending record\n // fill record fragment and compact input buffer\n c.record.fragment.putBytes(b.getBytes(c.record.length));\n b.compact();\n\n // update record using current read state\n var s = c.state.current.read;\n if(s.update(c, c.record)) {\n // see if there is a previously fragmented message that the\n // new record's message fragment should be appended to\n if(c.fragmented !== null) {\n // if the record type matches a previously fragmented\n // record, append the record fragment to it\n if(c.fragmented.type === c.record.type) {\n // concatenate record fragments\n c.fragmented.fragment.putBuffer(c.record.fragment);\n c.record = c.fragmented;\n } else {\n // error, invalid fragmented record\n c.error(c, {\n message: 'Invalid fragmented record.',\n send: true,\n alert: {\n level: tls.Alert.Level.fatal,\n description:\n tls.Alert.Description.unexpected_message\n }\n });\n }\n }\n\n // record is now ready\n c.record.ready = true;\n }\n }\n\n return rval;\n };\n\n /**\n * Performs a handshake using the TLS Handshake Protocol, as a client.\n *\n * This method should only be called if the connection is in client mode.\n *\n * @param sessionId the session ID to use, null to start a new one.\n */\n c.handshake = function(sessionId) {\n // error to call this in non-client mode\n if(c.entity !== tls.ConnectionEnd.client) {\n // not fatal error\n c.error(c, {\n message: 'Cannot initiate handshake as a server.',\n fatal: false\n });\n } else if(c.handshaking) {\n // handshake is already in progress, fail but not fatal error\n c.error(c, {\n message: 'Handshake already in progress.',\n fatal: false\n });\n } else {\n // clear fail flag on reuse\n if(c.fail && !c.open && c.handshakes === 0) {\n c.fail = false;\n }\n\n // now handshaking\n c.handshaking = true;\n\n // default to blank (new session)\n sessionId = sessionId || '';\n\n // if a session ID was specified, try to find it in the cache\n var session = null;\n if(sessionId.length > 0) {\n if(c.sessionCache) {\n session = c.sessionCache.getSession(sessionId);\n }\n\n // matching session not found in cache, clear session ID\n if(session === null) {\n sessionId = '';\n }\n }\n\n // no session given, grab a session from the cache, if available\n if(sessionId.length === 0 && c.sessionCache) {\n session = c.sessionCache.getSession();\n if(session !== null) {\n sessionId = session.id;\n }\n }\n\n // set up session\n c.session = {\n id: sessionId,\n version: null,\n cipherSuite: null,\n compressionMethod: null,\n serverCertificate: null,\n certificateRequest: null,\n clientCertificate: null,\n sp: {},\n md5: forge.md.md5.create(),\n sha1: forge.md.sha1.create()\n };\n\n // use existing session information\n if(session) {\n // only update version on connection, session version not yet set\n c.version = session.version;\n c.session.sp = session.sp;\n }\n\n // generate new client random\n c.session.sp.client_random = tls.createRandom().getBytes();\n\n // connection now open\n c.open = true;\n\n // send hello\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.handshake,\n data: tls.createClientHello(c)\n }));\n tls.flush(c);\n }\n };\n\n /**\n * Called when TLS protocol data has been received from somewhere and should\n * be processed by the TLS engine.\n *\n * @param data the TLS protocol data, as a string, to process.\n *\n * @return 0 if the data could be processed, otherwise the number of bytes\n * required for data to be processed.\n */\n c.process = function(data) {\n var rval = 0;\n\n // buffer input data\n if(data) {\n c.input.putBytes(data);\n }\n\n // process next record if no failure, process will be called after\n // each record is handled (since handling can be asynchronous)\n if(!c.fail) {\n // reset record if ready and now empty\n if(c.record !== null &&\n c.record.ready && c.record.fragment.isEmpty()) {\n c.record = null;\n }\n\n // if there is no pending record, try to read record header\n if(c.record === null) {\n rval = _readRecordHeader(c);\n }\n\n // read the next record (if record not yet ready)\n if(!c.fail && c.record !== null && !c.record.ready) {\n rval = _readRecord(c);\n }\n\n // record ready to be handled, update engine state\n if(!c.fail && c.record !== null && c.record.ready) {\n _update(c, c.record);\n }\n }\n\n return rval;\n };\n\n /**\n * Requests that application data be packaged into a TLS record. The\n * tlsDataReady handler will be called when the TLS record(s) have been\n * prepared.\n *\n * @param data the application data, as a raw 'binary' encoded string, to\n * be sent; to send utf-16/utf-8 string data, use the return value\n * of util.encodeUtf8(str).\n *\n * @return true on success, false on failure.\n */\n c.prepare = function(data) {\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.application_data,\n data: forge.util.createBuffer(data)\n }));\n return tls.flush(c);\n };\n\n /**\n * Requests that a heartbeat request be packaged into a TLS record for\n * transmission. The tlsDataReady handler will be called when TLS record(s)\n * have been prepared.\n *\n * When a heartbeat response has been received, the heartbeatReceived\n * handler will be called with the matching payload. This handler can\n * be used to clear a retransmission timer, etc.\n *\n * @param payload the heartbeat data to send as the payload in the message.\n * @param [payloadLength] the payload length to use, defaults to the\n * actual payload length.\n *\n * @return true on success, false on failure.\n */\n c.prepareHeartbeatRequest = function(payload, payloadLength) {\n if(payload instanceof forge.util.ByteBuffer) {\n payload = payload.bytes();\n }\n if(typeof payloadLength === 'undefined') {\n payloadLength = payload.length;\n }\n c.expectedHeartbeatPayload = payload;\n tls.queue(c, tls.createRecord(c, {\n type: tls.ContentType.heartbeat,\n data: tls.createHeartbeat(\n tls.HeartbeatMessageType.heartbeat_request, payload, payloadLength)\n }));\n return tls.flush(c);\n };\n\n /**\n * Closes the connection (sends a close_notify alert).\n *\n * @param clearFail true to clear the fail flag (default: true).\n */\n c.close = function(clearFail) {\n // save session if connection didn't fail\n if(!c.fail && c.sessionCache && c.session) {\n // only need to preserve session ID, version, and security params\n var session = {\n id: c.session.id,\n version: c.session.version,\n sp: c.session.sp\n };\n session.sp.keys = null;\n c.sessionCache.setSession(session.id, session);\n }\n\n if(c.open) {\n // connection no longer open, clear input\n c.open = false;\n c.input.clear();\n\n // if connected or handshaking, send an alert\n if(c.isConnected || c.handshaking) {\n c.isConnected = c.handshaking = false;\n\n // send close_notify alert\n tls.queue(c, tls.createAlert(c, {\n level: tls.Alert.Level.warning,\n description: tls.Alert.Description.close_notify\n }));\n tls.flush(c);\n }\n\n // call handler\n c.closed(c);\n }\n\n // reset TLS connection, do not clear fail flag\n c.reset(clearFail);\n };\n\n return c;\n};\n\n/* TLS API */\nmodule.exports = forge.tls = forge.tls || {};\n\n// expose non-functions\nfor(var key in tls) {\n if(typeof tls[key] !== 'function') {\n forge.tls[key] = tls[key];\n }\n}\n\n// expose prf_tls1 for testing\nforge.tls.prf_tls1 = prf_TLS1;\n\n// expose sha1 hmac method\nforge.tls.hmac_sha1 = hmac_sha1;\n\n// expose session cache creation\nforge.tls.createSessionCache = tls.createSessionCache;\n\n/**\n * Creates a new TLS connection. This does not make any assumptions about the\n * transport layer that TLS is working on top of, ie: it does not assume there\n * is a TCP/IP connection or establish one. A TLS connection is totally\n * abstracted away from the layer is runs on top of, it merely establishes a\n * secure channel between a client\" and a \"server\".\n *\n * A TLS connection contains 4 connection states: pending read and write, and\n * current read and write.\n *\n * At initialization, the current read and write states will be null. Only once\n * the security parameters have been set and the keys have been generated can\n * the pending states be converted into current states. Current states will be\n * updated for each record processed.\n *\n * A custom certificate verify callback may be provided to check information\n * like the common name on the server's certificate. It will be called for\n * every certificate in the chain. It has the following signature:\n *\n * variable func(c, certs, index, preVerify)\n * Where:\n * c The TLS connection\n * verified Set to true if certificate was verified, otherwise the alert\n * tls.Alert.Description for why the certificate failed.\n * depth The current index in the chain, where 0 is the server's cert.\n * certs The certificate chain, *NOTE* if the server was anonymous then\n * the chain will be empty.\n *\n * The function returns true on success and on failure either the appropriate\n * tls.Alert.Description or an object with 'alert' set to the appropriate\n * tls.Alert.Description and 'message' set to a custom error message. If true\n * is not returned then the connection will abort using, in order of\n * availability, first the returned alert description, second the preVerify\n * alert description, and lastly the default 'bad_certificate'.\n *\n * There are three callbacks that can be used to make use of client-side\n * certificates where each takes the TLS connection as the first parameter:\n *\n * getCertificate(conn, hint)\n * The second parameter is a hint as to which certificate should be\n * returned. If the connection entity is a client, then the hint will be\n * the CertificateRequest message from the server that is part of the\n * TLS protocol. If the connection entity is a server, then it will be\n * the servername list provided via an SNI extension the ClientHello, if\n * one was provided (empty array if not). The hint can be examined to\n * determine which certificate to use (advanced). Most implementations\n * will just return a certificate. The return value must be a\n * PEM-formatted certificate or an array of PEM-formatted certificates\n * that constitute a certificate chain, with the first in the array/chain\n * being the client's certificate.\n * getPrivateKey(conn, certificate)\n * The second parameter is an forge.pki X.509 certificate object that\n * is associated with the requested private key. The return value must\n * be a PEM-formatted private key.\n * getSignature(conn, bytes, callback)\n * This callback can be used instead of getPrivateKey if the private key\n * is not directly accessible in javascript or should not be. For\n * instance, a secure external web service could provide the signature\n * in exchange for appropriate credentials. The second parameter is a\n * string of bytes to be signed that are part of the TLS protocol. These\n * bytes are used to verify that the private key for the previously\n * provided client-side certificate is accessible to the client. The\n * callback is a function that takes 2 parameters, the TLS connection\n * and the RSA encrypted (signed) bytes as a string. This callback must\n * be called once the signature is ready.\n *\n * @param options the options for this connection:\n * server: true if the connection is server-side, false for client.\n * sessionId: a session ID to reuse, null for a new connection.\n * caStore: an array of certificates to trust.\n * sessionCache: a session cache to use.\n * cipherSuites: an optional array of cipher suites to use,\n * see tls.CipherSuites.\n * connected: function(conn) called when the first handshake completes.\n * virtualHost: the virtual server name to use in a TLS SNI extension.\n * verifyClient: true to require a client certificate in server mode,\n * 'optional' to request one, false not to (default: false).\n * verify: a handler used to custom verify certificates in the chain.\n * verifyOptions: an object with options for the certificate chain validation.\n * See documentation of pki.verifyCertificateChain for possible options.\n * verifyOptions.verify is ignored. If you wish to specify a verify handler\n * use the verify key.\n * getCertificate: an optional callback used to get a certificate or\n * a chain of certificates (as an array).\n * getPrivateKey: an optional callback used to get a private key.\n * getSignature: an optional callback used to get a signature.\n * tlsDataReady: function(conn) called when TLS protocol data has been\n * prepared and is ready to be used (typically sent over a socket\n * connection to its destination), read from conn.tlsData buffer.\n * dataReady: function(conn) called when application data has\n * been parsed from a TLS record and should be consumed by the\n * application, read from conn.data buffer.\n * closed: function(conn) called when the connection has been closed.\n * error: function(conn, error) called when there was an error.\n * deflate: function(inBytes) if provided, will deflate TLS records using\n * the deflate algorithm if the server supports it.\n * inflate: function(inBytes) if provided, will inflate TLS records using\n * the deflate algorithm if the server supports it.\n *\n * @return the new TLS connection.\n */\nforge.tls.createConnection = tls.createConnection;\n","/**\n * Utility functions for web applications.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2018 Digital Bazaar, Inc.\n */\nvar forge = require('./forge');\nvar baseN = require('./baseN');\n\n/* Utilities API */\nvar util = module.exports = forge.util = forge.util || {};\n\n// define setImmediate and nextTick\n(function() {\n // use native nextTick (unless we're in webpack)\n // webpack (or better node-libs-browser polyfill) sets process.browser.\n // this way we can detect webpack properly\n if(typeof process !== 'undefined' && process.nextTick && !process.browser) {\n util.nextTick = process.nextTick;\n if(typeof setImmediate === 'function') {\n util.setImmediate = setImmediate;\n } else {\n // polyfill setImmediate with nextTick, older versions of node\n // (those w/o setImmediate) won't totally starve IO\n util.setImmediate = util.nextTick;\n }\n return;\n }\n\n // polyfill nextTick with native setImmediate\n if(typeof setImmediate === 'function') {\n util.setImmediate = function() { return setImmediate.apply(undefined, arguments); };\n util.nextTick = function(callback) {\n return setImmediate(callback);\n };\n return;\n }\n\n /* Note: A polyfill upgrade pattern is used here to allow combining\n polyfills. For example, MutationObserver is fast, but blocks UI updates,\n so it needs to allow UI updates periodically, so it falls back on\n postMessage or setTimeout. */\n\n // polyfill with setTimeout\n util.setImmediate = function(callback) {\n setTimeout(callback, 0);\n };\n\n // upgrade polyfill to use postMessage\n if(typeof window !== 'undefined' &&\n typeof window.postMessage === 'function') {\n var msg = 'forge.setImmediate';\n var callbacks = [];\n util.setImmediate = function(callback) {\n callbacks.push(callback);\n // only send message when one hasn't been sent in\n // the current turn of the event loop\n if(callbacks.length === 1) {\n window.postMessage(msg, '*');\n }\n };\n function handler(event) {\n if(event.source === window && event.data === msg) {\n event.stopPropagation();\n var copy = callbacks.slice();\n callbacks.length = 0;\n copy.forEach(function(callback) {\n callback();\n });\n }\n }\n window.addEventListener('message', handler, true);\n }\n\n // upgrade polyfill to use MutationObserver\n if(typeof MutationObserver !== 'undefined') {\n // polyfill with MutationObserver\n var now = Date.now();\n var attr = true;\n var div = document.createElement('div');\n var callbacks = [];\n new MutationObserver(function() {\n var copy = callbacks.slice();\n callbacks.length = 0;\n copy.forEach(function(callback) {\n callback();\n });\n }).observe(div, {attributes: true});\n var oldSetImmediate = util.setImmediate;\n util.setImmediate = function(callback) {\n if(Date.now() - now > 15) {\n now = Date.now();\n oldSetImmediate(callback);\n } else {\n callbacks.push(callback);\n // only trigger observer when it hasn't been triggered in\n // the current turn of the event loop\n if(callbacks.length === 1) {\n div.setAttribute('a', attr = !attr);\n }\n }\n };\n }\n\n util.nextTick = util.setImmediate;\n})();\n\n// check if running under Node.js\nutil.isNodejs =\n typeof process !== 'undefined' && process.versions && process.versions.node;\n\n\n// 'self' will also work in Web Workers (instance of WorkerGlobalScope) while\n// it will point to `window` in the main thread.\n// To remain compatible with older browsers, we fall back to 'window' if 'self'\n// is not available.\nutil.globalScope = (function() {\n if(util.isNodejs) {\n return global;\n }\n\n return typeof self === 'undefined' ? window : self;\n})();\n\n// define isArray\nutil.isArray = Array.isArray || function(x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n};\n\n// define isArrayBuffer\nutil.isArrayBuffer = function(x) {\n return typeof ArrayBuffer !== 'undefined' && x instanceof ArrayBuffer;\n};\n\n// define isArrayBufferView\nutil.isArrayBufferView = function(x) {\n return x && util.isArrayBuffer(x.buffer) && x.byteLength !== undefined;\n};\n\n/**\n * Ensure a bits param is 8, 16, 24, or 32. Used to validate input for\n * algorithms where bit manipulation, JavaScript limitations, and/or algorithm\n * design only allow for byte operations of a limited size.\n *\n * @param n number of bits.\n *\n * Throw Error if n invalid.\n */\nfunction _checkBitsParam(n) {\n if(!(n === 8 || n === 16 || n === 24 || n === 32)) {\n throw new Error('Only 8, 16, 24, or 32 bits supported: ' + n);\n }\n}\n\n// TODO: set ByteBuffer to best available backing\nutil.ByteBuffer = ByteStringBuffer;\n\n/** Buffer w/BinaryString backing */\n\n/**\n * Constructor for a binary string backed byte buffer.\n *\n * @param [b] the bytes to wrap (either encoded as string, one byte per\n * character, or as an ArrayBuffer or Typed Array).\n */\nfunction ByteStringBuffer(b) {\n // TODO: update to match DataBuffer API\n\n // the data in this buffer\n this.data = '';\n // the pointer for reading from this buffer\n this.read = 0;\n\n if(typeof b === 'string') {\n this.data = b;\n } else if(util.isArrayBuffer(b) || util.isArrayBufferView(b)) {\n if(typeof Buffer !== 'undefined' && b instanceof Buffer) {\n this.data = b.toString('binary');\n } else {\n // convert native buffer to forge buffer\n // FIXME: support native buffers internally instead\n var arr = new Uint8Array(b);\n try {\n this.data = String.fromCharCode.apply(null, arr);\n } catch(e) {\n for(var i = 0; i < arr.length; ++i) {\n this.putByte(arr[i]);\n }\n }\n }\n } else if(b instanceof ByteStringBuffer ||\n (typeof b === 'object' && typeof b.data === 'string' &&\n typeof b.read === 'number')) {\n // copy existing buffer\n this.data = b.data;\n this.read = b.read;\n }\n\n // used for v8 optimization\n this._constructedStringLength = 0;\n}\nutil.ByteStringBuffer = ByteStringBuffer;\n\n/* Note: This is an optimization for V8-based browsers. When V8 concatenates\n a string, the strings are only joined logically using a \"cons string\" or\n \"constructed/concatenated string\". These containers keep references to one\n another and can result in very large memory usage. For example, if a 2MB\n string is constructed by concatenating 4 bytes together at a time, the\n memory usage will be ~44MB; so ~22x increase. The strings are only joined\n together when an operation requiring their joining takes place, such as\n substr(). This function is called when adding data to this buffer to ensure\n these types of strings are periodically joined to reduce the memory\n footprint. */\nvar _MAX_CONSTRUCTED_STRING_LENGTH = 4096;\nutil.ByteStringBuffer.prototype._optimizeConstructedString = function(x) {\n this._constructedStringLength += x;\n if(this._constructedStringLength > _MAX_CONSTRUCTED_STRING_LENGTH) {\n // this substr() should cause the constructed string to join\n this.data.substr(0, 1);\n this._constructedStringLength = 0;\n }\n};\n\n/**\n * Gets the number of bytes in this buffer.\n *\n * @return the number of bytes in this buffer.\n */\nutil.ByteStringBuffer.prototype.length = function() {\n return this.data.length - this.read;\n};\n\n/**\n * Gets whether or not this buffer is empty.\n *\n * @return true if this buffer is empty, false if not.\n */\nutil.ByteStringBuffer.prototype.isEmpty = function() {\n return this.length() <= 0;\n};\n\n/**\n * Puts a byte in this buffer.\n *\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putByte = function(b) {\n return this.putBytes(String.fromCharCode(b));\n};\n\n/**\n * Puts a byte in this buffer N times.\n *\n * @param b the byte to put.\n * @param n the number of bytes of value b to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.fillWithByte = function(b, n) {\n b = String.fromCharCode(b);\n var d = this.data;\n while(n > 0) {\n if(n & 1) {\n d += b;\n }\n n >>>= 1;\n if(n > 0) {\n b += b;\n }\n }\n this.data = d;\n this._optimizeConstructedString(n);\n return this;\n};\n\n/**\n * Puts bytes in this buffer.\n *\n * @param bytes the bytes (as a binary encoded string) to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putBytes = function(bytes) {\n this.data += bytes;\n this._optimizeConstructedString(bytes.length);\n return this;\n};\n\n/**\n * Puts a UTF-16 encoded string into this buffer.\n *\n * @param str the string to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putString = function(str) {\n return this.putBytes(util.encodeUtf8(str));\n};\n\n/**\n * Puts a 16-bit integer in this buffer in big-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt16 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 24-bit integer in this buffer in big-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt24 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 32-bit integer in this buffer in big-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt32 = function(i) {\n return this.putBytes(\n String.fromCharCode(i >> 24 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n/**\n * Puts a 16-bit integer in this buffer in little-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt16Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF));\n};\n\n/**\n * Puts a 24-bit integer in this buffer in little-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt24Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF));\n};\n\n/**\n * Puts a 32-bit integer in this buffer in little-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt32Le = function(i) {\n return this.putBytes(\n String.fromCharCode(i & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 24 & 0xFF));\n};\n\n/**\n * Puts an n-bit integer in this buffer in big-endian order.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putInt = function(i, n) {\n _checkBitsParam(n);\n var bytes = '';\n do {\n n -= 8;\n bytes += String.fromCharCode((i >> n) & 0xFF);\n } while(n > 0);\n return this.putBytes(bytes);\n};\n\n/**\n * Puts a signed n-bit integer in this buffer in big-endian order. Two's\n * complement representation is used.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putSignedInt = function(i, n) {\n // putInt checks n\n if(i < 0) {\n i += 2 << (n - 1);\n }\n return this.putInt(i, n);\n};\n\n/**\n * Puts the given buffer into this buffer.\n *\n * @param buffer the buffer to put into this one.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.putBuffer = function(buffer) {\n return this.putBytes(buffer.getBytes());\n};\n\n/**\n * Gets a byte from this buffer and advances the read pointer by 1.\n *\n * @return the byte.\n */\nutil.ByteStringBuffer.prototype.getByte = function() {\n return this.data.charCodeAt(this.read++);\n};\n\n/**\n * Gets a uint16 from this buffer in big-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.ByteStringBuffer.prototype.getInt16 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 8 ^\n this.data.charCodeAt(this.read + 1));\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in big-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.ByteStringBuffer.prototype.getInt24 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 16 ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2));\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in big-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.ByteStringBuffer.prototype.getInt32 = function() {\n var rval = (\n this.data.charCodeAt(this.read) << 24 ^\n this.data.charCodeAt(this.read + 1) << 16 ^\n this.data.charCodeAt(this.read + 2) << 8 ^\n this.data.charCodeAt(this.read + 3));\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets a uint16 from this buffer in little-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.ByteStringBuffer.prototype.getInt16Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in little-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.ByteStringBuffer.prototype.getInt24Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2) << 16);\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in little-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.ByteStringBuffer.prototype.getInt32Le = function() {\n var rval = (\n this.data.charCodeAt(this.read) ^\n this.data.charCodeAt(this.read + 1) << 8 ^\n this.data.charCodeAt(this.read + 2) << 16 ^\n this.data.charCodeAt(this.read + 3) << 24);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets an n-bit integer from this buffer in big-endian order and advances the\n * read pointer by ceil(n/8).\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.ByteStringBuffer.prototype.getInt = function(n) {\n _checkBitsParam(n);\n var rval = 0;\n do {\n // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.\n rval = (rval << 8) + this.data.charCodeAt(this.read++);\n n -= 8;\n } while(n > 0);\n return rval;\n};\n\n/**\n * Gets a signed n-bit integer from this buffer in big-endian order, using\n * two's complement, and advances the read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.ByteStringBuffer.prototype.getSignedInt = function(n) {\n // getInt checks n\n var x = this.getInt(n);\n var max = 2 << (n - 2);\n if(x >= max) {\n x -= max << 1;\n }\n return x;\n};\n\n/**\n * Reads bytes out as a binary encoded string and clears them from the\n * buffer. Note that the resulting string is binary encoded (in node.js this\n * encoding is referred to as `binary`, it is *not* `utf8`).\n *\n * @param count the number of bytes to read, undefined or null for all.\n *\n * @return a binary encoded string of bytes.\n */\nutil.ByteStringBuffer.prototype.getBytes = function(count) {\n var rval;\n if(count) {\n // read count bytes\n count = Math.min(this.length(), count);\n rval = this.data.slice(this.read, this.read + count);\n this.read += count;\n } else if(count === 0) {\n rval = '';\n } else {\n // read all bytes, optimize to only copy when needed\n rval = (this.read === 0) ? this.data : this.data.slice(this.read);\n this.clear();\n }\n return rval;\n};\n\n/**\n * Gets a binary encoded string of the bytes from this buffer without\n * modifying the read pointer.\n *\n * @param count the number of bytes to get, omit to get all.\n *\n * @return a string full of binary encoded characters.\n */\nutil.ByteStringBuffer.prototype.bytes = function(count) {\n return (typeof(count) === 'undefined' ?\n this.data.slice(this.read) :\n this.data.slice(this.read, this.read + count));\n};\n\n/**\n * Gets a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n *\n * @return the byte.\n */\nutil.ByteStringBuffer.prototype.at = function(i) {\n return this.data.charCodeAt(this.read + i);\n};\n\n/**\n * Puts a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.setAt = function(i, b) {\n this.data = this.data.substr(0, this.read + i) +\n String.fromCharCode(b) +\n this.data.substr(this.read + i + 1);\n return this;\n};\n\n/**\n * Gets the last byte without modifying the read pointer.\n *\n * @return the last byte.\n */\nutil.ByteStringBuffer.prototype.last = function() {\n return this.data.charCodeAt(this.data.length - 1);\n};\n\n/**\n * Creates a copy of this buffer.\n *\n * @return the copy.\n */\nutil.ByteStringBuffer.prototype.copy = function() {\n var c = util.createBuffer(this.data);\n c.read = this.read;\n return c;\n};\n\n/**\n * Compacts this buffer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.compact = function() {\n if(this.read > 0) {\n this.data = this.data.slice(this.read);\n this.read = 0;\n }\n return this;\n};\n\n/**\n * Clears this buffer.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.clear = function() {\n this.data = '';\n this.read = 0;\n return this;\n};\n\n/**\n * Shortens this buffer by triming bytes off of the end of this buffer.\n *\n * @param count the number of bytes to trim off.\n *\n * @return this buffer.\n */\nutil.ByteStringBuffer.prototype.truncate = function(count) {\n var len = Math.max(0, this.length() - count);\n this.data = this.data.substr(this.read, len);\n this.read = 0;\n return this;\n};\n\n/**\n * Converts this buffer to a hexadecimal string.\n *\n * @return a hexadecimal string.\n */\nutil.ByteStringBuffer.prototype.toHex = function() {\n var rval = '';\n for(var i = this.read; i < this.data.length; ++i) {\n var b = this.data.charCodeAt(i);\n if(b < 16) {\n rval += '0';\n }\n rval += b.toString(16);\n }\n return rval;\n};\n\n/**\n * Converts this buffer to a UTF-16 string (standard JavaScript string).\n *\n * @return a UTF-16 string.\n */\nutil.ByteStringBuffer.prototype.toString = function() {\n return util.decodeUtf8(this.bytes());\n};\n\n/** End Buffer w/BinaryString backing */\n\n/** Buffer w/UInt8Array backing */\n\n/**\n * FIXME: Experimental. Do not use yet.\n *\n * Constructor for an ArrayBuffer-backed byte buffer.\n *\n * The buffer may be constructed from a string, an ArrayBuffer, DataView, or a\n * TypedArray.\n *\n * If a string is given, its encoding should be provided as an option,\n * otherwise it will default to 'binary'. A 'binary' string is encoded such\n * that each character is one byte in length and size.\n *\n * If an ArrayBuffer, DataView, or TypedArray is given, it will be used\n * *directly* without any copying. Note that, if a write to the buffer requires\n * more space, the buffer will allocate a new backing ArrayBuffer to\n * accommodate. The starting read and write offsets for the buffer may be\n * given as options.\n *\n * @param [b] the initial bytes for this buffer.\n * @param options the options to use:\n * [readOffset] the starting read offset to use (default: 0).\n * [writeOffset] the starting write offset to use (default: the\n * length of the first parameter).\n * [growSize] the minimum amount, in bytes, to grow the buffer by to\n * accommodate writes (default: 1024).\n * [encoding] the encoding ('binary', 'utf8', 'utf16', 'hex') for the\n * first parameter, if it is a string (default: 'binary').\n */\nfunction DataBuffer(b, options) {\n // default options\n options = options || {};\n\n // pointers for read from/write to buffer\n this.read = options.readOffset || 0;\n this.growSize = options.growSize || 1024;\n\n var isArrayBuffer = util.isArrayBuffer(b);\n var isArrayBufferView = util.isArrayBufferView(b);\n if(isArrayBuffer || isArrayBufferView) {\n // use ArrayBuffer directly\n if(isArrayBuffer) {\n this.data = new DataView(b);\n } else {\n // TODO: adjust read/write offset based on the type of view\n // or specify that this must be done in the options ... that the\n // offsets are byte-based\n this.data = new DataView(b.buffer, b.byteOffset, b.byteLength);\n }\n this.write = ('writeOffset' in options ?\n options.writeOffset : this.data.byteLength);\n return;\n }\n\n // initialize to empty array buffer and add any given bytes using putBytes\n this.data = new DataView(new ArrayBuffer(0));\n this.write = 0;\n\n if(b !== null && b !== undefined) {\n this.putBytes(b);\n }\n\n if('writeOffset' in options) {\n this.write = options.writeOffset;\n }\n}\nutil.DataBuffer = DataBuffer;\n\n/**\n * Gets the number of bytes in this buffer.\n *\n * @return the number of bytes in this buffer.\n */\nutil.DataBuffer.prototype.length = function() {\n return this.write - this.read;\n};\n\n/**\n * Gets whether or not this buffer is empty.\n *\n * @return true if this buffer is empty, false if not.\n */\nutil.DataBuffer.prototype.isEmpty = function() {\n return this.length() <= 0;\n};\n\n/**\n * Ensures this buffer has enough empty space to accommodate the given number\n * of bytes. An optional parameter may be given that indicates a minimum\n * amount to grow the buffer if necessary. If the parameter is not given,\n * the buffer will be grown by some previously-specified default amount\n * or heuristic.\n *\n * @param amount the number of bytes to accommodate.\n * @param [growSize] the minimum amount, in bytes, to grow the buffer by if\n * necessary.\n */\nutil.DataBuffer.prototype.accommodate = function(amount, growSize) {\n if(this.length() >= amount) {\n return this;\n }\n growSize = Math.max(growSize || this.growSize, amount);\n\n // grow buffer\n var src = new Uint8Array(\n this.data.buffer, this.data.byteOffset, this.data.byteLength);\n var dst = new Uint8Array(this.length() + growSize);\n dst.set(src);\n this.data = new DataView(dst.buffer);\n\n return this;\n};\n\n/**\n * Puts a byte in this buffer.\n *\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putByte = function(b) {\n this.accommodate(1);\n this.data.setUint8(this.write++, b);\n return this;\n};\n\n/**\n * Puts a byte in this buffer N times.\n *\n * @param b the byte to put.\n * @param n the number of bytes of value b to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.fillWithByte = function(b, n) {\n this.accommodate(n);\n for(var i = 0; i < n; ++i) {\n this.data.setUint8(b);\n }\n return this;\n};\n\n/**\n * Puts bytes in this buffer. The bytes may be given as a string, an\n * ArrayBuffer, a DataView, or a TypedArray.\n *\n * @param bytes the bytes to put.\n * @param [encoding] the encoding for the first parameter ('binary', 'utf8',\n * 'utf16', 'hex'), if it is a string (default: 'binary').\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putBytes = function(bytes, encoding) {\n if(util.isArrayBufferView(bytes)) {\n var src = new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n var len = src.byteLength - src.byteOffset;\n this.accommodate(len);\n var dst = new Uint8Array(this.data.buffer, this.write);\n dst.set(src);\n this.write += len;\n return this;\n }\n\n if(util.isArrayBuffer(bytes)) {\n var src = new Uint8Array(bytes);\n this.accommodate(src.byteLength);\n var dst = new Uint8Array(this.data.buffer);\n dst.set(src, this.write);\n this.write += src.byteLength;\n return this;\n }\n\n // bytes is a util.DataBuffer or equivalent\n if(bytes instanceof util.DataBuffer ||\n (typeof bytes === 'object' &&\n typeof bytes.read === 'number' && typeof bytes.write === 'number' &&\n util.isArrayBufferView(bytes.data))) {\n var src = new Uint8Array(bytes.data.byteLength, bytes.read, bytes.length());\n this.accommodate(src.byteLength);\n var dst = new Uint8Array(bytes.data.byteLength, this.write);\n dst.set(src);\n this.write += src.byteLength;\n return this;\n }\n\n if(bytes instanceof util.ByteStringBuffer) {\n // copy binary string and process as the same as a string parameter below\n bytes = bytes.data;\n encoding = 'binary';\n }\n\n // string conversion\n encoding = encoding || 'binary';\n if(typeof bytes === 'string') {\n var view;\n\n // decode from string\n if(encoding === 'hex') {\n this.accommodate(Math.ceil(bytes.length / 2));\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.hex.decode(bytes, view, this.write);\n return this;\n }\n if(encoding === 'base64') {\n this.accommodate(Math.ceil(bytes.length / 4) * 3);\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.base64.decode(bytes, view, this.write);\n return this;\n }\n\n // encode text as UTF-8 bytes\n if(encoding === 'utf8') {\n // encode as UTF-8 then decode string as raw binary\n bytes = util.encodeUtf8(bytes);\n encoding = 'binary';\n }\n\n // decode string as raw binary\n if(encoding === 'binary' || encoding === 'raw') {\n // one byte per character\n this.accommodate(bytes.length);\n view = new Uint8Array(this.data.buffer, this.write);\n this.write += util.binary.raw.decode(view);\n return this;\n }\n\n // encode text as UTF-16 bytes\n if(encoding === 'utf16') {\n // two bytes per character\n this.accommodate(bytes.length * 2);\n view = new Uint16Array(this.data.buffer, this.write);\n this.write += util.text.utf16.encode(view);\n return this;\n }\n\n throw new Error('Invalid encoding: ' + encoding);\n }\n\n throw Error('Invalid parameter: ' + bytes);\n};\n\n/**\n * Puts the given buffer into this buffer.\n *\n * @param buffer the buffer to put into this one.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putBuffer = function(buffer) {\n this.putBytes(buffer);\n buffer.clear();\n return this;\n};\n\n/**\n * Puts a string into this buffer.\n *\n * @param str the string to put.\n * @param [encoding] the encoding for the string (default: 'utf16').\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putString = function(str) {\n return this.putBytes(str, 'utf16');\n};\n\n/**\n * Puts a 16-bit integer in this buffer in big-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt16 = function(i) {\n this.accommodate(2);\n this.data.setInt16(this.write, i);\n this.write += 2;\n return this;\n};\n\n/**\n * Puts a 24-bit integer in this buffer in big-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt24 = function(i) {\n this.accommodate(3);\n this.data.setInt16(this.write, i >> 8 & 0xFFFF);\n this.data.setInt8(this.write, i >> 16 & 0xFF);\n this.write += 3;\n return this;\n};\n\n/**\n * Puts a 32-bit integer in this buffer in big-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt32 = function(i) {\n this.accommodate(4);\n this.data.setInt32(this.write, i);\n this.write += 4;\n return this;\n};\n\n/**\n * Puts a 16-bit integer in this buffer in little-endian order.\n *\n * @param i the 16-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt16Le = function(i) {\n this.accommodate(2);\n this.data.setInt16(this.write, i, true);\n this.write += 2;\n return this;\n};\n\n/**\n * Puts a 24-bit integer in this buffer in little-endian order.\n *\n * @param i the 24-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt24Le = function(i) {\n this.accommodate(3);\n this.data.setInt8(this.write, i >> 16 & 0xFF);\n this.data.setInt16(this.write, i >> 8 & 0xFFFF, true);\n this.write += 3;\n return this;\n};\n\n/**\n * Puts a 32-bit integer in this buffer in little-endian order.\n *\n * @param i the 32-bit integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt32Le = function(i) {\n this.accommodate(4);\n this.data.setInt32(this.write, i, true);\n this.write += 4;\n return this;\n};\n\n/**\n * Puts an n-bit integer in this buffer in big-endian order.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putInt = function(i, n) {\n _checkBitsParam(n);\n this.accommodate(n / 8);\n do {\n n -= 8;\n this.data.setInt8(this.write++, (i >> n) & 0xFF);\n } while(n > 0);\n return this;\n};\n\n/**\n * Puts a signed n-bit integer in this buffer in big-endian order. Two's\n * complement representation is used.\n *\n * @param i the n-bit integer.\n * @param n the number of bits in the integer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.putSignedInt = function(i, n) {\n _checkBitsParam(n);\n this.accommodate(n / 8);\n if(i < 0) {\n i += 2 << (n - 1);\n }\n return this.putInt(i, n);\n};\n\n/**\n * Gets a byte from this buffer and advances the read pointer by 1.\n *\n * @return the byte.\n */\nutil.DataBuffer.prototype.getByte = function() {\n return this.data.getInt8(this.read++);\n};\n\n/**\n * Gets a uint16 from this buffer in big-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.DataBuffer.prototype.getInt16 = function() {\n var rval = this.data.getInt16(this.read);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in big-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.DataBuffer.prototype.getInt24 = function() {\n var rval = (\n this.data.getInt16(this.read) << 8 ^\n this.data.getInt8(this.read + 2));\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in big-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.DataBuffer.prototype.getInt32 = function() {\n var rval = this.data.getInt32(this.read);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets a uint16 from this buffer in little-endian order and advances the read\n * pointer by 2.\n *\n * @return the uint16.\n */\nutil.DataBuffer.prototype.getInt16Le = function() {\n var rval = this.data.getInt16(this.read, true);\n this.read += 2;\n return rval;\n};\n\n/**\n * Gets a uint24 from this buffer in little-endian order and advances the read\n * pointer by 3.\n *\n * @return the uint24.\n */\nutil.DataBuffer.prototype.getInt24Le = function() {\n var rval = (\n this.data.getInt8(this.read) ^\n this.data.getInt16(this.read + 1, true) << 8);\n this.read += 3;\n return rval;\n};\n\n/**\n * Gets a uint32 from this buffer in little-endian order and advances the read\n * pointer by 4.\n *\n * @return the word.\n */\nutil.DataBuffer.prototype.getInt32Le = function() {\n var rval = this.data.getInt32(this.read, true);\n this.read += 4;\n return rval;\n};\n\n/**\n * Gets an n-bit integer from this buffer in big-endian order and advances the\n * read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.DataBuffer.prototype.getInt = function(n) {\n _checkBitsParam(n);\n var rval = 0;\n do {\n // TODO: Use (rval * 0x100) if adding support for 33 to 53 bits.\n rval = (rval << 8) + this.data.getInt8(this.read++);\n n -= 8;\n } while(n > 0);\n return rval;\n};\n\n/**\n * Gets a signed n-bit integer from this buffer in big-endian order, using\n * two's complement, and advances the read pointer by n/8.\n *\n * @param n the number of bits in the integer (8, 16, 24, or 32).\n *\n * @return the integer.\n */\nutil.DataBuffer.prototype.getSignedInt = function(n) {\n // getInt checks n\n var x = this.getInt(n);\n var max = 2 << (n - 2);\n if(x >= max) {\n x -= max << 1;\n }\n return x;\n};\n\n/**\n * Reads bytes out as a binary encoded string and clears them from the\n * buffer.\n *\n * @param count the number of bytes to read, undefined or null for all.\n *\n * @return a binary encoded string of bytes.\n */\nutil.DataBuffer.prototype.getBytes = function(count) {\n // TODO: deprecate this method, it is poorly named and\n // this.toString('binary') replaces it\n // add a toTypedArray()/toArrayBuffer() function\n var rval;\n if(count) {\n // read count bytes\n count = Math.min(this.length(), count);\n rval = this.data.slice(this.read, this.read + count);\n this.read += count;\n } else if(count === 0) {\n rval = '';\n } else {\n // read all bytes, optimize to only copy when needed\n rval = (this.read === 0) ? this.data : this.data.slice(this.read);\n this.clear();\n }\n return rval;\n};\n\n/**\n * Gets a binary encoded string of the bytes from this buffer without\n * modifying the read pointer.\n *\n * @param count the number of bytes to get, omit to get all.\n *\n * @return a string full of binary encoded characters.\n */\nutil.DataBuffer.prototype.bytes = function(count) {\n // TODO: deprecate this method, it is poorly named, add \"getString()\"\n return (typeof(count) === 'undefined' ?\n this.data.slice(this.read) :\n this.data.slice(this.read, this.read + count));\n};\n\n/**\n * Gets a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n *\n * @return the byte.\n */\nutil.DataBuffer.prototype.at = function(i) {\n return this.data.getUint8(this.read + i);\n};\n\n/**\n * Puts a byte at the given index without modifying the read pointer.\n *\n * @param i the byte index.\n * @param b the byte to put.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.setAt = function(i, b) {\n this.data.setUint8(i, b);\n return this;\n};\n\n/**\n * Gets the last byte without modifying the read pointer.\n *\n * @return the last byte.\n */\nutil.DataBuffer.prototype.last = function() {\n return this.data.getUint8(this.write - 1);\n};\n\n/**\n * Creates a copy of this buffer.\n *\n * @return the copy.\n */\nutil.DataBuffer.prototype.copy = function() {\n return new util.DataBuffer(this);\n};\n\n/**\n * Compacts this buffer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.compact = function() {\n if(this.read > 0) {\n var src = new Uint8Array(this.data.buffer, this.read);\n var dst = new Uint8Array(src.byteLength);\n dst.set(src);\n this.data = new DataView(dst);\n this.write -= this.read;\n this.read = 0;\n }\n return this;\n};\n\n/**\n * Clears this buffer.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.clear = function() {\n this.data = new DataView(new ArrayBuffer(0));\n this.read = this.write = 0;\n return this;\n};\n\n/**\n * Shortens this buffer by triming bytes off of the end of this buffer.\n *\n * @param count the number of bytes to trim off.\n *\n * @return this buffer.\n */\nutil.DataBuffer.prototype.truncate = function(count) {\n this.write = Math.max(0, this.length() - count);\n this.read = Math.min(this.read, this.write);\n return this;\n};\n\n/**\n * Converts this buffer to a hexadecimal string.\n *\n * @return a hexadecimal string.\n */\nutil.DataBuffer.prototype.toHex = function() {\n var rval = '';\n for(var i = this.read; i < this.data.byteLength; ++i) {\n var b = this.data.getUint8(i);\n if(b < 16) {\n rval += '0';\n }\n rval += b.toString(16);\n }\n return rval;\n};\n\n/**\n * Converts this buffer to a string, using the given encoding. If no\n * encoding is given, 'utf8' (UTF-8) is used.\n *\n * @param [encoding] the encoding to use: 'binary', 'utf8', 'utf16', 'hex',\n * 'base64' (default: 'utf8').\n *\n * @return a string representation of the bytes in this buffer.\n */\nutil.DataBuffer.prototype.toString = function(encoding) {\n var view = new Uint8Array(this.data, this.read, this.length());\n encoding = encoding || 'utf8';\n\n // encode to string\n if(encoding === 'binary' || encoding === 'raw') {\n return util.binary.raw.encode(view);\n }\n if(encoding === 'hex') {\n return util.binary.hex.encode(view);\n }\n if(encoding === 'base64') {\n return util.binary.base64.encode(view);\n }\n\n // decode to text\n if(encoding === 'utf8') {\n return util.text.utf8.decode(view);\n }\n if(encoding === 'utf16') {\n return util.text.utf16.decode(view);\n }\n\n throw new Error('Invalid encoding: ' + encoding);\n};\n\n/** End Buffer w/UInt8Array backing */\n\n/**\n * Creates a buffer that stores bytes. A value may be given to populate the\n * buffer with data. This value can either be string of encoded bytes or a\n * regular string of characters. When passing a string of binary encoded\n * bytes, the encoding `raw` should be given. This is also the default. When\n * passing a string of characters, the encoding `utf8` should be given.\n *\n * @param [input] a string with encoded bytes to store in the buffer.\n * @param [encoding] (default: 'raw', other: 'utf8').\n */\nutil.createBuffer = function(input, encoding) {\n // TODO: deprecate, use new ByteBuffer() instead\n encoding = encoding || 'raw';\n if(input !== undefined && encoding === 'utf8') {\n input = util.encodeUtf8(input);\n }\n return new util.ByteBuffer(input);\n};\n\n/**\n * Fills a string with a particular value. If you want the string to be a byte\n * string, pass in String.fromCharCode(theByte).\n *\n * @param c the character to fill the string with, use String.fromCharCode\n * to fill the string with a byte value.\n * @param n the number of characters of value c to fill with.\n *\n * @return the filled string.\n */\nutil.fillString = function(c, n) {\n var s = '';\n while(n > 0) {\n if(n & 1) {\n s += c;\n }\n n >>>= 1;\n if(n > 0) {\n c += c;\n }\n }\n return s;\n};\n\n/**\n * Performs a per byte XOR between two byte strings and returns the result as a\n * string of bytes.\n *\n * @param s1 first string of bytes.\n * @param s2 second string of bytes.\n * @param n the number of bytes to XOR.\n *\n * @return the XOR'd result.\n */\nutil.xorBytes = function(s1, s2, n) {\n var s3 = '';\n var b = '';\n var t = '';\n var i = 0;\n var c = 0;\n for(; n > 0; --n, ++i) {\n b = s1.charCodeAt(i) ^ s2.charCodeAt(i);\n if(c >= 10) {\n s3 += t;\n t = '';\n c = 0;\n }\n t += String.fromCharCode(b);\n ++c;\n }\n s3 += t;\n return s3;\n};\n\n/**\n * Converts a hex string into a 'binary' encoded string of bytes.\n *\n * @param hex the hexadecimal string to convert.\n *\n * @return the binary-encoded string of bytes.\n */\nutil.hexToBytes = function(hex) {\n // TODO: deprecate: \"Deprecated. Use util.binary.hex.decode instead.\"\n var rval = '';\n var i = 0;\n if(hex.length & 1 == 1) {\n // odd number of characters, convert first character alone\n i = 1;\n rval += String.fromCharCode(parseInt(hex[0], 16));\n }\n // convert 2 characters (1 byte) at a time\n for(; i < hex.length; i += 2) {\n rval += String.fromCharCode(parseInt(hex.substr(i, 2), 16));\n }\n return rval;\n};\n\n/**\n * Converts a 'binary' encoded string of bytes to hex.\n *\n * @param bytes the byte string to convert.\n *\n * @return the string of hexadecimal characters.\n */\nutil.bytesToHex = function(bytes) {\n // TODO: deprecate: \"Deprecated. Use util.binary.hex.encode instead.\"\n return util.createBuffer(bytes).toHex();\n};\n\n/**\n * Converts an 32-bit integer to 4-big-endian byte string.\n *\n * @param i the integer.\n *\n * @return the byte string.\n */\nutil.int32ToBytes = function(i) {\n return (\n String.fromCharCode(i >> 24 & 0xFF) +\n String.fromCharCode(i >> 16 & 0xFF) +\n String.fromCharCode(i >> 8 & 0xFF) +\n String.fromCharCode(i & 0xFF));\n};\n\n// base64 characters, reverse mapping\nvar _base64 =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nvar _base64Idx = [\n/*43 -43 = 0*/\n/*'+', 1, 2, 3,'/' */\n 62, -1, -1, -1, 63,\n\n/*'0','1','2','3','4','5','6','7','8','9' */\n 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,\n\n/*15, 16, 17,'=', 19, 20, 21 */\n -1, -1, -1, 64, -1, -1, -1,\n\n/*65 - 43 = 22*/\n/*'A','B','C','D','E','F','G','H','I','J','K','L','M', */\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n\n/*'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' */\n 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,\n\n/*91 - 43 = 48 */\n/*48, 49, 50, 51, 52, 53 */\n -1, -1, -1, -1, -1, -1,\n\n/*97 - 43 = 54*/\n/*'a','b','c','d','e','f','g','h','i','j','k','l','m' */\n 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\n\n/*'n','o','p','q','r','s','t','u','v','w','x','y','z' */\n 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51\n];\n\n// base58 characters (Bitcoin alphabet)\nvar _base58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\n/**\n * Base64 encodes a 'binary' encoded string of bytes.\n *\n * @param input the binary encoded string of bytes to base64-encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the base64-encoded output.\n */\nutil.encode64 = function(input, maxline) {\n // TODO: deprecate: \"Deprecated. Use util.binary.base64.encode instead.\"\n var line = '';\n var output = '';\n var chr1, chr2, chr3;\n var i = 0;\n while(i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n\n // encode 4 character group\n line += _base64.charAt(chr1 >> 2);\n line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));\n if(isNaN(chr2)) {\n line += '==';\n } else {\n line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));\n line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);\n }\n\n if(maxline && line.length > maxline) {\n output += line.substr(0, maxline) + '\\r\\n';\n line = line.substr(maxline);\n }\n }\n output += line;\n return output;\n};\n\n/**\n * Base64 decodes a string into a 'binary' encoded string of bytes.\n *\n * @param input the base64-encoded input.\n *\n * @return the binary encoded string.\n */\nutil.decode64 = function(input) {\n // TODO: deprecate: \"Deprecated. Use util.binary.base64.decode instead.\"\n\n // remove all non-base64 characters\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n var output = '';\n var enc1, enc2, enc3, enc4;\n var i = 0;\n\n while(i < input.length) {\n enc1 = _base64Idx[input.charCodeAt(i++) - 43];\n enc2 = _base64Idx[input.charCodeAt(i++) - 43];\n enc3 = _base64Idx[input.charCodeAt(i++) - 43];\n enc4 = _base64Idx[input.charCodeAt(i++) - 43];\n\n output += String.fromCharCode((enc1 << 2) | (enc2 >> 4));\n if(enc3 !== 64) {\n // decoded at least 2 bytes\n output += String.fromCharCode(((enc2 & 15) << 4) | (enc3 >> 2));\n if(enc4 !== 64) {\n // decoded 3 bytes\n output += String.fromCharCode(((enc3 & 3) << 6) | enc4);\n }\n }\n }\n\n return output;\n};\n\n/**\n * Encodes the given string of characters (a standard JavaScript\n * string) as a binary encoded string where the bytes represent\n * a UTF-8 encoded string of characters. Non-ASCII characters will be\n * encoded as multiple bytes according to UTF-8.\n *\n * @param str a standard string of characters to encode.\n *\n * @return the binary encoded string.\n */\nutil.encodeUtf8 = function(str) {\n return unescape(encodeURIComponent(str));\n};\n\n/**\n * Decodes a binary encoded string that contains bytes that\n * represent a UTF-8 encoded string of characters -- into a\n * string of characters (a standard JavaScript string).\n *\n * @param str the binary encoded string to decode.\n *\n * @return the resulting standard string of characters.\n */\nutil.decodeUtf8 = function(str) {\n return decodeURIComponent(escape(str));\n};\n\n// binary encoding/decoding tools\n// FIXME: Experimental. Do not use yet.\nutil.binary = {\n raw: {},\n hex: {},\n base64: {},\n base58: {},\n baseN : {\n encode: baseN.encode,\n decode: baseN.decode\n }\n};\n\n/**\n * Encodes a Uint8Array as a binary-encoded string. This encoding uses\n * a value between 0 and 255 for each character.\n *\n * @param bytes the Uint8Array to encode.\n *\n * @return the binary-encoded string.\n */\nutil.binary.raw.encode = function(bytes) {\n return String.fromCharCode.apply(null, bytes);\n};\n\n/**\n * Decodes a binary-encoded string to a Uint8Array. This encoding uses\n * a value between 0 and 255 for each character.\n *\n * @param str the binary-encoded string to decode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.raw.decode = function(str, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length);\n }\n offset = offset || 0;\n var j = offset;\n for(var i = 0; i < str.length; ++i) {\n out[j++] = str.charCodeAt(i);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Encodes a 'binary' string, ArrayBuffer, DataView, TypedArray, or\n * ByteBuffer as a string of hexadecimal characters.\n *\n * @param bytes the bytes to convert.\n *\n * @return the string of hexadecimal characters.\n */\nutil.binary.hex.encode = util.bytesToHex;\n\n/**\n * Decodes a hex-encoded string to a Uint8Array.\n *\n * @param hex the hexadecimal string to convert.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.hex.decode = function(hex, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(Math.ceil(hex.length / 2));\n }\n offset = offset || 0;\n var i = 0, j = offset;\n if(hex.length & 1) {\n // odd number of characters, convert first character alone\n i = 1;\n out[j++] = parseInt(hex[0], 16);\n }\n // convert 2 characters (1 byte) at a time\n for(; i < hex.length; i += 2) {\n out[j++] = parseInt(hex.substr(i, 2), 16);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Base64-encodes a Uint8Array.\n *\n * @param input the Uint8Array to encode.\n * @param maxline the maximum number of encoded characters per line to use,\n * defaults to none.\n *\n * @return the base64-encoded output string.\n */\nutil.binary.base64.encode = function(input, maxline) {\n var line = '';\n var output = '';\n var chr1, chr2, chr3;\n var i = 0;\n while(i < input.byteLength) {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n // encode 4 character group\n line += _base64.charAt(chr1 >> 2);\n line += _base64.charAt(((chr1 & 3) << 4) | (chr2 >> 4));\n if(isNaN(chr2)) {\n line += '==';\n } else {\n line += _base64.charAt(((chr2 & 15) << 2) | (chr3 >> 6));\n line += isNaN(chr3) ? '=' : _base64.charAt(chr3 & 63);\n }\n\n if(maxline && line.length > maxline) {\n output += line.substr(0, maxline) + '\\r\\n';\n line = line.substr(maxline);\n }\n }\n output += line;\n return output;\n};\n\n/**\n * Decodes a base64-encoded string to a Uint8Array.\n *\n * @param input the base64-encoded input string.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.binary.base64.decode = function(input, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(Math.ceil(input.length / 4) * 3);\n }\n\n // remove all non-base64 characters\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n offset = offset || 0;\n var enc1, enc2, enc3, enc4;\n var i = 0, j = offset;\n\n while(i < input.length) {\n enc1 = _base64Idx[input.charCodeAt(i++) - 43];\n enc2 = _base64Idx[input.charCodeAt(i++) - 43];\n enc3 = _base64Idx[input.charCodeAt(i++) - 43];\n enc4 = _base64Idx[input.charCodeAt(i++) - 43];\n\n out[j++] = (enc1 << 2) | (enc2 >> 4);\n if(enc3 !== 64) {\n // decoded at least 2 bytes\n out[j++] = ((enc2 & 15) << 4) | (enc3 >> 2);\n if(enc4 !== 64) {\n // decoded 3 bytes\n out[j++] = ((enc3 & 3) << 6) | enc4;\n }\n }\n }\n\n // make sure result is the exact decoded length\n return output ? (j - offset) : out.subarray(0, j);\n};\n\n// add support for base58 encoding/decoding with Bitcoin alphabet\nutil.binary.base58.encode = function(input, maxline) {\n return util.binary.baseN.encode(input, _base58, maxline);\n};\nutil.binary.base58.decode = function(input, maxline) {\n return util.binary.baseN.decode(input, _base58, maxline);\n};\n\n// text encoding/decoding tools\n// FIXME: Experimental. Do not use yet.\nutil.text = {\n utf8: {},\n utf16: {}\n};\n\n/**\n * Encodes the given string as UTF-8 in a Uint8Array.\n *\n * @param str the string to encode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.text.utf8.encode = function(str, output, offset) {\n str = util.encodeUtf8(str);\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length);\n }\n offset = offset || 0;\n var j = offset;\n for(var i = 0; i < str.length; ++i) {\n out[j++] = str.charCodeAt(i);\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Decodes the UTF-8 contents from a Uint8Array.\n *\n * @param bytes the Uint8Array to decode.\n *\n * @return the resulting string.\n */\nutil.text.utf8.decode = function(bytes) {\n return util.decodeUtf8(String.fromCharCode.apply(null, bytes));\n};\n\n/**\n * Encodes the given string as UTF-16 in a Uint8Array.\n *\n * @param str the string to encode.\n * @param [output] an optional Uint8Array to write the output to; if it\n * is too small, an exception will be thrown.\n * @param [offset] the start offset for writing to the output (default: 0).\n *\n * @return the Uint8Array or the number of bytes written if output was given.\n */\nutil.text.utf16.encode = function(str, output, offset) {\n var out = output;\n if(!out) {\n out = new Uint8Array(str.length * 2);\n }\n var view = new Uint16Array(out.buffer);\n offset = offset || 0;\n var j = offset;\n var k = offset;\n for(var i = 0; i < str.length; ++i) {\n view[k++] = str.charCodeAt(i);\n j += 2;\n }\n return output ? (j - offset) : out;\n};\n\n/**\n * Decodes the UTF-16 contents from a Uint8Array.\n *\n * @param bytes the Uint8Array to decode.\n *\n * @return the resulting string.\n */\nutil.text.utf16.decode = function(bytes) {\n return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer));\n};\n\n/**\n * Deflates the given data using a flash interface.\n *\n * @param api the flash interface.\n * @param bytes the data.\n * @param raw true to return only raw deflate data, false to include zlib\n * header and trailer.\n *\n * @return the deflated data as a string.\n */\nutil.deflate = function(api, bytes, raw) {\n bytes = util.decode64(api.deflate(util.encode64(bytes)).rval);\n\n // strip zlib header and trailer if necessary\n if(raw) {\n // zlib header is 2 bytes (CMF,FLG) where FLG indicates that\n // there is a 4-byte DICT (alder-32) block before the data if\n // its 5th bit is set\n var start = 2;\n var flg = bytes.charCodeAt(1);\n if(flg & 0x20) {\n start = 6;\n }\n // zlib trailer is 4 bytes of adler-32\n bytes = bytes.substring(start, bytes.length - 4);\n }\n\n return bytes;\n};\n\n/**\n * Inflates the given data using a flash interface.\n *\n * @param api the flash interface.\n * @param bytes the data.\n * @param raw true if the incoming data has no zlib header or trailer and is\n * raw DEFLATE data.\n *\n * @return the inflated data as a string, null on error.\n */\nutil.inflate = function(api, bytes, raw) {\n // TODO: add zlib header and trailer if necessary/possible\n var rval = api.inflate(util.encode64(bytes)).rval;\n return (rval === null) ? null : util.decode64(rval);\n};\n\n/**\n * Sets a storage object.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param obj the storage object, null to remove.\n */\nvar _setStorageObject = function(api, id, obj) {\n if(!api) {\n throw new Error('WebStorage not available.');\n }\n\n var rval;\n if(obj === null) {\n rval = api.removeItem(id);\n } else {\n // json-encode and base64-encode object\n obj = util.encode64(JSON.stringify(obj));\n rval = api.setItem(id, obj);\n }\n\n // handle potential flash error\n if(typeof(rval) !== 'undefined' && rval.rval !== true) {\n var error = new Error(rval.error.message);\n error.id = rval.error.id;\n error.name = rval.error.name;\n throw error;\n }\n};\n\n/**\n * Gets a storage object.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n *\n * @return the storage object entry or null if none exists.\n */\nvar _getStorageObject = function(api, id) {\n if(!api) {\n throw new Error('WebStorage not available.');\n }\n\n // get the existing entry\n var rval = api.getItem(id);\n\n /* Note: We check api.init because we can't do (api == localStorage)\n on IE because of \"Class doesn't support Automation\" exception. Only\n the flash api has an init method so this works too, but we need a\n better solution in the future. */\n\n // flash returns item wrapped in an object, handle special case\n if(api.init) {\n if(rval.rval === null) {\n if(rval.error) {\n var error = new Error(rval.error.message);\n error.id = rval.error.id;\n error.name = rval.error.name;\n throw error;\n }\n // no error, but also no item\n rval = null;\n } else {\n rval = rval.rval;\n }\n }\n\n // handle decoding\n if(rval !== null) {\n // base64-decode and json-decode data\n rval = JSON.parse(util.decode64(rval));\n }\n\n return rval;\n};\n\n/**\n * Stores an item in local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param data the data for the item (any javascript object/primitive).\n */\nvar _setItem = function(api, id, key, data) {\n // get storage object\n var obj = _getStorageObject(api, id);\n if(obj === null) {\n // create a new storage object\n obj = {};\n }\n // update key\n obj[key] = data;\n\n // set storage object\n _setStorageObject(api, id, obj);\n};\n\n/**\n * Gets an item from local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n *\n * @return the item.\n */\nvar _getItem = function(api, id, key) {\n // get storage object\n var rval = _getStorageObject(api, id);\n if(rval !== null) {\n // return data at key\n rval = (key in rval) ? rval[key] : null;\n }\n\n return rval;\n};\n\n/**\n * Removes an item from local storage.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n */\nvar _removeItem = function(api, id, key) {\n // get storage object\n var obj = _getStorageObject(api, id);\n if(obj !== null && key in obj) {\n // remove key\n delete obj[key];\n\n // see if entry has no keys remaining\n var empty = true;\n for(var prop in obj) {\n empty = false;\n break;\n }\n if(empty) {\n // remove entry entirely if no keys are left\n obj = null;\n }\n\n // set storage object\n _setStorageObject(api, id, obj);\n }\n};\n\n/**\n * Clears the local disk storage identified by the given ID.\n *\n * @param api the storage interface.\n * @param id the storage ID to use.\n */\nvar _clearItems = function(api, id) {\n _setStorageObject(api, id, null);\n};\n\n/**\n * Calls a storage function.\n *\n * @param func the function to call.\n * @param args the arguments for the function.\n * @param location the location argument.\n *\n * @return the return value from the function.\n */\nvar _callStorageFunction = function(func, args, location) {\n var rval = null;\n\n // default storage types\n if(typeof(location) === 'undefined') {\n location = ['web', 'flash'];\n }\n\n // apply storage types in order of preference\n var type;\n var done = false;\n var exception = null;\n for(var idx in location) {\n type = location[idx];\n try {\n if(type === 'flash' || type === 'both') {\n if(args[0] === null) {\n throw new Error('Flash local storage not available.');\n }\n rval = func.apply(this, args);\n done = (type === 'flash');\n }\n if(type === 'web' || type === 'both') {\n args[0] = localStorage;\n rval = func.apply(this, args);\n done = true;\n }\n } catch(ex) {\n exception = ex;\n }\n if(done) {\n break;\n }\n }\n\n if(!done) {\n throw exception;\n }\n\n return rval;\n};\n\n/**\n * Stores an item on local disk.\n *\n * The available types of local storage include 'flash', 'web', and 'both'.\n *\n * The type 'flash' refers to flash local storage (SharedObject). In order\n * to use flash local storage, the 'api' parameter must be valid. The type\n * 'web' refers to WebStorage, if supported by the browser. The type 'both'\n * refers to storing using both 'flash' and 'web', not just one or the\n * other.\n *\n * The location array should list the storage types to use in order of\n * preference:\n *\n * ['flash']: flash only storage\n * ['web']: web only storage\n * ['both']: try to store in both\n * ['flash','web']: store in flash first, but if not available, 'web'\n * ['web','flash']: store in web first, but if not available, 'flash'\n *\n * The location array defaults to: ['web', 'flash']\n *\n * @param api the flash interface, null to use only WebStorage.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param data the data for the item (any javascript object/primitive).\n * @param location an array with the preferred types of storage to use.\n */\nutil.setItem = function(api, id, key, data, location) {\n _callStorageFunction(_setItem, arguments, location);\n};\n\n/**\n * Gets an item on local disk.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface, null to use only WebStorage.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param location an array with the preferred types of storage to use.\n *\n * @return the item.\n */\nutil.getItem = function(api, id, key, location) {\n return _callStorageFunction(_getItem, arguments, location);\n};\n\n/**\n * Removes an item on local disk.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface.\n * @param id the storage ID to use.\n * @param key the key for the item.\n * @param location an array with the preferred types of storage to use.\n */\nutil.removeItem = function(api, id, key, location) {\n _callStorageFunction(_removeItem, arguments, location);\n};\n\n/**\n * Clears the local disk storage identified by the given ID.\n *\n * Set setItem() for details on storage types.\n *\n * @param api the flash interface if flash is available.\n * @param id the storage ID to use.\n * @param location an array with the preferred types of storage to use.\n */\nutil.clearItems = function(api, id, location) {\n _callStorageFunction(_clearItems, arguments, location);\n};\n\n/**\n * Check if an object is empty.\n *\n * Taken from:\n * http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json/679937#679937\n *\n * @param object the object to check.\n */\nutil.isEmpty = function(obj) {\n for(var prop in obj) {\n if(obj.hasOwnProperty(prop)) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Format with simple printf-style interpolation.\n *\n * %%: literal '%'\n * %s,%o: convert next argument into a string.\n *\n * @param format the string to format.\n * @param ... arguments to interpolate into the format string.\n */\nutil.format = function(format) {\n var re = /%./g;\n // current match\n var match;\n // current part\n var part;\n // current arg index\n var argi = 0;\n // collected parts to recombine later\n var parts = [];\n // last index found\n var last = 0;\n // loop while matches remain\n while((match = re.exec(format))) {\n part = format.substring(last, re.lastIndex - 2);\n // don't add empty strings (ie, parts between %s%s)\n if(part.length > 0) {\n parts.push(part);\n }\n last = re.lastIndex;\n // switch on % code\n var code = match[0][1];\n switch(code) {\n case 's':\n case 'o':\n // check if enough arguments were given\n if(argi < arguments.length) {\n parts.push(arguments[argi++ + 1]);\n } else {\n parts.push('');\n }\n break;\n // FIXME: do proper formating for numbers, etc\n //case 'f':\n //case 'd':\n case '%':\n parts.push('%');\n break;\n default:\n parts.push('<%' + code + '?>');\n }\n }\n // add trailing part of format string\n parts.push(format.substring(last));\n return parts.join('');\n};\n\n/**\n * Formats a number.\n *\n * http://snipplr.com/view/5945/javascript-numberformat--ported-from-php/\n */\nutil.formatNumber = function(number, decimals, dec_point, thousands_sep) {\n // http://kevin.vanzonneveld.net\n // + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)\n // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n // + bugfix by: Michael White (http://crestidg.com)\n // + bugfix by: Benjamin Lupton\n // + bugfix by: Allan Jensen (http://www.winternet.no)\n // + revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)\n // * example 1: number_format(1234.5678, 2, '.', '');\n // * returns 1: 1234.57\n\n var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;\n var d = dec_point === undefined ? ',' : dec_point;\n var t = thousands_sep === undefined ?\n '.' : thousands_sep, s = n < 0 ? '-' : '';\n var i = parseInt((n = Math.abs(+n || 0).toFixed(c)), 10) + '';\n var j = (i.length > 3) ? i.length % 3 : 0;\n return s + (j ? i.substr(0, j) + t : '') +\n i.substr(j).replace(/(\\d{3})(?=\\d)/g, '$1' + t) +\n (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');\n};\n\n/**\n * Formats a byte size.\n *\n * http://snipplr.com/view/5949/format-humanize-file-byte-size-presentation-in-javascript/\n */\nutil.formatSize = function(size) {\n if(size >= 1073741824) {\n size = util.formatNumber(size / 1073741824, 2, '.', '') + ' GiB';\n } else if(size >= 1048576) {\n size = util.formatNumber(size / 1048576, 2, '.', '') + ' MiB';\n } else if(size >= 1024) {\n size = util.formatNumber(size / 1024, 0) + ' KiB';\n } else {\n size = util.formatNumber(size, 0) + ' bytes';\n }\n return size;\n};\n\n/**\n * Converts an IPv4 or IPv6 string representation into bytes (in network order).\n *\n * @param ip the IPv4 or IPv6 address to convert.\n *\n * @return the 4-byte IPv6 or 16-byte IPv6 address or null if the address can't\n * be parsed.\n */\nutil.bytesFromIP = function(ip) {\n if(ip.indexOf('.') !== -1) {\n return util.bytesFromIPv4(ip);\n }\n if(ip.indexOf(':') !== -1) {\n return util.bytesFromIPv6(ip);\n }\n return null;\n};\n\n/**\n * Converts an IPv4 string representation into bytes (in network order).\n *\n * @param ip the IPv4 address to convert.\n *\n * @return the 4-byte address or null if the address can't be parsed.\n */\nutil.bytesFromIPv4 = function(ip) {\n ip = ip.split('.');\n if(ip.length !== 4) {\n return null;\n }\n var b = util.createBuffer();\n for(var i = 0; i < ip.length; ++i) {\n var num = parseInt(ip[i], 10);\n if(isNaN(num)) {\n return null;\n }\n b.putByte(num);\n }\n return b.getBytes();\n};\n\n/**\n * Converts an IPv6 string representation into bytes (in network order).\n *\n * @param ip the IPv6 address to convert.\n *\n * @return the 16-byte address or null if the address can't be parsed.\n */\nutil.bytesFromIPv6 = function(ip) {\n var blanks = 0;\n ip = ip.split(':').filter(function(e) {\n if(e.length === 0) ++blanks;\n return true;\n });\n var zeros = (8 - ip.length + blanks) * 2;\n var b = util.createBuffer();\n for(var i = 0; i < 8; ++i) {\n if(!ip[i] || ip[i].length === 0) {\n b.fillWithByte(0, zeros);\n zeros = 0;\n continue;\n }\n var bytes = util.hexToBytes(ip[i]);\n if(bytes.length < 2) {\n b.putByte(0);\n }\n b.putBytes(bytes);\n }\n return b.getBytes();\n};\n\n/**\n * Converts 4-bytes into an IPv4 string representation or 16-bytes into\n * an IPv6 string representation. The bytes must be in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv4 or IPv6 string representation if 4 or 16 bytes,\n * respectively, are given, otherwise null.\n */\nutil.bytesToIP = function(bytes) {\n if(bytes.length === 4) {\n return util.bytesToIPv4(bytes);\n }\n if(bytes.length === 16) {\n return util.bytesToIPv6(bytes);\n }\n return null;\n};\n\n/**\n * Converts 4-bytes into an IPv4 string representation. The bytes must be\n * in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv4 string representation or null for an invalid # of bytes.\n */\nutil.bytesToIPv4 = function(bytes) {\n if(bytes.length !== 4) {\n return null;\n }\n var ip = [];\n for(var i = 0; i < bytes.length; ++i) {\n ip.push(bytes.charCodeAt(i));\n }\n return ip.join('.');\n};\n\n/**\n * Converts 16-bytes into an IPv16 string representation. The bytes must be\n * in network order.\n *\n * @param bytes the bytes to convert.\n *\n * @return the IPv16 string representation or null for an invalid # of bytes.\n */\nutil.bytesToIPv6 = function(bytes) {\n if(bytes.length !== 16) {\n return null;\n }\n var ip = [];\n var zeroGroups = [];\n var zeroMaxGroup = 0;\n for(var i = 0; i < bytes.length; i += 2) {\n var hex = util.bytesToHex(bytes[i] + bytes[i + 1]);\n // canonicalize zero representation\n while(hex[0] === '0' && hex !== '0') {\n hex = hex.substr(1);\n }\n if(hex === '0') {\n var last = zeroGroups[zeroGroups.length - 1];\n var idx = ip.length;\n if(!last || idx !== last.end + 1) {\n zeroGroups.push({start: idx, end: idx});\n } else {\n last.end = idx;\n if((last.end - last.start) >\n (zeroGroups[zeroMaxGroup].end - zeroGroups[zeroMaxGroup].start)) {\n zeroMaxGroup = zeroGroups.length - 1;\n }\n }\n }\n ip.push(hex);\n }\n if(zeroGroups.length > 0) {\n var group = zeroGroups[zeroMaxGroup];\n // only shorten group of length > 0\n if(group.end - group.start > 0) {\n ip.splice(group.start, group.end - group.start + 1, '');\n if(group.start === 0) {\n ip.unshift('');\n }\n if(group.end === 7) {\n ip.push('');\n }\n }\n }\n return ip.join(':');\n};\n\n/**\n * Estimates the number of processes that can be run concurrently. If\n * creating Web Workers, keep in mind that the main JavaScript process needs\n * its own core.\n *\n * @param options the options to use:\n * update true to force an update (not use the cached value).\n * @param callback(err, max) called once the operation completes.\n */\nutil.estimateCores = function(options, callback) {\n if(typeof options === 'function') {\n callback = options;\n options = {};\n }\n options = options || {};\n if('cores' in util && !options.update) {\n return callback(null, util.cores);\n }\n if(typeof navigator !== 'undefined' &&\n 'hardwareConcurrency' in navigator &&\n navigator.hardwareConcurrency > 0) {\n util.cores = navigator.hardwareConcurrency;\n return callback(null, util.cores);\n }\n if(typeof Worker === 'undefined') {\n // workers not available\n util.cores = 1;\n return callback(null, util.cores);\n }\n if(typeof Blob === 'undefined') {\n // can't estimate, default to 2\n util.cores = 2;\n return callback(null, util.cores);\n }\n\n // create worker concurrency estimation code as blob\n var blobUrl = URL.createObjectURL(new Blob(['(',\n function() {\n self.addEventListener('message', function(e) {\n // run worker for 4 ms\n var st = Date.now();\n var et = st + 4;\n while(Date.now() < et);\n self.postMessage({st: st, et: et});\n });\n }.toString(),\n ')()'], {type: 'application/javascript'}));\n\n // take 5 samples using 16 workers\n sample([], 5, 16);\n\n function sample(max, samples, numWorkers) {\n if(samples === 0) {\n // get overlap average\n var avg = Math.floor(max.reduce(function(avg, x) {\n return avg + x;\n }, 0) / max.length);\n util.cores = Math.max(1, avg);\n URL.revokeObjectURL(blobUrl);\n return callback(null, util.cores);\n }\n map(numWorkers, function(err, results) {\n max.push(reduce(numWorkers, results));\n sample(max, samples - 1, numWorkers);\n });\n }\n\n function map(numWorkers, callback) {\n var workers = [];\n var results = [];\n for(var i = 0; i < numWorkers; ++i) {\n var worker = new Worker(blobUrl);\n worker.addEventListener('message', function(e) {\n results.push(e.data);\n if(results.length === numWorkers) {\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].terminate();\n }\n callback(null, results);\n }\n });\n workers.push(worker);\n }\n for(var i = 0; i < numWorkers; ++i) {\n workers[i].postMessage(i);\n }\n }\n\n function reduce(numWorkers, results) {\n // find overlapping time windows\n var overlaps = [];\n for(var n = 0; n < numWorkers; ++n) {\n var r1 = results[n];\n var overlap = overlaps[n] = [];\n for(var i = 0; i < numWorkers; ++i) {\n if(n === i) {\n continue;\n }\n var r2 = results[i];\n if((r1.st > r2.st && r1.st < r2.et) ||\n (r2.st > r1.st && r2.st < r1.et)) {\n overlap.push(i);\n }\n }\n }\n // get maximum overlaps ... don't include overlapping worker itself\n // as the main JS process was also being scheduled during the work and\n // would have to be subtracted from the estimate anyway\n return overlaps.reduce(function(max, overlap) {\n return Math.max(max, overlap.length);\n }, 0);\n }\n};\n","/**\n * Javascript implementation of X.509 and related components (such as\n * Certification Signing Requests) of a Public Key Infrastructure.\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2014 Digital Bazaar, Inc.\n *\n * The ASN.1 representation of an X.509v3 certificate is as follows\n * (see RFC 2459):\n *\n * Certificate ::= SEQUENCE {\n * tbsCertificate TBSCertificate,\n * signatureAlgorithm AlgorithmIdentifier,\n * signatureValue BIT STRING\n * }\n *\n * TBSCertificate ::= SEQUENCE {\n * version [0] EXPLICIT Version DEFAULT v1,\n * serialNumber CertificateSerialNumber,\n * signature AlgorithmIdentifier,\n * issuer Name,\n * validity Validity,\n * subject Name,\n * subjectPublicKeyInfo SubjectPublicKeyInfo,\n * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,\n * -- If present, version shall be v2 or v3\n * extensions [3] EXPLICIT Extensions OPTIONAL\n * -- If present, version shall be v3\n * }\n *\n * Version ::= INTEGER { v1(0), v2(1), v3(2) }\n *\n * CertificateSerialNumber ::= INTEGER\n *\n * Name ::= CHOICE {\n * // only one possible choice for now\n * RDNSequence\n * }\n *\n * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName\n *\n * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue\n *\n * AttributeTypeAndValue ::= SEQUENCE {\n * type AttributeType,\n * value AttributeValue\n * }\n * AttributeType ::= OBJECT IDENTIFIER\n * AttributeValue ::= ANY DEFINED BY AttributeType\n *\n * Validity ::= SEQUENCE {\n * notBefore Time,\n * notAfter Time\n * }\n *\n * Time ::= CHOICE {\n * utcTime UTCTime,\n * generalTime GeneralizedTime\n * }\n *\n * UniqueIdentifier ::= BIT STRING\n *\n * SubjectPublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * subjectPublicKey BIT STRING\n * }\n *\n * Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension\n *\n * Extension ::= SEQUENCE {\n * extnID OBJECT IDENTIFIER,\n * critical BOOLEAN DEFAULT FALSE,\n * extnValue OCTET STRING\n * }\n *\n * The only key algorithm currently supported for PKI is RSA.\n *\n * RSASSA-PSS signatures are described in RFC 3447 and RFC 4055.\n *\n * PKCS#10 v1.7 describes certificate signing requests:\n *\n * CertificationRequestInfo:\n *\n * CertificationRequestInfo ::= SEQUENCE {\n * version INTEGER { v1(0) } (v1,...),\n * subject Name,\n * subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }},\n * attributes [0] Attributes{{ CRIAttributes }}\n * }\n *\n * Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }}\n *\n * CRIAttributes ATTRIBUTE ::= {\n * ... -- add any locally defined attributes here -- }\n *\n * Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE {\n * type ATTRIBUTE.&id({IOSet}),\n * values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type})\n * }\n *\n * CertificationRequest ::= SEQUENCE {\n * certificationRequestInfo CertificationRequestInfo,\n * signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }},\n * signature BIT STRING\n * }\n */\nvar forge = require('./forge');\nrequire('./aes');\nrequire('./asn1');\nrequire('./des');\nrequire('./md');\nrequire('./mgf');\nrequire('./oids');\nrequire('./pem');\nrequire('./pss');\nrequire('./rsa');\nrequire('./util');\n\n// shortcut for asn.1 API\nvar asn1 = forge.asn1;\n\n/* Public Key Infrastructure (PKI) implementation. */\nvar pki = module.exports = forge.pki = forge.pki || {};\nvar oids = pki.oids;\n\n// short name OID mappings\nvar _shortNames = {};\n_shortNames['CN'] = oids['commonName'];\n_shortNames['commonName'] = 'CN';\n_shortNames['C'] = oids['countryName'];\n_shortNames['countryName'] = 'C';\n_shortNames['L'] = oids['localityName'];\n_shortNames['localityName'] = 'L';\n_shortNames['ST'] = oids['stateOrProvinceName'];\n_shortNames['stateOrProvinceName'] = 'ST';\n_shortNames['O'] = oids['organizationName'];\n_shortNames['organizationName'] = 'O';\n_shortNames['OU'] = oids['organizationalUnitName'];\n_shortNames['organizationalUnitName'] = 'OU';\n_shortNames['E'] = oids['emailAddress'];\n_shortNames['emailAddress'] = 'E';\n\n// validator for an SubjectPublicKeyInfo structure\n// Note: Currently only works with an RSA public key\nvar publicKeyValidator = forge.pki.rsa.publicKeyValidator;\n\n// validator for an X.509v3 certificate\nvar x509CertificateValidator = {\n name: 'Certificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'tbsCertificate',\n value: [{\n name: 'Certificate.TBSCertificate.version',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.version.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certVersion'\n }]\n }, {\n name: 'Certificate.TBSCertificate.serialNumber',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certSerialNumber'\n }, {\n name: 'Certificate.TBSCertificate.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'Certificate.TBSCertificate.signature.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certinfoSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certinfoSignatureParams'\n }]\n }, {\n name: 'Certificate.TBSCertificate.issuer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certIssuer'\n }, {\n name: 'Certificate.TBSCertificate.validity',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n // Note: UTC and generalized times may both appear so the capture\n // names are based on their detected order, the names used below\n // are only for the common case, which validity time really means\n // \"notBefore\" and which means \"notAfter\" will be determined by order\n value: [{\n // notBefore (Time) (UTC time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity1UTCTime'\n }, {\n // notBefore (Time) (generalized time case)\n name: 'Certificate.TBSCertificate.validity.notBefore (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity2GeneralizedTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (utc)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.UTCTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity3UTCTime'\n }, {\n // notAfter (Time) (only UTC time is supported)\n name: 'Certificate.TBSCertificate.validity.notAfter (generalized)',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.GENERALIZEDTIME,\n constructed: false,\n optional: true,\n capture: 'certValidity4GeneralizedTime'\n }]\n }, {\n // Name (subject) (RDNSequence)\n name: 'Certificate.TBSCertificate.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n // issuerUniqueID (optional)\n name: 'Certificate.TBSCertificate.issuerUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.issuerUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certIssuerUniqueId'\n }]\n }, {\n // subjectUniqueID (optional)\n name: 'Certificate.TBSCertificate.subjectUniqueID',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n constructed: true,\n optional: true,\n value: [{\n name: 'Certificate.TBSCertificate.subjectUniqueID.id',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n // TODO: support arbitrary bit length ids\n captureBitStringValue: 'certSubjectUniqueId'\n }]\n }, {\n // Extensions (optional)\n name: 'Certificate.TBSCertificate.extensions',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n constructed: true,\n captureAsn1: 'certExtensions',\n optional: true\n }]\n }, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'Certificate.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'Certificate.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'certSignatureOid'\n }, {\n name: 'Certificate.TBSCertificate.signature.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'certSignatureParams'\n }]\n }, {\n // SignatureValue\n name: 'Certificate.signatureValue',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'certSignature'\n }]\n};\n\nvar rsassaPssParameterValidator = {\n name: 'rsapss',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'hashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }, {\n name: 'rsapss.maskGenAlgorithm',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 1,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.SEQUENCE,\n constructed: true,\n optional: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenOid'\n }, {\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'maskGenHashOid'\n /* parameter block omitted, for SHA1 NULL anyhow. */\n }]\n }]\n }]\n }, {\n name: 'rsapss.saltLength',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 2,\n optional: true,\n value: [{\n name: 'rsapss.saltLength.saltLength',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'saltLength'\n }]\n }, {\n name: 'rsapss.trailerField',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 3,\n optional: true,\n value: [{\n name: 'rsapss.trailer.trailer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Class.INTEGER,\n constructed: false,\n capture: 'trailer'\n }]\n }]\n};\n\n// validator for a CertificationRequestInfo structure\nvar certificationRequestInfoValidator = {\n name: 'CertificationRequestInfo',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfo',\n value: [{\n name: 'CertificationRequestInfo.integer',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.INTEGER,\n constructed: false,\n capture: 'certificationRequestInfoVersion'\n }, {\n // Name (subject) (RDNSequence)\n name: 'CertificationRequestInfo.subject',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'certificationRequestInfoSubject'\n },\n // SubjectPublicKeyInfo\n publicKeyValidator,\n {\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.CONTEXT_SPECIFIC,\n type: 0,\n constructed: true,\n optional: true,\n capture: 'certificationRequestInfoAttributes',\n value: [{\n name: 'CertificationRequestInfo.attributes',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n name: 'CertificationRequestInfo.attributes.type',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false\n }, {\n name: 'CertificationRequestInfo.attributes.value',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SET,\n constructed: true\n }]\n }]\n }]\n};\n\n// validator for a CertificationRequest structure\nvar certificationRequestValidator = {\n name: 'CertificationRequest',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n captureAsn1: 'csr',\n value: [\n certificationRequestInfoValidator, {\n // AlgorithmIdentifier (signature algorithm)\n name: 'CertificationRequest.signatureAlgorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.SEQUENCE,\n constructed: true,\n value: [{\n // algorithm\n name: 'CertificationRequest.signatureAlgorithm.algorithm',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.OID,\n constructed: false,\n capture: 'csrSignatureOid'\n }, {\n name: 'CertificationRequest.signatureAlgorithm.parameters',\n tagClass: asn1.Class.UNIVERSAL,\n optional: true,\n captureAsn1: 'csrSignatureParams'\n }]\n }, {\n // signature\n name: 'CertificationRequest.signature',\n tagClass: asn1.Class.UNIVERSAL,\n type: asn1.Type.BITSTRING,\n constructed: false,\n captureBitStringValue: 'csrSignature'\n }\n ]\n};\n\n/**\n * Converts an RDNSequence of ASN.1 DER-encoded RelativeDistinguishedName\n * sets into an array with objects that have type and value properties.\n *\n * @param rdn the RDNSequence to convert.\n * @param md a message digest to append type and value to if provided.\n */\npki.RDNAttributesAsArray = function(rdn, md) {\n var rval = [];\n\n // each value in 'rdn' in is a SET of RelativeDistinguishedName\n var set, attr, obj;\n for(var si = 0; si < rdn.value.length; ++si) {\n // get the RelativeDistinguishedName set\n set = rdn.value[si];\n\n // each value in the SET is an AttributeTypeAndValue sequence\n // containing first a type (an OID) and second a value (defined by\n // the OID)\n for(var i = 0; i < set.value.length; ++i) {\n obj = {};\n attr = set.value[i];\n obj.type = asn1.derToOid(attr.value[0].value);\n obj.value = attr.value[1].value;\n obj.valueTagClass = attr.value[1].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n if(md) {\n md.update(obj.type);\n md.update(obj.value);\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Converts ASN.1 CRIAttributes into an array with objects that have type and\n * value properties.\n *\n * @param attributes the CRIAttributes to convert.\n */\npki.CRIAttributesAsArray = function(attributes) {\n var rval = [];\n\n // each value in 'attributes' in is a SEQUENCE with an OID and a SET\n for(var si = 0; si < attributes.length; ++si) {\n // get the attribute sequence\n var seq = attributes[si];\n\n // each value in the SEQUENCE containing first a type (an OID) and\n // second a set of values (defined by the OID)\n var type = asn1.derToOid(seq.value[0].value);\n var values = seq.value[1].value;\n for(var vi = 0; vi < values.length; ++vi) {\n var obj = {};\n obj.type = type;\n obj.value = values[vi].value;\n obj.valueTagClass = values[vi].type;\n // if the OID is known, get its name and short name\n if(obj.type in oids) {\n obj.name = oids[obj.type];\n if(obj.name in _shortNames) {\n obj.shortName = _shortNames[obj.name];\n }\n }\n // parse extensions\n if(obj.type === oids.extensionRequest) {\n obj.extensions = [];\n for(var ei = 0; ei < obj.value.length; ++ei) {\n obj.extensions.push(pki.certificateExtensionFromAsn1(obj.value[ei]));\n }\n }\n rval.push(obj);\n }\n }\n\n return rval;\n};\n\n/**\n * Gets an issuer or subject attribute from its name, type, or short name.\n *\n * @param obj the issuer or subject object.\n * @param options a short name string or an object with:\n * shortName the short name for the attribute.\n * name the name for the attribute.\n * type the type for the attribute.\n *\n * @return the attribute.\n */\nfunction _getAttribute(obj, options) {\n if(typeof options === 'string') {\n options = {shortName: options};\n }\n\n var rval = null;\n var attr;\n for(var i = 0; rval === null && i < obj.attributes.length; ++i) {\n attr = obj.attributes[i];\n if(options.type && options.type === attr.type) {\n rval = attr;\n } else if(options.name && options.name === attr.name) {\n rval = attr;\n } else if(options.shortName && options.shortName === attr.shortName) {\n rval = attr;\n }\n }\n return rval;\n}\n\n/**\n * Converts signature parameters from ASN.1 structure.\n *\n * Currently only RSASSA-PSS supported. The PKCS#1 v1.5 signature scheme had\n * no parameters.\n *\n * RSASSA-PSS-params ::= SEQUENCE {\n * hashAlgorithm [0] HashAlgorithm DEFAULT\n * sha1Identifier,\n * maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT\n * mgf1SHA1Identifier,\n * saltLength [2] INTEGER DEFAULT 20,\n * trailerField [3] INTEGER DEFAULT 1\n * }\n *\n * HashAlgorithm ::= AlgorithmIdentifier\n *\n * MaskGenAlgorithm ::= AlgorithmIdentifier\n *\n * AlgorithmIdentifer ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * parameters ANY DEFINED BY algorithm OPTIONAL\n * }\n *\n * @param oid The OID specifying the signature algorithm\n * @param obj The ASN.1 structure holding the parameters\n * @param fillDefaults Whether to use return default values where omitted\n * @return signature parameter object\n */\nvar _readSignatureParameters = function(oid, obj, fillDefaults) {\n var params = {};\n\n if(oid !== oids['RSASSA-PSS']) {\n return params;\n }\n\n if(fillDefaults) {\n params = {\n hash: {\n algorithmOid: oids['sha1']\n },\n mgf: {\n algorithmOid: oids['mgf1'],\n hash: {\n algorithmOid: oids['sha1']\n }\n },\n saltLength: 20\n };\n }\n\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, rsassaPssParameterValidator, capture, errors)) {\n var error = new Error('Cannot read RSASSA-PSS parameter block.');\n error.errors = errors;\n throw error;\n }\n\n if(capture.hashOid !== undefined) {\n params.hash = params.hash || {};\n params.hash.algorithmOid = asn1.derToOid(capture.hashOid);\n }\n\n if(capture.maskGenOid !== undefined) {\n params.mgf = params.mgf || {};\n params.mgf.algorithmOid = asn1.derToOid(capture.maskGenOid);\n params.mgf.hash = params.mgf.hash || {};\n params.mgf.hash.algorithmOid = asn1.derToOid(capture.maskGenHashOid);\n }\n\n if(capture.saltLength !== undefined) {\n params.saltLength = capture.saltLength.charCodeAt(0);\n }\n\n return params;\n};\n\n/**\n * Create signature digest for OID.\n *\n * @param options\n * signatureOid: the OID specifying the signature algorithm.\n * type: a human readable type for error messages\n * @return a created md instance. throws if unknown oid.\n */\nvar _createSignatureDigest = function(options) {\n switch(oids[options.signatureOid]) {\n case 'sha1WithRSAEncryption':\n // deprecated alias\n case 'sha1WithRSASignature':\n return forge.md.sha1.create();\n case 'md5WithRSAEncryption':\n return forge.md.md5.create();\n case 'sha256WithRSAEncryption':\n return forge.md.sha256.create();\n case 'sha384WithRSAEncryption':\n return forge.md.sha384.create();\n case 'sha512WithRSAEncryption':\n return forge.md.sha512.create();\n case 'RSASSA-PSS':\n return forge.md.sha256.create();\n default:\n var error = new Error(\n 'Could not compute ' + options.type + ' digest. ' +\n 'Unknown signature OID.');\n error.signatureOid = options.signatureOid;\n throw error;\n }\n};\n\n/**\n * Verify signature on certificate or CSR.\n *\n * @param options:\n * certificate the certificate or CSR to verify.\n * md the signature digest.\n * signature the signature\n * @return a created md instance. throws if unknown oid.\n */\nvar _verifySignature = function(options) {\n var cert = options.certificate;\n var scheme;\n\n switch(cert.signatureOid) {\n case oids.sha1WithRSAEncryption:\n // deprecated alias\n case oids.sha1WithRSASignature:\n /* use PKCS#1 v1.5 padding scheme */\n break;\n case oids['RSASSA-PSS']:\n var hash, mgf;\n\n /* initialize mgf */\n hash = oids[cert.signatureParameters.mgf.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported MGF hash function.');\n error.oid = cert.signatureParameters.mgf.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n mgf = oids[cert.signatureParameters.mgf.algorithmOid];\n if(mgf === undefined || forge.mgf[mgf] === undefined) {\n var error = new Error('Unsupported MGF function.');\n error.oid = cert.signatureParameters.mgf.algorithmOid;\n error.name = mgf;\n throw error;\n }\n\n mgf = forge.mgf[mgf].create(forge.md[hash].create());\n\n /* initialize hash function */\n hash = oids[cert.signatureParameters.hash.algorithmOid];\n if(hash === undefined || forge.md[hash] === undefined) {\n var error = new Error('Unsupported RSASSA-PSS hash function.');\n error.oid = cert.signatureParameters.hash.algorithmOid;\n error.name = hash;\n throw error;\n }\n\n scheme = forge.pss.create(\n forge.md[hash].create(), mgf, cert.signatureParameters.saltLength\n );\n break;\n }\n\n // verify signature on cert using public key\n return cert.publicKey.verify(\n options.md.digest().getBytes(), options.signature, scheme\n );\n};\n\n/**\n * Converts an X.509 certificate from PEM format.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. This will scan the TBSCertificate part of the ASN.1\n * object while it is converted so it doesn't need to be converted back\n * to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certificate.\n */\npki.certificateFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE' &&\n msg.type !== 'X509 CERTIFICATE' &&\n msg.type !== 'TRUSTED CERTIFICATE') {\n var error = new Error(\n 'Could not convert certificate from PEM; PEM header type ' +\n 'is not \"CERTIFICATE\", \"X509 CERTIFICATE\", or \"TRUSTED CERTIFICATE\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error(\n 'Could not convert certificate from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificateFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts an X.509 certificate to PEM format.\n *\n * @param cert the certificate.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certificate.\n */\npki.certificateToPem = function(cert, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE',\n body: asn1.toDer(pki.certificateToAsn1(cert)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key from PEM format.\n *\n * @param pem the PEM-formatted public key.\n *\n * @return the public key.\n */\npki.publicKeyFromPem = function(pem) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'PUBLIC KEY' && msg.type !== 'RSA PUBLIC KEY') {\n var error = new Error('Could not convert public key from PEM; PEM header ' +\n 'type is not \"PUBLIC KEY\" or \"RSA PUBLIC KEY\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert public key from PEM; PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body);\n\n return pki.publicKeyFromAsn1(obj);\n};\n\n/**\n * Converts an RSA public key to PEM format (using a SubjectPublicKeyInfo).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToAsn1(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Converts an RSA public key to PEM format (using an RSAPublicKey).\n *\n * @param key the public key.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted public key.\n */\npki.publicKeyToRSAPublicKeyPem = function(key, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'RSA PUBLIC KEY',\n body: asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Gets a fingerprint for the given public key.\n *\n * @param options the options to use.\n * [md] the message digest object to use (defaults to forge.md.sha1).\n * [type] the type of fingerprint, such as 'RSAPublicKey',\n * 'SubjectPublicKeyInfo' (defaults to 'RSAPublicKey').\n * [encoding] an alternative output encoding, such as 'hex'\n * (defaults to none, outputs a byte buffer).\n * [delimiter] the delimiter to use between bytes for 'hex' encoded\n * output, eg: ':' (defaults to none).\n *\n * @return the fingerprint as a byte buffer or other encoding based on options.\n */\npki.getPublicKeyFingerprint = function(key, options) {\n options = options || {};\n var md = options.md || forge.md.sha1.create();\n var type = options.type || 'RSAPublicKey';\n\n var bytes;\n switch(type) {\n case 'RSAPublicKey':\n bytes = asn1.toDer(pki.publicKeyToRSAPublicKey(key)).getBytes();\n break;\n case 'SubjectPublicKeyInfo':\n bytes = asn1.toDer(pki.publicKeyToAsn1(key)).getBytes();\n break;\n default:\n throw new Error('Unknown fingerprint type \"' + options.type + '\".');\n }\n\n // hash public key bytes\n md.start();\n md.update(bytes);\n var digest = md.digest();\n if(options.encoding === 'hex') {\n var hex = digest.toHex();\n if(options.delimiter) {\n return hex.match(/.{2}/g).join(options.delimiter);\n }\n return hex;\n } else if(options.encoding === 'binary') {\n return digest.getBytes();\n } else if(options.encoding) {\n throw new Error('Unknown encoding \"' + options.encoding + '\".');\n }\n return digest;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from PEM format.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. This will scan the CertificationRequestInfo part of\n * the ASN.1 object while it is converted so it doesn't need to be converted\n * back to ASN.1-DER-encoding later.\n *\n * @param pem the PEM-formatted certificate.\n * @param computeHash true to compute the hash for verification.\n * @param strict true to be strict when checking ASN.1 value lengths, false to\n * allow truncated values (default: true).\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromPem = function(pem, computeHash, strict) {\n var msg = forge.pem.decode(pem)[0];\n\n if(msg.type !== 'CERTIFICATE REQUEST') {\n var error = new Error('Could not convert certification request from PEM; ' +\n 'PEM header type is not \"CERTIFICATE REQUEST\".');\n error.headerType = msg.type;\n throw error;\n }\n if(msg.procType && msg.procType.type === 'ENCRYPTED') {\n throw new Error('Could not convert certification request from PEM; ' +\n 'PEM is encrypted.');\n }\n\n // convert DER to ASN.1 object\n var obj = asn1.fromDer(msg.body, strict);\n\n return pki.certificationRequestFromAsn1(obj, computeHash);\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) to PEM format.\n *\n * @param csr the certification request.\n * @param maxline the maximum characters per line, defaults to 64.\n *\n * @return the PEM-formatted certification request.\n */\npki.certificationRequestToPem = function(csr, maxline) {\n // convert to ASN.1, then DER, then PEM-encode\n var msg = {\n type: 'CERTIFICATE REQUEST',\n body: asn1.toDer(pki.certificationRequestToAsn1(csr)).getBytes()\n };\n return forge.pem.encode(msg, {maxline: maxline});\n};\n\n/**\n * Creates an empty X.509v3 RSA certificate.\n *\n * @return the certificate.\n */\npki.createCertificate = function() {\n var cert = {};\n cert.version = 0x02;\n cert.serialNumber = '00';\n cert.signatureOid = null;\n cert.signature = null;\n cert.siginfo = {};\n cert.siginfo.algorithmOid = null;\n cert.validity = {};\n cert.validity.notBefore = new Date();\n cert.validity.notAfter = new Date();\n\n cert.issuer = {};\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = [];\n cert.issuer.hash = null;\n\n cert.subject = {};\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = [];\n cert.subject.hash = null;\n\n cert.extensions = [];\n cert.publicKey = null;\n cert.md = null;\n\n /**\n * Sets the subject of this certificate.\n *\n * @param attrs the array of subject attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setSubject = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.subject.attributes = attrs;\n delete cert.subject.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.subject.uniqueId = uniqueId;\n }\n cert.subject.hash = null;\n };\n\n /**\n * Sets the issuer of this certificate.\n *\n * @param attrs the array of issuer attributes to use.\n * @param uniqueId an optional a unique ID to use.\n */\n cert.setIssuer = function(attrs, uniqueId) {\n // set new attributes, clear hash\n _fillMissingFields(attrs);\n cert.issuer.attributes = attrs;\n delete cert.issuer.uniqueId;\n if(uniqueId) {\n // TODO: support arbitrary bit length ids\n cert.issuer.uniqueId = uniqueId;\n }\n cert.issuer.hash = null;\n };\n\n /**\n * Sets the extensions of this certificate.\n *\n * @param exts the array of extensions to use.\n */\n cert.setExtensions = function(exts) {\n for(var i = 0; i < exts.length; ++i) {\n _fillMissingExtensionFields(exts[i], {cert: cert});\n }\n // set new extensions\n cert.extensions = exts;\n };\n\n /**\n * Gets an extension by its name or id.\n *\n * @param options the name to use or an object with:\n * name the name to use.\n * id the id to use.\n *\n * @return the extension or null if not found.\n */\n cert.getExtension = function(options) {\n if(typeof options === 'string') {\n options = {name: options};\n }\n\n var rval = null;\n var ext;\n for(var i = 0; rval === null && i < cert.extensions.length; ++i) {\n ext = cert.extensions[i];\n if(options.id && ext.id === options.id) {\n rval = ext;\n } else if(options.name && ext.name === options.name) {\n rval = ext;\n }\n }\n return rval;\n };\n\n /**\n * Signs this certificate using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n cert.sign = function(key, md) {\n // TODO: get signature OID from private key\n cert.md = md || forge.md.sha1.create();\n var algorithmOid = oids[cert.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certificate digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = cert.md.algorithm;\n throw error;\n }\n cert.signatureOid = cert.siginfo.algorithmOid = algorithmOid;\n\n // get TBSCertificate, convert to DER\n cert.tbsCertificate = pki.getTBSCertificate(cert);\n var bytes = asn1.toDer(cert.tbsCertificate);\n\n // digest and sign\n cert.md.update(bytes.getBytes());\n cert.signature = key.sign(cert.md);\n };\n\n /**\n * Attempts verify the signature on the passed certificate using this\n * certificate's public key.\n *\n * @param child the certificate to verify.\n *\n * @return true if verified, false if not.\n */\n cert.verify = function(child) {\n var rval = false;\n\n if(!cert.issued(child)) {\n var issuer = child.issuer;\n var subject = cert.subject;\n var error = new Error(\n 'The parent certificate did not issue the given child ' +\n 'certificate; the child certificate\\'s issuer does not match the ' +\n 'parent\\'s subject.');\n error.expectedIssuer = subject.attributes;\n error.actualIssuer = issuer.attributes;\n throw error;\n }\n\n var md = child.md;\n if(md === null) {\n // create digest for OID signature types\n md = _createSignatureDigest({\n signatureOid: child.signatureOid,\n type: 'certificate'\n });\n\n // produce DER formatted TBSCertificate and digest it\n var tbsCertificate = child.tbsCertificate || pki.getTBSCertificate(child);\n var bytes = asn1.toDer(tbsCertificate);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n rval = _verifySignature({\n certificate: cert, md: md, signature: child.signature\n });\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's issuer matches the passed\n * certificate's subject. Note that no signature check is performed.\n *\n * @param parent the certificate to check.\n *\n * @return true if this certificate's issuer matches the passed certificate's\n * subject.\n */\n cert.isIssuer = function(parent) {\n var rval = false;\n\n var i = cert.issuer;\n var s = parent.subject;\n\n // compare hashes if present\n if(i.hash && s.hash) {\n rval = (i.hash === s.hash);\n } else if(i.attributes.length === s.attributes.length) {\n // all attributes are the same so issuer matches subject\n rval = true;\n var iattr, sattr;\n for(var n = 0; rval && n < i.attributes.length; ++n) {\n iattr = i.attributes[n];\n sattr = s.attributes[n];\n if(iattr.type !== sattr.type || iattr.value !== sattr.value) {\n // attribute mismatch\n rval = false;\n }\n }\n }\n\n return rval;\n };\n\n /**\n * Returns true if this certificate's subject matches the issuer of the\n * given certificate). Note that not signature check is performed.\n *\n * @param child the certificate to check.\n *\n * @return true if this certificate's subject matches the passed\n * certificate's issuer.\n */\n cert.issued = function(child) {\n return child.isIssuer(cert);\n };\n\n /**\n * Generates the subjectKeyIdentifier for this certificate as byte buffer.\n *\n * @return the subjectKeyIdentifier for this certificate as byte buffer.\n */\n cert.generateSubjectKeyIdentifier = function() {\n /* See: 4.2.1.2 section of the the RFC3280, keyIdentifier is either:\n\n (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the\n value of the BIT STRING subjectPublicKey (excluding the tag,\n length, and number of unused bits).\n\n (2) The keyIdentifier is composed of a four bit type field with\n the value 0100 followed by the least significant 60 bits of the\n SHA-1 hash of the value of the BIT STRING subjectPublicKey\n (excluding the tag, length, and number of unused bit string bits).\n */\n\n // skipping the tag, length, and number of unused bits is the same\n // as just using the RSAPublicKey (for RSA keys, which are the\n // only ones supported)\n return pki.getPublicKeyFingerprint(cert.publicKey, {type: 'RSAPublicKey'});\n };\n\n /**\n * Verifies the subjectKeyIdentifier extension value for this certificate\n * against its public key. If no extension is found, false will be\n * returned.\n *\n * @return true if verified, false if not.\n */\n cert.verifySubjectKeyIdentifier = function() {\n var oid = oids['subjectKeyIdentifier'];\n for(var i = 0; i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.id === oid) {\n var ski = cert.generateSubjectKeyIdentifier().getBytes();\n return (forge.util.hexToBytes(ext.subjectKeyIdentifier) === ski);\n }\n }\n return false;\n };\n\n return cert;\n};\n\n/**\n * Converts an X.509v3 RSA certificate from an ASN.1 object.\n *\n * Note: If the certificate is to be verified then compute hash should\n * be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the TBSCertificate part of the ASN.1\n * object needs to be scanned before the cert object is created.\n *\n * @param obj the asn1 representation of an X.509v3 RSA certificate.\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certificate.\n */\npki.certificateFromAsn1 = function(obj, computeHash) {\n // validate certificate and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, x509CertificateValidator, capture, errors)) {\n var error = new Error('Cannot read X.509 certificate. ' +\n 'ASN.1 object is not an X509v3 Certificate.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certificate\n var cert = pki.createCertificate();\n cert.version = capture.certVersion ?\n capture.certVersion.charCodeAt(0) : 0;\n var serial = forge.util.createBuffer(capture.certSerialNumber);\n cert.serialNumber = serial.toHex();\n cert.signatureOid = forge.asn1.derToOid(capture.certSignatureOid);\n cert.signatureParameters = _readSignatureParameters(\n cert.signatureOid, capture.certSignatureParams, true);\n cert.siginfo.algorithmOid = forge.asn1.derToOid(capture.certinfoSignatureOid);\n cert.siginfo.parameters = _readSignatureParameters(cert.siginfo.algorithmOid,\n capture.certinfoSignatureParams, false);\n cert.signature = capture.certSignature;\n\n var validity = [];\n if(capture.certValidity1UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity1UTCTime));\n }\n if(capture.certValidity2GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity2GeneralizedTime));\n }\n if(capture.certValidity3UTCTime !== undefined) {\n validity.push(asn1.utcTimeToDate(capture.certValidity3UTCTime));\n }\n if(capture.certValidity4GeneralizedTime !== undefined) {\n validity.push(asn1.generalizedTimeToDate(\n capture.certValidity4GeneralizedTime));\n }\n if(validity.length > 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; more ' +\n 'than two times were provided in the certificate.');\n }\n if(validity.length < 2) {\n throw new Error('Cannot read notBefore/notAfter validity times; they ' +\n 'were not provided as either UTCTime or GeneralizedTime.');\n }\n cert.validity.notBefore = validity[0];\n cert.validity.notAfter = validity[1];\n\n // keep TBSCertificate to preserve signature when exporting\n cert.tbsCertificate = capture.tbsCertificate;\n\n if(computeHash) {\n // create digest for OID signature type\n cert.md = _createSignatureDigest({\n signatureOid: cert.signatureOid,\n type: 'certificate'\n });\n\n // produce DER formatted TBSCertificate and digest it\n var bytes = asn1.toDer(cert.tbsCertificate);\n cert.md.update(bytes.getBytes());\n }\n\n // handle issuer, build issuer message digest\n var imd = forge.md.sha1.create();\n var ibytes = asn1.toDer(capture.certIssuer);\n imd.update(ibytes.getBytes());\n cert.issuer.getField = function(sn) {\n return _getAttribute(cert.issuer, sn);\n };\n cert.issuer.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.issuer.attributes.push(attr);\n };\n cert.issuer.attributes = pki.RDNAttributesAsArray(capture.certIssuer);\n if(capture.certIssuerUniqueId) {\n cert.issuer.uniqueId = capture.certIssuerUniqueId;\n }\n cert.issuer.hash = imd.digest().toHex();\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n var sbytes = asn1.toDer(capture.certSubject);\n smd.update(sbytes.getBytes());\n cert.subject.getField = function(sn) {\n return _getAttribute(cert.subject, sn);\n };\n cert.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n cert.subject.attributes.push(attr);\n };\n cert.subject.attributes = pki.RDNAttributesAsArray(capture.certSubject);\n if(capture.certSubjectUniqueId) {\n cert.subject.uniqueId = capture.certSubjectUniqueId;\n }\n cert.subject.hash = smd.digest().toHex();\n\n // handle extensions\n if(capture.certExtensions) {\n cert.extensions = pki.certificateExtensionsFromAsn1(capture.certExtensions);\n } else {\n cert.extensions = [];\n }\n\n // convert RSA public key from ASN.1\n cert.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n return cert;\n};\n\n/**\n * Converts an ASN.1 extensions object (with extension sequences as its\n * values) into an array of extension objects with types and values.\n *\n * Supported extensions:\n *\n * id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }\n * KeyUsage ::= BIT STRING {\n * digitalSignature (0),\n * nonRepudiation (1),\n * keyEncipherment (2),\n * dataEncipherment (3),\n * keyAgreement (4),\n * keyCertSign (5),\n * cRLSign (6),\n * encipherOnly (7),\n * decipherOnly (8)\n * }\n *\n * id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }\n * BasicConstraints ::= SEQUENCE {\n * cA BOOLEAN DEFAULT FALSE,\n * pathLenConstraint INTEGER (0..MAX) OPTIONAL\n * }\n *\n * subjectAltName EXTENSION ::= {\n * SYNTAX GeneralNames\n * IDENTIFIED BY id-ce-subjectAltName\n * }\n *\n * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName\n *\n * GeneralName ::= CHOICE {\n * otherName [0] INSTANCE OF OTHER-NAME,\n * rfc822Name [1] IA5String,\n * dNSName [2] IA5String,\n * x400Address [3] ORAddress,\n * directoryName [4] Name,\n * ediPartyName [5] EDIPartyName,\n * uniformResourceIdentifier [6] IA5String,\n * IPAddress [7] OCTET STRING,\n * registeredID [8] OBJECT IDENTIFIER\n * }\n *\n * OTHER-NAME ::= TYPE-IDENTIFIER\n *\n * EDIPartyName ::= SEQUENCE {\n * nameAssigner [0] DirectoryString {ub-name} OPTIONAL,\n * partyName [1] DirectoryString {ub-name}\n * }\n *\n * @param exts the extensions ASN.1 with extension sequences to parse.\n *\n * @return the array.\n */\npki.certificateExtensionsFromAsn1 = function(exts) {\n var rval = [];\n for(var i = 0; i < exts.value.length; ++i) {\n // get extension sequence\n var extseq = exts.value[i];\n for(var ei = 0; ei < extseq.value.length; ++ei) {\n rval.push(pki.certificateExtensionFromAsn1(extseq.value[ei]));\n }\n }\n\n return rval;\n};\n\n/**\n * Parses a single certificate extension from ASN.1.\n *\n * @param ext the extension in ASN.1 format.\n *\n * @return the parsed extension as an object.\n */\npki.certificateExtensionFromAsn1 = function(ext) {\n // an extension has:\n // [0] extnID OBJECT IDENTIFIER\n // [1] critical BOOLEAN DEFAULT FALSE\n // [2] extnValue OCTET STRING\n var e = {};\n e.id = asn1.derToOid(ext.value[0].value);\n e.critical = false;\n if(ext.value[1].type === asn1.Type.BOOLEAN) {\n e.critical = (ext.value[1].value.charCodeAt(0) !== 0x00);\n e.value = ext.value[2].value;\n } else {\n e.value = ext.value[1].value;\n }\n // if the oid is known, get its name\n if(e.id in oids) {\n e.name = oids[e.id];\n\n // handle key usage\n if(e.name === 'keyUsage') {\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n var b3 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n b3 = ev.value.length > 2 ? ev.value.charCodeAt(2) : 0;\n }\n // set flags\n e.digitalSignature = (b2 & 0x80) === 0x80;\n e.nonRepudiation = (b2 & 0x40) === 0x40;\n e.keyEncipherment = (b2 & 0x20) === 0x20;\n e.dataEncipherment = (b2 & 0x10) === 0x10;\n e.keyAgreement = (b2 & 0x08) === 0x08;\n e.keyCertSign = (b2 & 0x04) === 0x04;\n e.cRLSign = (b2 & 0x02) === 0x02;\n e.encipherOnly = (b2 & 0x01) === 0x01;\n e.decipherOnly = (b3 & 0x80) === 0x80;\n } else if(e.name === 'basicConstraints') {\n // handle basic constraints\n // get value as SEQUENCE\n var ev = asn1.fromDer(e.value);\n // get cA BOOLEAN flag (defaults to false)\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.BOOLEAN) {\n e.cA = (ev.value[0].value.charCodeAt(0) !== 0x00);\n } else {\n e.cA = false;\n }\n // get path length constraint\n var value = null;\n if(ev.value.length > 0 && ev.value[0].type === asn1.Type.INTEGER) {\n value = ev.value[0].value;\n } else if(ev.value.length > 1) {\n value = ev.value[1].value;\n }\n if(value !== null) {\n e.pathLenConstraint = asn1.derToInteger(value);\n }\n } else if(e.name === 'extKeyUsage') {\n // handle extKeyUsage\n // value is a SEQUENCE of OIDs\n var ev = asn1.fromDer(e.value);\n for(var vi = 0; vi < ev.value.length; ++vi) {\n var oid = asn1.derToOid(ev.value[vi].value);\n if(oid in oids) {\n e[oids[oid]] = true;\n } else {\n e[oid] = true;\n }\n }\n } else if(e.name === 'nsCertType') {\n // handle nsCertType\n // get value as BIT STRING\n var ev = asn1.fromDer(e.value);\n var b2 = 0x00;\n if(ev.value.length > 1) {\n // skip first byte, just indicates unused bits which\n // will be padded with 0s anyway\n // get bytes with flag bits\n b2 = ev.value.charCodeAt(1);\n }\n // set flags\n e.client = (b2 & 0x80) === 0x80;\n e.server = (b2 & 0x40) === 0x40;\n e.email = (b2 & 0x20) === 0x20;\n e.objsign = (b2 & 0x10) === 0x10;\n e.reserved = (b2 & 0x08) === 0x08;\n e.sslCA = (b2 & 0x04) === 0x04;\n e.emailCA = (b2 & 0x02) === 0x02;\n e.objCA = (b2 & 0x01) === 0x01;\n } else if(\n e.name === 'subjectAltName' ||\n e.name === 'issuerAltName') {\n // handle subjectAltName/issuerAltName\n e.altNames = [];\n\n // ev is a SYNTAX SEQUENCE\n var gn;\n var ev = asn1.fromDer(e.value);\n for(var n = 0; n < ev.value.length; ++n) {\n // get GeneralName\n gn = ev.value[n];\n\n var altName = {\n type: gn.type,\n value: gn.value\n };\n e.altNames.push(altName);\n\n // Note: Support for types 1,2,6,7,8\n switch(gn.type) {\n // rfc822Name\n case 1:\n // dNSName\n case 2:\n // uniformResourceIdentifier (URI)\n case 6:\n break;\n // IPAddress\n case 7:\n // convert to IPv4/IPv6 string representation\n altName.ip = forge.util.bytesToIP(gn.value);\n break;\n // registeredID\n case 8:\n altName.oid = asn1.derToOid(gn.value);\n break;\n default:\n // unsupported\n }\n }\n } else if(e.name === 'subjectKeyIdentifier') {\n // value is an OCTETSTRING w/the hash of the key-type specific\n // public key structure (eg: RSAPublicKey)\n var ev = asn1.fromDer(e.value);\n e.subjectKeyIdentifier = forge.util.bytesToHex(ev.value);\n }\n }\n return e;\n};\n\n/**\n * Converts a PKCS#10 certification request (CSR) from an ASN.1 object.\n *\n * Note: If the certification request is to be verified then compute hash\n * should be set to true. There is currently no implementation for converting\n * a certificate back to ASN.1 so the CertificationRequestInfo part of the\n * ASN.1 object needs to be scanned before the csr object is created.\n *\n * @param obj the asn1 representation of a PKCS#10 certification request (CSR).\n * @param computeHash true to compute the hash for verification.\n *\n * @return the certification request (CSR).\n */\npki.certificationRequestFromAsn1 = function(obj, computeHash) {\n // validate certification request and capture data\n var capture = {};\n var errors = [];\n if(!asn1.validate(obj, certificationRequestValidator, capture, errors)) {\n var error = new Error('Cannot read PKCS#10 certificate request. ' +\n 'ASN.1 object is not a PKCS#10 CertificationRequest.');\n error.errors = errors;\n throw error;\n }\n\n // get oid\n var oid = asn1.derToOid(capture.publicKeyOid);\n if(oid !== pki.oids.rsaEncryption) {\n throw new Error('Cannot read public key. OID is not RSA.');\n }\n\n // create certification request\n var csr = pki.createCertificationRequest();\n csr.version = capture.csrVersion ? capture.csrVersion.charCodeAt(0) : 0;\n csr.signatureOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.signatureParameters = _readSignatureParameters(\n csr.signatureOid, capture.csrSignatureParams, true);\n csr.siginfo.algorithmOid = forge.asn1.derToOid(capture.csrSignatureOid);\n csr.siginfo.parameters = _readSignatureParameters(\n csr.siginfo.algorithmOid, capture.csrSignatureParams, false);\n csr.signature = capture.csrSignature;\n\n // keep CertificationRequestInfo to preserve signature when exporting\n csr.certificationRequestInfo = capture.certificationRequestInfo;\n\n if(computeHash) {\n // create digest for OID signature type\n csr.md = _createSignatureDigest({\n signatureOid: csr.signatureOid,\n type: 'certification request'\n });\n\n // produce DER formatted CertificationRequestInfo and digest it\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n csr.md.update(bytes.getBytes());\n }\n\n // handle subject, build subject message digest\n var smd = forge.md.sha1.create();\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = pki.RDNAttributesAsArray(\n capture.certificationRequestInfoSubject, smd);\n csr.subject.hash = smd.digest().toHex();\n\n // convert RSA public key from ASN.1\n csr.publicKey = pki.publicKeyFromAsn1(capture.subjectPublicKeyInfo);\n\n // convert attributes from ASN.1\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.attributes = pki.CRIAttributesAsArray(\n capture.certificationRequestInfoAttributes || []);\n\n return csr;\n};\n\n/**\n * Creates an empty certification request (a CSR or certificate signing\n * request). Once created, its public key and attributes can be set and then\n * it can be signed.\n *\n * @return the empty certification request.\n */\npki.createCertificationRequest = function() {\n var csr = {};\n csr.version = 0x00;\n csr.signatureOid = null;\n csr.signature = null;\n csr.siginfo = {};\n csr.siginfo.algorithmOid = null;\n\n csr.subject = {};\n csr.subject.getField = function(sn) {\n return _getAttribute(csr.subject, sn);\n };\n csr.subject.addField = function(attr) {\n _fillMissingFields([attr]);\n csr.subject.attributes.push(attr);\n };\n csr.subject.attributes = [];\n csr.subject.hash = null;\n\n csr.publicKey = null;\n csr.attributes = [];\n csr.getAttribute = function(sn) {\n return _getAttribute(csr, sn);\n };\n csr.addAttribute = function(attr) {\n _fillMissingFields([attr]);\n csr.attributes.push(attr);\n };\n csr.md = null;\n\n /**\n * Sets the subject of this certification request.\n *\n * @param attrs the array of subject attributes to use.\n */\n csr.setSubject = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.subject.attributes = attrs;\n csr.subject.hash = null;\n };\n\n /**\n * Sets the attributes of this certification request.\n *\n * @param attrs the array of attributes to use.\n */\n csr.setAttributes = function(attrs) {\n // set new attributes\n _fillMissingFields(attrs);\n csr.attributes = attrs;\n };\n\n /**\n * Signs this certification request using the given private key.\n *\n * @param key the private key to sign with.\n * @param md the message digest object to use (defaults to forge.md.sha1).\n */\n csr.sign = function(key, md) {\n // TODO: get signature OID from private key\n csr.md = md || forge.md.sha1.create();\n var algorithmOid = oids[csr.md.algorithm + 'WithRSAEncryption'];\n if(!algorithmOid) {\n var error = new Error('Could not compute certification request digest. ' +\n 'Unknown message digest algorithm OID.');\n error.algorithm = csr.md.algorithm;\n throw error;\n }\n csr.signatureOid = csr.siginfo.algorithmOid = algorithmOid;\n\n // get CertificationRequestInfo, convert to DER\n csr.certificationRequestInfo = pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(csr.certificationRequestInfo);\n\n // digest and sign\n csr.md.update(bytes.getBytes());\n csr.signature = key.sign(csr.md);\n };\n\n /**\n * Attempts verify the signature on the passed certification request using\n * its public key.\n *\n * A CSR that has been exported to a file in PEM format can be verified using\n * OpenSSL using this command:\n *\n * openssl req -in -verify -noout -text\n *\n * @return true if verified, false if not.\n */\n csr.verify = function() {\n var rval = false;\n\n var md = csr.md;\n if(md === null) {\n md = _createSignatureDigest({\n signatureOid: csr.signatureOid,\n type: 'certification request'\n });\n\n // produce DER formatted CertificationRequestInfo and digest it\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n var bytes = asn1.toDer(cri);\n md.update(bytes.getBytes());\n }\n\n if(md !== null) {\n rval = _verifySignature({\n certificate: csr, md: md, signature: csr.signature\n });\n }\n\n return rval;\n };\n\n return csr;\n};\n\n/**\n * Converts an X.509 subject or issuer to an ASN.1 RDNSequence.\n *\n * @param obj the subject or issuer (distinguished name).\n *\n * @return the ASN.1 RDNSequence.\n */\nfunction _dnToAsn1(obj) {\n // create an empty RDNSequence\n var rval = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // iterate over attributes\n var attr, set;\n var attrs = obj.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.PRINTABLESTRING;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n // FIXME: handle more encodings\n }\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n set = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n // AttributeValue\n asn1.create(asn1.Class.UNIVERSAL, valueTagClass, false, value)\n ])\n ]);\n rval.value.push(set);\n }\n\n return rval;\n}\n\n/**\n * Gets all printable attributes (typically of an issuer or subject) in a\n * simplified JSON format for display.\n *\n * @param attrs the attributes.\n *\n * @return the JSON for display.\n */\nfunction _getAttributesAsJson(attrs) {\n var rval = {};\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n if(attr.shortName && (\n attr.valueTagClass === asn1.Type.UTF8 ||\n attr.valueTagClass === asn1.Type.PRINTABLESTRING ||\n attr.valueTagClass === asn1.Type.IA5STRING)) {\n var value = attr.value;\n if(attr.valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(attr.value);\n }\n if(!(attr.shortName in rval)) {\n rval[attr.shortName] = value;\n } else if(forge.util.isArray(rval[attr.shortName])) {\n rval[attr.shortName].push(value);\n } else {\n rval[attr.shortName] = [rval[attr.shortName], value];\n }\n }\n }\n return rval;\n}\n\n/**\n * Fills in missing fields in attributes.\n *\n * @param attrs the attributes to fill missing fields in.\n */\nfunction _fillMissingFields(attrs) {\n var attr;\n for(var i = 0; i < attrs.length; ++i) {\n attr = attrs[i];\n\n // populate missing name\n if(typeof attr.name === 'undefined') {\n if(attr.type && attr.type in pki.oids) {\n attr.name = pki.oids[attr.type];\n } else if(attr.shortName && attr.shortName in _shortNames) {\n attr.name = pki.oids[_shortNames[attr.shortName]];\n }\n }\n\n // populate missing type (OID)\n if(typeof attr.type === 'undefined') {\n if(attr.name && attr.name in pki.oids) {\n attr.type = pki.oids[attr.name];\n } else {\n var error = new Error('Attribute type not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n\n // populate missing shortname\n if(typeof attr.shortName === 'undefined') {\n if(attr.name && attr.name in _shortNames) {\n attr.shortName = _shortNames[attr.name];\n }\n }\n\n // convert extensions to value\n if(attr.type === oids.extensionRequest) {\n attr.valueConstructed = true;\n attr.valueTagClass = asn1.Type.SEQUENCE;\n if(!attr.value && attr.extensions) {\n attr.value = [];\n for(var ei = 0; ei < attr.extensions.length; ++ei) {\n attr.value.push(pki.certificateExtensionToAsn1(\n _fillMissingExtensionFields(attr.extensions[ei])));\n }\n }\n }\n\n if(typeof attr.value === 'undefined') {\n var error = new Error('Attribute value not specified.');\n error.attribute = attr;\n throw error;\n }\n }\n}\n\n/**\n * Fills in missing fields in certificate extensions.\n *\n * @param e the extension.\n * @param [options] the options to use.\n * [cert] the certificate the extensions are for.\n *\n * @return the extension.\n */\nfunction _fillMissingExtensionFields(e, options) {\n options = options || {};\n\n // populate missing name\n if(typeof e.name === 'undefined') {\n if(e.id && e.id in pki.oids) {\n e.name = pki.oids[e.id];\n }\n }\n\n // populate missing id\n if(typeof e.id === 'undefined') {\n if(e.name && e.name in pki.oids) {\n e.id = pki.oids[e.name];\n } else {\n var error = new Error('Extension ID not specified.');\n error.extension = e;\n throw error;\n }\n }\n\n if(typeof e.value !== 'undefined') {\n return e;\n }\n\n // handle missing value:\n\n // value is a BIT STRING\n if(e.name === 'keyUsage') {\n // build flags\n var unused = 0;\n var b2 = 0x00;\n var b3 = 0x00;\n if(e.digitalSignature) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.nonRepudiation) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.keyEncipherment) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.dataEncipherment) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.keyAgreement) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.keyCertSign) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.cRLSign) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.encipherOnly) {\n b2 |= 0x01;\n unused = 0;\n }\n if(e.decipherOnly) {\n b3 |= 0x80;\n unused = 7;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b3 !== 0) {\n value += String.fromCharCode(b2) + String.fromCharCode(b3);\n } else if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'basicConstraints') {\n // basicConstraints is a SEQUENCE\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n // cA BOOLEAN flag defaults to false\n if(e.cA) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n if('pathLenConstraint' in e) {\n e.value.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(e.pathLenConstraint).getBytes()));\n }\n } else if(e.name === 'extKeyUsage') {\n // extKeyUsage is a SEQUENCE of OIDs\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n for(var key in e) {\n if(e[key] !== true) {\n continue;\n }\n // key is name in OID map\n if(key in oids) {\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(oids[key]).getBytes()));\n } else if(key.indexOf('.') !== -1) {\n // assume key is an OID\n seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID,\n false, asn1.oidToDer(key).getBytes()));\n }\n }\n } else if(e.name === 'nsCertType') {\n // nsCertType is a BIT STRING\n // build flags\n var unused = 0;\n var b2 = 0x00;\n\n if(e.client) {\n b2 |= 0x80;\n unused = 7;\n }\n if(e.server) {\n b2 |= 0x40;\n unused = 6;\n }\n if(e.email) {\n b2 |= 0x20;\n unused = 5;\n }\n if(e.objsign) {\n b2 |= 0x10;\n unused = 4;\n }\n if(e.reserved) {\n b2 |= 0x08;\n unused = 3;\n }\n if(e.sslCA) {\n b2 |= 0x04;\n unused = 2;\n }\n if(e.emailCA) {\n b2 |= 0x02;\n unused = 1;\n }\n if(e.objCA) {\n b2 |= 0x01;\n unused = 0;\n }\n\n // create bit string\n var value = String.fromCharCode(unused);\n if(b2 !== 0) {\n value += String.fromCharCode(b2);\n }\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value);\n } else if(e.name === 'subjectAltName' || e.name === 'issuerAltName') {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n e.value.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n } else if(e.name === 'nsComment' && options.cert) {\n // sanity check value is ASCII (req'd) and not too big\n if(!(/^[\\x00-\\x7F]*$/.test(e.comment)) ||\n (e.comment.length < 1) || (e.comment.length > 128)) {\n throw new Error('Invalid \"nsComment\" content.');\n }\n // IA5STRING opaque comment\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.IA5STRING, false, e.comment);\n } else if(e.name === 'subjectKeyIdentifier' && options.cert) {\n var ski = options.cert.generateSubjectKeyIdentifier();\n e.subjectKeyIdentifier = ski.toHex();\n // OCTETSTRING w/digest\n e.value = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ski.getBytes());\n } else if(e.name === 'authorityKeyIdentifier' && options.cert) {\n // SYNTAX SEQUENCE\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n if(e.keyIdentifier) {\n var keyIdentifier = (e.keyIdentifier === true ?\n options.cert.generateSubjectKeyIdentifier().getBytes() :\n e.keyIdentifier);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, false, keyIdentifier));\n }\n\n if(e.authorityCertIssuer) {\n var authorityCertIssuer = [\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 4, true, [\n _dnToAsn1(e.authorityCertIssuer === true ?\n options.cert.issuer : e.authorityCertIssuer)\n ])\n ];\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, authorityCertIssuer));\n }\n\n if(e.serialNumber) {\n var serialNumber = forge.util.hexToBytes(e.serialNumber === true ?\n options.cert.serialNumber : e.serialNumber);\n seq.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, false, serialNumber));\n }\n } else if(e.name === 'cRLDistributionPoints') {\n e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n var seq = e.value.value;\n\n // Create sub SEQUENCE of DistributionPointName\n var subSeq = asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // Create fullName CHOICE\n var fullNameGeneralNames = asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n var altName;\n for(var n = 0; n < e.altNames.length; ++n) {\n altName = e.altNames[n];\n var value = altName.value;\n // handle IP\n if(altName.type === 7 && altName.ip) {\n value = forge.util.bytesFromIP(altName.ip);\n if(value === null) {\n var error = new Error(\n 'Extension \"ip\" value is not a valid IPv4 or IPv6 address.');\n error.extension = e;\n throw error;\n }\n } else if(altName.type === 8) {\n // handle OID\n if(altName.oid) {\n value = asn1.oidToDer(asn1.oidToDer(altName.oid));\n } else {\n // deprecated ... convert value to OID\n value = asn1.oidToDer(value);\n }\n }\n fullNameGeneralNames.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, altName.type, false,\n value));\n }\n\n // Add to the parent SEQUENCE\n subSeq.value.push(asn1.create(\n asn1.Class.CONTEXT_SPECIFIC, 0, true, [fullNameGeneralNames]));\n seq.push(subSeq);\n }\n\n // ensure value has been defined by now\n if(typeof e.value === 'undefined') {\n var error = new Error('Extension value not specified.');\n error.extension = e;\n throw error;\n }\n\n return e;\n}\n\n/**\n * Convert signature parameters object to ASN.1\n *\n * @param {String} oid Signature algorithm OID\n * @param params The signature parametrs object\n * @return ASN.1 object representing signature parameters\n */\nfunction _signatureParametersToAsn1(oid, params) {\n switch(oid) {\n case oids['RSASSA-PSS']:\n var parts = [];\n\n if(params.hash.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ]));\n }\n\n if(params.mgf.algorithmOid !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(params.mgf.hash.algorithmOid).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '')\n ])\n ])\n ]));\n }\n\n if(params.saltLength !== undefined) {\n parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(params.saltLength).getBytes())\n ]));\n }\n\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, parts);\n\n default:\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, '');\n }\n}\n\n/**\n * Converts a certification request's attributes to an ASN.1 set of\n * CRIAttributes.\n *\n * @param csr certification request.\n *\n * @return the ASN.1 set of CRIAttributes.\n */\nfunction _CRIAttributesToAsn1(csr) {\n // create an empty context-specific container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []);\n\n // no attributes, return empty container\n if(csr.attributes.length === 0) {\n return rval;\n }\n\n // each attribute has a sequence with a type and a set of values\n var attrs = csr.attributes;\n for(var i = 0; i < attrs.length; ++i) {\n var attr = attrs[i];\n var value = attr.value;\n\n // reuse tag class for attribute value if available\n var valueTagClass = asn1.Type.UTF8;\n if('valueTagClass' in attr) {\n valueTagClass = attr.valueTagClass;\n }\n if(valueTagClass === asn1.Type.UTF8) {\n value = forge.util.encodeUtf8(value);\n }\n var valueConstructed = false;\n if('valueConstructed' in attr) {\n valueConstructed = attr.valueConstructed;\n }\n // FIXME: handle more encodings\n\n // create a RelativeDistinguishedName set\n // each value in the set is an AttributeTypeAndValue first\n // containing the type (an OID) and second the value\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // AttributeType\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(attr.type).getBytes()),\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [\n // AttributeValue\n asn1.create(\n asn1.Class.UNIVERSAL, valueTagClass, valueConstructed, value)\n ])\n ]);\n rval.value.push(seq);\n }\n\n return rval;\n}\n\nvar jan_1_1950 = new Date('1950-01-01T00:00:00Z');\nvar jan_1_2050 = new Date('2050-01-01T00:00:00Z');\n\n/**\n * Converts a Date object to ASN.1\n * Handles the different format before and after 1st January 2050\n *\n * @param date date object.\n *\n * @return the ASN.1 object representing the date.\n */\nfunction _dateToAsn1(date) {\n if(date >= jan_1_1950 && date < jan_1_2050) {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false,\n asn1.dateToUtcTime(date));\n } else {\n return asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false,\n asn1.dateToGeneralizedTime(date));\n }\n}\n\n/**\n * Gets the ASN.1 TBSCertificate part of an X.509v3 certificate.\n *\n * @param cert the certificate.\n *\n * @return the asn1 TBSCertificate.\n */\npki.getTBSCertificate = function(cert) {\n // TBSCertificate\n var notBefore = _dateToAsn1(cert.validity.notBefore);\n var notAfter = _dateToAsn1(cert.validity.notAfter);\n var tbs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [\n // integer\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(cert.version).getBytes())\n ]),\n // serialNumber\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n forge.util.hexToBytes(cert.serialNumber)),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.siginfo.algorithmOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(\n cert.siginfo.algorithmOid, cert.siginfo.parameters)\n ]),\n // issuer\n _dnToAsn1(cert.issuer),\n // validity\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n notBefore,\n notAfter\n ]),\n // subject\n _dnToAsn1(cert.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(cert.publicKey)\n ]);\n\n if(cert.issuer.uniqueId) {\n // issuerUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.issuer.uniqueId\n )\n ])\n );\n }\n if(cert.subject.uniqueId) {\n // subjectUniqueID (optional)\n tbs.value.push(\n asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n // TODO: support arbitrary bit length ids\n String.fromCharCode(0x00) +\n cert.subject.uniqueId\n )\n ])\n );\n }\n\n if(cert.extensions.length > 0) {\n // extensions (optional)\n tbs.value.push(pki.certificateExtensionsToAsn1(cert.extensions));\n }\n\n return tbs;\n};\n\n/**\n * Gets the ASN.1 CertificationRequestInfo part of a\n * PKCS#10 CertificationRequest.\n *\n * @param csr the certification request.\n *\n * @return the asn1 CertificationRequestInfo.\n */\npki.getCertificationRequestInfo = function(csr) {\n // CertificationRequestInfo\n var cri = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // version\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false,\n asn1.integerToDer(csr.version).getBytes()),\n // subject\n _dnToAsn1(csr.subject),\n // SubjectPublicKeyInfo\n pki.publicKeyToAsn1(csr.publicKey),\n // attributes\n _CRIAttributesToAsn1(csr)\n ]);\n\n return cri;\n};\n\n/**\n * Converts a DistinguishedName (subject or issuer) to an ASN.1 object.\n *\n * @param dn the DistinguishedName.\n *\n * @return the asn1 representation of a DistinguishedName.\n */\npki.distinguishedNameToAsn1 = function(dn) {\n return _dnToAsn1(dn);\n};\n\n/**\n * Converts an X.509v3 RSA certificate to an ASN.1 object.\n *\n * @param cert the certificate.\n *\n * @return the asn1 representation of an X.509v3 RSA certificate.\n */\npki.certificateToAsn1 = function(cert) {\n // prefer cached TBSCertificate over generating one\n var tbsCertificate = cert.tbsCertificate || pki.getTBSCertificate(cert);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // TBSCertificate\n tbsCertificate,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(cert.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(cert.signatureOid, cert.signatureParameters)\n ]),\n // SignatureValue\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + cert.signature)\n ]);\n};\n\n/**\n * Converts X.509v3 certificate extensions to ASN.1.\n *\n * @param exts the extensions to convert.\n *\n * @return the extensions in ASN.1 format.\n */\npki.certificateExtensionsToAsn1 = function(exts) {\n // create top-level extension container\n var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 3, true, []);\n\n // create extension sequence (stores a sequence for each extension)\n var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n rval.value.push(seq);\n\n for(var i = 0; i < exts.length; ++i) {\n seq.value.push(pki.certificateExtensionToAsn1(exts[i]));\n }\n\n return rval;\n};\n\n/**\n * Converts a single certificate extension to ASN.1.\n *\n * @param ext the extension to convert.\n *\n * @return the extension in ASN.1 format.\n */\npki.certificateExtensionToAsn1 = function(ext) {\n // create a sequence for each extension\n var extseq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []);\n\n // extnID (OID)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(ext.id).getBytes()));\n\n // critical defaults to false\n if(ext.critical) {\n // critical BOOLEAN DEFAULT FALSE\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false,\n String.fromCharCode(0xFF)));\n }\n\n var value = ext.value;\n if(typeof ext.value !== 'string') {\n // value is asn.1\n value = asn1.toDer(value).getBytes();\n }\n\n // extnValue (OCTET STRING)\n extseq.value.push(asn1.create(\n asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, value));\n\n return extseq;\n};\n\n/**\n * Converts a PKCS#10 certification request to an ASN.1 object.\n *\n * @param csr the certification request.\n *\n * @return the asn1 representation of a certification request.\n */\npki.certificationRequestToAsn1 = function(csr) {\n // prefer cached CertificationRequestInfo over generating one\n var cri = csr.certificationRequestInfo ||\n pki.getCertificationRequestInfo(csr);\n\n // Certificate\n return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // CertificationRequestInfo\n cri,\n // AlgorithmIdentifier (signature algorithm)\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [\n // algorithm\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false,\n asn1.oidToDer(csr.signatureOid).getBytes()),\n // parameters\n _signatureParametersToAsn1(csr.signatureOid, csr.signatureParameters)\n ]),\n // signature\n asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false,\n String.fromCharCode(0x00) + csr.signature)\n ]);\n};\n\n/**\n * Creates a CA store.\n *\n * @param certs an optional array of certificate objects or PEM-formatted\n * certificate strings to add to the CA store.\n *\n * @return the CA store.\n */\npki.createCaStore = function(certs) {\n // create CA store\n var caStore = {\n // stored certificates\n certs: {}\n };\n\n /**\n * Gets the certificate that issued the passed certificate or its\n * 'parent'.\n *\n * @param cert the certificate to get the parent for.\n *\n * @return the parent certificate or null if none was found.\n */\n caStore.getIssuer = function(cert) {\n var rval = getBySubject(cert.issuer);\n\n // see if there are multiple matches\n /*if(forge.util.isArray(rval)) {\n // TODO: resolve multiple matches by checking\n // authorityKey/subjectKey/issuerUniqueID/other identifiers, etc.\n // FIXME: or alternatively do authority key mapping\n // if possible (X.509v1 certs can't work?)\n throw new Error('Resolving multiple issuer matches not implemented yet.');\n }*/\n\n return rval;\n };\n\n /**\n * Adds a trusted certificate to the store.\n *\n * @param cert the certificate to add as a trusted certificate (either a\n * pki.certificate object or a PEM-formatted certificate).\n */\n caStore.addCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n ensureSubjectHasHash(cert.subject);\n\n if(!caStore.hasCertificate(cert)) { // avoid duplicate certificates in store\n if(cert.subject.hash in caStore.certs) {\n // subject hash already exists, append to array\n var tmp = caStore.certs[cert.subject.hash];\n if(!forge.util.isArray(tmp)) {\n tmp = [tmp];\n }\n tmp.push(cert);\n caStore.certs[cert.subject.hash] = tmp;\n } else {\n caStore.certs[cert.subject.hash] = cert;\n }\n }\n };\n\n /**\n * Checks to see if the given certificate is in the store.\n *\n * @param cert the certificate to check (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return true if the certificate is in the store, false if not.\n */\n caStore.hasCertificate = function(cert) {\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n\n var match = getBySubject(cert.subject);\n if(!match) {\n return false;\n }\n if(!forge.util.isArray(match)) {\n match = [match];\n }\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n return true;\n }\n }\n return false;\n };\n\n /**\n * Lists all of the certificates kept in the store.\n *\n * @return an array of all of the pki.certificate objects in the store.\n */\n caStore.listAllCertificates = function() {\n var certList = [];\n\n for(var hash in caStore.certs) {\n if(caStore.certs.hasOwnProperty(hash)) {\n var value = caStore.certs[hash];\n if(!forge.util.isArray(value)) {\n certList.push(value);\n } else {\n for(var i = 0; i < value.length; ++i) {\n certList.push(value[i]);\n }\n }\n }\n }\n\n return certList;\n };\n\n /**\n * Removes a certificate from the store.\n *\n * @param cert the certificate to remove (either a pki.certificate or a\n * PEM-formatted certificate).\n *\n * @return the certificate that was removed or null if the certificate\n * wasn't in store.\n */\n caStore.removeCertificate = function(cert) {\n var result;\n\n // convert from pem if necessary\n if(typeof cert === 'string') {\n cert = forge.pki.certificateFromPem(cert);\n }\n ensureSubjectHasHash(cert.subject);\n if(!caStore.hasCertificate(cert)) {\n return null;\n }\n\n var match = getBySubject(cert.subject);\n\n if(!forge.util.isArray(match)) {\n result = caStore.certs[cert.subject.hash];\n delete caStore.certs[cert.subject.hash];\n return result;\n }\n\n // compare DER-encoding of certificates\n var der1 = asn1.toDer(pki.certificateToAsn1(cert)).getBytes();\n for(var i = 0; i < match.length; ++i) {\n var der2 = asn1.toDer(pki.certificateToAsn1(match[i])).getBytes();\n if(der1 === der2) {\n result = match[i];\n match.splice(i, 1);\n }\n }\n if(match.length === 0) {\n delete caStore.certs[cert.subject.hash];\n }\n\n return result;\n };\n\n function getBySubject(subject) {\n ensureSubjectHasHash(subject);\n return caStore.certs[subject.hash] || null;\n }\n\n function ensureSubjectHasHash(subject) {\n // produce subject hash if it doesn't exist\n if(!subject.hash) {\n var md = forge.md.sha1.create();\n subject.attributes = pki.RDNAttributesAsArray(_dnToAsn1(subject), md);\n subject.hash = md.digest().toHex();\n }\n }\n\n // auto-add passed in certs\n if(certs) {\n // parse PEM-formatted certificates as necessary\n for(var i = 0; i < certs.length; ++i) {\n var cert = certs[i];\n caStore.addCertificate(cert);\n }\n }\n\n return caStore;\n};\n\n/**\n * Certificate verification errors, based on TLS.\n */\npki.certificateError = {\n bad_certificate: 'forge.pki.BadCertificate',\n unsupported_certificate: 'forge.pki.UnsupportedCertificate',\n certificate_revoked: 'forge.pki.CertificateRevoked',\n certificate_expired: 'forge.pki.CertificateExpired',\n certificate_unknown: 'forge.pki.CertificateUnknown',\n unknown_ca: 'forge.pki.UnknownCertificateAuthority'\n};\n\n/**\n * Verifies a certificate chain against the given Certificate Authority store\n * with an optional custom verify callback.\n *\n * @param caStore a certificate store to verify against.\n * @param chain the certificate chain to verify, with the root or highest\n * authority at the end (an array of certificates).\n * @param options a callback to be called for every certificate in the chain or\n * an object with:\n * verify a callback to be called for every certificate in the\n * chain\n * validityCheckDate the date against which the certificate\n * validity period should be checked. Pass null to not check\n * the validity period. By default, the current date is used.\n *\n * The verify callback has the following signature:\n *\n * verified - Set to true if certificate was verified, otherwise the\n * pki.certificateError for why the certificate failed.\n * depth - The current index in the chain, where 0 is the end point's cert.\n * certs - The certificate chain, *NOTE* an empty chain indicates an anonymous\n * end point.\n *\n * The function returns true on success and on failure either the appropriate\n * pki.certificateError or an object with 'error' set to the appropriate\n * pki.certificateError and 'message' set to a custom error message.\n *\n * @return true if successful, error thrown if not.\n */\npki.verifyCertificateChain = function(caStore, chain, options) {\n /* From: RFC3280 - Internet X.509 Public Key Infrastructure Certificate\n Section 6: Certification Path Validation\n See inline parentheticals related to this particular implementation.\n\n The primary goal of path validation is to verify the binding between\n a subject distinguished name or a subject alternative name and subject\n public key, as represented in the end entity certificate, based on the\n public key of the trust anchor. This requires obtaining a sequence of\n certificates that support that binding. That sequence should be provided\n in the passed 'chain'. The trust anchor should be in the given CA\n store. The 'end entity' certificate is the certificate provided by the\n end point (typically a server) and is the first in the chain.\n\n To meet this goal, the path validation process verifies, among other\n things, that a prospective certification path (a sequence of n\n certificates or a 'chain') satisfies the following conditions:\n\n (a) for all x in {1, ..., n-1}, the subject of certificate x is\n the issuer of certificate x+1;\n\n (b) certificate 1 is issued by the trust anchor;\n\n (c) certificate n is the certificate to be validated; and\n\n (d) for all x in {1, ..., n}, the certificate was valid at the\n time in question.\n\n Note that here 'n' is index 0 in the chain and 1 is the last certificate\n in the chain and it must be signed by a certificate in the connection's\n CA store.\n\n The path validation process also determines the set of certificate\n policies that are valid for this path, based on the certificate policies\n extension, policy mapping extension, policy constraints extension, and\n inhibit any-policy extension.\n\n Note: Policy mapping extension not supported (Not Required).\n\n Note: If the certificate has an unsupported critical extension, then it\n must be rejected.\n\n Note: A certificate is self-issued if the DNs that appear in the subject\n and issuer fields are identical and are not empty.\n\n The path validation algorithm assumes the following seven inputs are\n provided to the path processing logic. What this specific implementation\n will use is provided parenthetically:\n\n (a) a prospective certification path of length n (the 'chain')\n (b) the current date/time: ('now').\n (c) user-initial-policy-set: A set of certificate policy identifiers\n naming the policies that are acceptable to the certificate user.\n The user-initial-policy-set contains the special value any-policy\n if the user is not concerned about certificate policy\n (Not implemented. Any policy is accepted).\n (d) trust anchor information, describing a CA that serves as a trust\n anchor for the certification path. The trust anchor information\n includes:\n\n (1) the trusted issuer name,\n (2) the trusted public key algorithm,\n (3) the trusted public key, and\n (4) optionally, the trusted public key parameters associated\n with the public key.\n\n (Trust anchors are provided via certificates in the CA store).\n\n The trust anchor information may be provided to the path processing\n procedure in the form of a self-signed certificate. The trusted anchor\n information is trusted because it was delivered to the path processing\n procedure by some trustworthy out-of-band procedure. If the trusted\n public key algorithm requires parameters, then the parameters are\n provided along with the trusted public key (No parameters used in this\n implementation).\n\n (e) initial-policy-mapping-inhibit, which indicates if policy mapping is\n allowed in the certification path.\n (Not implemented, no policy checking)\n\n (f) initial-explicit-policy, which indicates if the path must be valid\n for at least one of the certificate policies in the user-initial-\n policy-set.\n (Not implemented, no policy checking)\n\n (g) initial-any-policy-inhibit, which indicates whether the\n anyPolicy OID should be processed if it is included in a\n certificate.\n (Not implemented, so any policy is valid provided that it is\n not marked as critical) */\n\n /* Basic Path Processing:\n\n For each certificate in the 'chain', the following is checked:\n\n 1. The certificate validity period includes the current time.\n 2. The certificate was signed by its parent (where the parent is either\n the next in the chain or from the CA store). Allow processing to\n continue to the next step if no parent is found but the certificate is\n in the CA store.\n 3. TODO: The certificate has not been revoked.\n 4. The certificate issuer name matches the parent's subject name.\n 5. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is within one of the permitted subtrees of X.500 distinguished names\n and that each of the alternative names in the subjectAltName extension\n (critical or non-critical) is within one of the permitted subtrees for\n that name type.\n 6. TODO: If the certificate is self-issued and not the final certificate\n in the chain, skip this step, otherwise verify that the subject name\n is not within one of the excluded subtrees for X.500 distinguished\n names and none of the subjectAltName extension names are excluded for\n that name type.\n 7. The other steps in the algorithm for basic path processing involve\n handling the policy extension which is not presently supported in this\n implementation. Instead, if a critical policy extension is found, the\n certificate is rejected as not supported.\n 8. If the certificate is not the first or if its the only certificate in\n the chain (having no parent from the CA store or is self-signed) and it\n has a critical key usage extension, verify that the keyCertSign bit is\n set. If the key usage extension exists, verify that the basic\n constraints extension exists. If the basic constraints extension exists,\n verify that the cA flag is set. If pathLenConstraint is set, ensure that\n the number of certificates that precede in the chain (come earlier\n in the chain as implemented below), excluding the very first in the\n chain (typically the end-entity one), isn't greater than the\n pathLenConstraint. This constraint limits the number of intermediate\n CAs that may appear below a CA before only end-entity certificates\n may be issued. */\n\n // if a verify callback is passed as the third parameter, package it within\n // the options object. This is to support a legacy function signature that\n // expected the verify callback as the third parameter.\n if(typeof options === 'function') {\n options = {verify: options};\n }\n options = options || {};\n\n // copy cert chain references to another array to protect against changes\n // in verify callback\n chain = chain.slice(0);\n var certs = chain.slice(0);\n\n var validityCheckDate = options.validityCheckDate;\n // if no validityCheckDate is specified, default to the current date. Make\n // sure to maintain the value null because it indicates that the validity\n // period should not be checked.\n if(typeof validityCheckDate === 'undefined') {\n validityCheckDate = new Date();\n }\n\n // verify each cert in the chain using its parent, where the parent\n // is either the next in the chain or from the CA store\n var first = true;\n var error = null;\n var depth = 0;\n do {\n var cert = chain.shift();\n var parent = null;\n var selfSigned = false;\n\n if(validityCheckDate) {\n // 1. check valid time\n if(validityCheckDate < cert.validity.notBefore ||\n validityCheckDate > cert.validity.notAfter) {\n error = {\n message: 'Certificate is not valid yet or has expired.',\n error: pki.certificateError.certificate_expired,\n notBefore: cert.validity.notBefore,\n notAfter: cert.validity.notAfter,\n // TODO: we might want to reconsider renaming 'now' to\n // 'validityCheckDate' should this API be changed in the future.\n now: validityCheckDate\n };\n }\n }\n\n // 2. verify with parent from chain or CA store\n if(error === null) {\n parent = chain[0] || caStore.getIssuer(cert);\n if(parent === null) {\n // check for self-signed cert\n if(cert.isIssuer(cert)) {\n selfSigned = true;\n parent = cert;\n }\n }\n\n if(parent) {\n // FIXME: current CA store implementation might have multiple\n // certificates where the issuer can't be determined from the\n // certificate (happens rarely with, eg: old certificates) so normalize\n // by always putting parents into an array\n // TODO: there's may be an extreme degenerate case currently uncovered\n // where an old intermediate certificate seems to have a matching parent\n // but none of the parents actually verify ... but the intermediate\n // is in the CA and it should pass this check; needs investigation\n var parents = parent;\n if(!forge.util.isArray(parents)) {\n parents = [parents];\n }\n\n // try to verify with each possible parent (typically only one)\n var verified = false;\n while(!verified && parents.length > 0) {\n parent = parents.shift();\n try {\n verified = parent.verify(cert);\n } catch(ex) {\n // failure to verify, don't care why, try next one\n }\n }\n\n if(!verified) {\n error = {\n message: 'Certificate signature is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n\n if(error === null && (!parent || selfSigned) &&\n !caStore.hasCertificate(cert)) {\n // no parent issuer and certificate itself is not trusted\n error = {\n message: 'Certificate is not trusted.',\n error: pki.certificateError.unknown_ca\n };\n }\n }\n\n // TODO: 3. check revoked\n\n // 4. check for matching issuer/subject\n if(error === null && parent && !cert.isIssuer(parent)) {\n // parent is not issuer\n error = {\n message: 'Certificate issuer is invalid.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // 5. TODO: check names with permitted names tree\n\n // 6. TODO: check names against excluded names tree\n\n // 7. check for unsupported critical extensions\n if(error === null) {\n // supported extensions\n var se = {\n keyUsage: true,\n basicConstraints: true\n };\n for(var i = 0; error === null && i < cert.extensions.length; ++i) {\n var ext = cert.extensions[i];\n if(ext.critical && !(ext.name in se)) {\n error = {\n message:\n 'Certificate has an unsupported critical extension.',\n error: pki.certificateError.unsupported_certificate\n };\n }\n }\n }\n\n // 8. check for CA if cert is not first or is the only certificate\n // remaining in chain with no parent or is self-signed\n if(error === null &&\n (!first || (chain.length === 0 && (!parent || selfSigned)))) {\n // first check keyUsage extension and then basic constraints\n var bcExt = cert.getExtension('basicConstraints');\n var keyUsageExt = cert.getExtension('keyUsage');\n if(keyUsageExt !== null) {\n // keyCertSign must be true and there must be a basic\n // constraints extension\n if(!keyUsageExt.keyCertSign || bcExt === null) {\n // bad certificate\n error = {\n message:\n 'Certificate keyUsage or basicConstraints conflict ' +\n 'or indicate that the certificate is not a CA. ' +\n 'If the certificate is the only one in the chain or ' +\n 'isn\\'t the first then the certificate must be a ' +\n 'valid CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n // basic constraints cA flag must be set\n if(error === null && bcExt !== null && !bcExt.cA) {\n // bad certificate\n error = {\n message:\n 'Certificate basicConstraints indicates the certificate ' +\n 'is not a CA.',\n error: pki.certificateError.bad_certificate\n };\n }\n // if error is not null and keyUsage is available, then we know it\n // has keyCertSign and there is a basic constraints extension too,\n // which means we can check pathLenConstraint (if it exists)\n if(error === null && keyUsageExt !== null &&\n 'pathLenConstraint' in bcExt) {\n // pathLen is the maximum # of intermediate CA certs that can be\n // found between the current certificate and the end-entity (depth 0)\n // certificate; this number does not include the end-entity (depth 0,\n // last in the chain) even if it happens to be a CA certificate itself\n var pathLen = depth - 1;\n if(pathLen > bcExt.pathLenConstraint) {\n // pathLenConstraint violated, bad certificate\n error = {\n message:\n 'Certificate basicConstraints pathLenConstraint violated.',\n error: pki.certificateError.bad_certificate\n };\n }\n }\n }\n\n // call application callback\n var vfd = (error === null) ? true : error.error;\n var ret = options.verify ? options.verify(vfd, depth, certs) : vfd;\n if(ret === true) {\n // clear any set error\n error = null;\n } else {\n // if passed basic tests, set default message and alert\n if(vfd === true) {\n error = {\n message: 'The application rejected the certificate.',\n error: pki.certificateError.bad_certificate\n };\n }\n\n // check for custom error info\n if(ret || ret === 0) {\n // set custom message and error\n if(typeof ret === 'object' && !forge.util.isArray(ret)) {\n if(ret.message) {\n error.message = ret.message;\n }\n if(ret.error) {\n error.error = ret.error;\n }\n } else if(typeof ret === 'string') {\n // set custom error\n error.error = ret;\n }\n }\n\n // throw error\n throw error;\n }\n\n // no longer first cert in chain\n first = false;\n ++depth;\n } while(chain.length > 0);\n\n return true;\n};\n","const path = require('path');\nconst childProcess = require('child_process');\nconst {promises: fs, constants: fsConstants} = require('fs');\nconst isWsl = require('is-wsl');\nconst isDocker = require('is-docker');\nconst defineLazyProperty = require('define-lazy-prop');\n\n// Path to included `xdg-open`.\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nlet cachedResult;\nfunction isInsideContainer() {\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n\n/**\nGet the mount point for fixed drives in WSL.\n\n@inner\n@returns {string} The mount point.\n*/\nconst getWslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst configMountPoint = /(?.*)/g.exec(configContent);\n\n\t\tif (!configMountPoint) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = configMountPoint.groups.mountPoint.trim();\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nconst pTryEach = async (array, mapper) => {\n\tlet latestError;\n\n\tfor (const item of array) {\n\t\ttry {\n\t\t\treturn await mapper(item); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tlatestError = error;\n\t\t}\n\t}\n\n\tthrow latestError;\n};\n\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options\n\t};\n\n\tif (Array.isArray(options.app)) {\n\t\treturn pTryEach(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app || {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn pTryEach(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments\n\t\t\t}\n\t\t}));\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || (isWsl && !isInsideContainer() && !app)) {\n\t\tconst mountPoint = await getWslDrivesMountPoint();\n\n\t\tcommand = isWsl ?\n\t\t\t`${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` :\n\t\t\t`${process.env.SYSTEMROOT}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell`;\n\n\t\tcliArguments.push(\n\t\t\t'-NoProfile',\n\t\t\t'-NonInteractive',\n\t\t\t'–ExecutionPolicy',\n\t\t\t'Bypass',\n\t\t\t'-EncodedCommand'\n\t\t);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\tconst encodedArguments = ['Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\t// Double quote with double quotes to ensure the inner quotes are passed through.\n\t\t\t// Inner quotes are delimited for PowerShell interpretation with backticks.\n\t\t\tencodedArguments.push(`\"\\`\"${app}\\`\"\"`, '-ArgumentList');\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.unshift(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(`\"${options.target}\"`);\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(arg => `\"\\`\"${arg}\\`\"\"`);\n\t\t\tencodedArguments.push(appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron ||\n\t\t\t\tplatform === 'android' || isBundled || !exeLocalXdgOpen;\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode > 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\treturn subprocess;\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget\n\t});\n};\n\nconst openApp = (name, options) => {\n\tif (typeof name !== 'string') {\n\t\tthrow new TypeError('Expected a `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options || {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments\n\t\t}\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nconst apps = {};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium']\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe']\n\t}\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: 'C:\\\\Program Files\\\\Mozilla Firefox\\\\firefox.exe',\n\tlinux: 'firefox'\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe'\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev']\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'\n}));\n\nopen.apps = apps;\nopen.openApp = openApp;\n\nmodule.exports = open;\n","\"use strict\";\n\nvar protocols = require(\"protocols\");\n\n/**\n * parsePath\n * Parses the input url.\n *\n * @name parsePath\n * @function\n * @param {String} url The input url.\n * @return {Object} An object containing the following fields:\n *\n * - `protocols` (Array): An array with the url protocols (usually it has one element).\n * - `protocol` (String): The first protocol or `\"file\"`.\n * - `port` (String): The domain port (default: `\"\"`).\n * - `resource` (String): The url domain/hostname.\n * - `host` (String): The url domain (including subdomain and port).\n * - `user` (String): The authentication user (default: `\"\"`).\n * - `password` (String): The authentication password (default: `\"\"`).\n * - `pathname` (String): The url pathname.\n * - `hash` (String): The url hash.\n * - `search` (String): The url querystring value (excluding `?`).\n * - `href` (String): The normalized input url.\n * - `query` (Object): The url querystring, parsed as object.\n * - `parse_failed` (Boolean): Whether the parsing failed or not.\n */\nfunction parsePath(url) {\n\n var output = {\n protocols: [],\n protocol: null,\n port: null,\n resource: \"\",\n host: \"\",\n user: \"\",\n password: \"\",\n pathname: \"\",\n hash: \"\",\n search: \"\",\n href: url,\n query: {},\n parse_failed: false\n };\n\n try {\n var parsed = new URL(url);\n output.protocols = protocols(parsed);\n output.protocol = output.protocols[0];\n output.port = parsed.port;\n output.resource = parsed.hostname;\n output.host = parsed.host;\n output.user = parsed.username || \"\";\n output.password = parsed.password || \"\";\n output.pathname = parsed.pathname;\n output.hash = parsed.hash.slice(1);\n output.search = parsed.search.slice(1);\n output.href = parsed.href;\n output.query = Object.fromEntries(parsed.searchParams);\n } catch (e) {\n // TODO Maybe check if it is a valid local file path\n // In any case, these will be parsed by higher\n // level parsers such as parse-url, git-url-parse, git-up\n output.protocols = [\"file\"];\n output.protocol = output.protocols[0];\n output.port = \"\";\n output.resource = \"\";\n output.user = \"\";\n output.pathname = \"\";\n output.hash = \"\";\n output.search = \"\";\n output.href = url;\n output.query = {};\n output.parse_failed = true;\n }\n\n return output;\n}\n\nmodule.exports = parsePath;","'use strict';\n\nvar parsePath = require('parse-path');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar parsePath__default = /*#__PURE__*/_interopDefaultLegacy(parsePath);\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\nconst DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';\nconst DATA_URL_DEFAULT_CHARSET = 'us-ascii';\n\nconst testParameter = (name, filters) => filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);\n\nconst normalizeDataURL = (urlString, {stripHash}) => {\n\tconst match = /^data:(?[^,]*?),(?[^#]*?)(?:#(?.*))?$/.exec(urlString);\n\n\tif (!match) {\n\t\tthrow new Error(`Invalid URL: ${urlString}`);\n\t}\n\n\tlet {type, data, hash} = match.groups;\n\tconst mediaType = type.split(';');\n\thash = stripHash ? '' : hash;\n\n\tlet isBase64 = false;\n\tif (mediaType[mediaType.length - 1] === 'base64') {\n\t\tmediaType.pop();\n\t\tisBase64 = true;\n\t}\n\n\t// Lowercase MIME type\n\tconst mimeType = (mediaType.shift() || '').toLowerCase();\n\tconst attributes = mediaType\n\t\t.map(attribute => {\n\t\t\tlet [key, value = ''] = attribute.split('=').map(string => string.trim());\n\n\t\t\t// Lowercase `charset`\n\t\t\tif (key === 'charset') {\n\t\t\t\tvalue = value.toLowerCase();\n\n\t\t\t\tif (value === DATA_URL_DEFAULT_CHARSET) {\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn `${key}${value ? `=${value}` : ''}`;\n\t\t})\n\t\t.filter(Boolean);\n\n\tconst normalizedMediaType = [\n\t\t...attributes,\n\t];\n\n\tif (isBase64) {\n\t\tnormalizedMediaType.push('base64');\n\t}\n\n\tif (normalizedMediaType.length > 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {\n\t\tnormalizedMediaType.unshift(mimeType);\n\t}\n\n\treturn `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;\n};\n\nfunction normalizeUrl(urlString, options) {\n\toptions = {\n\t\tdefaultProtocol: 'http:',\n\t\tnormalizeProtocol: true,\n\t\tforceHttp: false,\n\t\tforceHttps: false,\n\t\tstripAuthentication: true,\n\t\tstripHash: false,\n\t\tstripTextFragment: true,\n\t\tstripWWW: true,\n\t\tremoveQueryParameters: [/^utm_\\w+/i],\n\t\tremoveTrailingSlash: true,\n\t\tremoveSingleSlash: true,\n\t\tremoveDirectoryIndex: false,\n\t\tsortQueryParameters: true,\n\t\t...options,\n\t};\n\n\turlString = urlString.trim();\n\n\t// Data URL\n\tif (/^data:/i.test(urlString)) {\n\t\treturn normalizeDataURL(urlString, options);\n\t}\n\n\tif (/^view-source:/i.test(urlString)) {\n\t\tthrow new Error('`view-source:` is not supported as it is a non-standard protocol');\n\t}\n\n\tconst hasRelativeProtocol = urlString.startsWith('//');\n\tconst isRelativeUrl = !hasRelativeProtocol && /^\\.*\\//.test(urlString);\n\n\t// Prepend protocol\n\tif (!isRelativeUrl) {\n\t\turlString = urlString.replace(/^(?!(?:\\w+:)?\\/\\/)|^\\/\\//, options.defaultProtocol);\n\t}\n\n\tconst urlObject = new URL(urlString);\n\n\tif (options.forceHttp && options.forceHttps) {\n\t\tthrow new Error('The `forceHttp` and `forceHttps` options cannot be used together');\n\t}\n\n\tif (options.forceHttp && urlObject.protocol === 'https:') {\n\t\turlObject.protocol = 'http:';\n\t}\n\n\tif (options.forceHttps && urlObject.protocol === 'http:') {\n\t\turlObject.protocol = 'https:';\n\t}\n\n\t// Remove auth\n\tif (options.stripAuthentication) {\n\t\turlObject.username = '';\n\t\turlObject.password = '';\n\t}\n\n\t// Remove hash\n\tif (options.stripHash) {\n\t\turlObject.hash = '';\n\t} else if (options.stripTextFragment) {\n\t\turlObject.hash = urlObject.hash.replace(/#?:~:text.*?$/i, '');\n\t}\n\n\t// Remove duplicate slashes if not preceded by a protocol\n\t// NOTE: This could be implemented using a single negative lookbehind\n\t// regex, but we avoid that to maintain compatibility with older js engines\n\t// which do not have support for that feature.\n\tif (urlObject.pathname) {\n\t\t// TODO: Replace everything below with `urlObject.pathname = urlObject.pathname.replace(/(? 0) {\n\t\tlet pathComponents = urlObject.pathname.split('/');\n\t\tconst lastComponent = pathComponents[pathComponents.length - 1];\n\n\t\tif (testParameter(lastComponent, options.removeDirectoryIndex)) {\n\t\t\tpathComponents = pathComponents.slice(0, -1);\n\t\t\turlObject.pathname = pathComponents.slice(1).join('/') + '/';\n\t\t}\n\t}\n\n\tif (urlObject.hostname) {\n\t\t// Remove trailing dot\n\t\turlObject.hostname = urlObject.hostname.replace(/\\.$/, '');\n\n\t\t// Remove `www.`\n\t\tif (options.stripWWW && /^www\\.(?!www\\.)[a-z\\-\\d]{1,63}\\.[a-z.\\-\\d]{2,63}$/.test(urlObject.hostname)) {\n\t\t\t// Each label should be max 63 at length (min: 1).\n\t\t\t// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\n\t\t\t// Each TLD should be up to 63 characters long (min: 2).\n\t\t\t// It is technically possible to have a single character TLD, but none currently exist.\n\t\t\turlObject.hostname = urlObject.hostname.replace(/^www\\./, '');\n\t\t}\n\t}\n\n\t// Remove query unwanted parameters\n\tif (Array.isArray(options.removeQueryParameters)) {\n\t\t// eslint-disable-next-line unicorn/no-useless-spread -- We are intentionally spreading to get a copy.\n\t\tfor (const key of [...urlObject.searchParams.keys()]) {\n\t\t\tif (testParameter(key, options.removeQueryParameters)) {\n\t\t\t\turlObject.searchParams.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (options.removeQueryParameters === true) {\n\t\turlObject.search = '';\n\t}\n\n\t// Sort query parameters\n\tif (options.sortQueryParameters) {\n\t\turlObject.searchParams.sort();\n\n\t\t// Calling `.sort()` encodes the search parameters, so we need to decode them again.\n\t\ttry {\n\t\t\turlObject.search = decodeURIComponent(urlObject.search);\n\t\t} catch {}\n\t}\n\n\tif (options.removeTrailingSlash) {\n\t\turlObject.pathname = urlObject.pathname.replace(/\\/$/, '');\n\t}\n\n\tconst oldUrlString = urlString;\n\n\t// Take advantage of many of the Node `url` normalizations\n\turlString = urlObject.toString();\n\n\tif (!options.removeSingleSlash && urlObject.pathname === '/' && !oldUrlString.endsWith('/') && urlObject.hash === '') {\n\t\turlString = urlString.replace(/\\/$/, '');\n\t}\n\n\t// Remove ending `/` unless removeSingleSlash is false\n\tif ((options.removeTrailingSlash || urlObject.pathname === '/') && urlObject.hash === '' && options.removeSingleSlash) {\n\t\turlString = urlString.replace(/\\/$/, '');\n\t}\n\n\t// Restore relative protocol, if applicable\n\tif (hasRelativeProtocol && !options.normalizeProtocol) {\n\t\turlString = urlString.replace(/^http:\\/\\//, '//');\n\t}\n\n\t// Remove http/https\n\tif (options.stripProtocol) {\n\t\turlString = urlString.replace(/^(?:https?:)?\\/\\//, '');\n\t}\n\n\treturn urlString;\n}\n\n// Dependencies\n\n/**\n * parseUrl\n * Parses the input url.\n *\n * **Note**: This *throws* if invalid urls are provided.\n *\n * @name parseUrl\n * @function\n * @param {String} url The input url.\n * @param {Boolean|Object} normalize Whether to normalize the url or not.\n * Default is `false`. If `true`, the url will\n * be normalized. If an object, it will be the\n * options object sent to [`normalize-url`](https://github.com/sindresorhus/normalize-url).\n *\n * For SSH urls, normalize won't work.\n *\n * @return {Object} An object containing the following fields:\n *\n * - `protocols` (Array): An array with the url protocols (usually it has one element).\n * - `protocol` (String): The first protocol, `\"ssh\"` (if the url is a ssh url) or `\"file\"`.\n * - `port` (null|Number): The domain port.\n * - `resource` (String): The url domain (including subdomains).\n * - `user` (String): The authentication user (usually for ssh urls).\n * - `pathname` (String): The url pathname.\n * - `hash` (String): The url hash.\n * - `search` (String): The url querystring value.\n * - `href` (String): The input url.\n * - `query` (Object): The url querystring, parsed as object.\n * - `parse_failed` (Boolean): Whether the parsing failed or not.\n */\nconst parseUrl = (url, normalize = false) => {\n\n // Constants\n const GIT_RE = /^(?:([a-z_][a-z0-9_-]{0,31})@|https?:\\/\\/)([\\w\\.\\-@]+)[\\/:]([\\~,\\.\\w,\\-,\\_,\\/]+?(?:\\.git|\\/)?)$/;\n\n const throwErr = msg => {\n const err = new Error(msg);\n err.subject_url = url;\n throw err\n };\n\n if (typeof url !== \"string\" || !url.trim()) {\n throwErr(\"Invalid url.\");\n }\n\n if (url.length > parseUrl.MAX_INPUT_LENGTH) {\n throwErr(\"Input exceeds maximum length. If needed, change the value of parseUrl.MAX_INPUT_LENGTH.\");\n }\n\n if (normalize) {\n if (typeof normalize !== \"object\") {\n normalize = {\n stripHash: false\n };\n }\n url = normalizeUrl(url, normalize);\n }\n\n const parsed = parsePath__default[\"default\"](url);\n\n // Potential git-ssh urls\n if (parsed.parse_failed) {\n const matched = parsed.href.match(GIT_RE);\n\n if (matched) {\n parsed.protocols = [\"ssh\"];\n parsed.protocol = \"ssh\";\n parsed.resource = matched[2];\n parsed.host = matched[2];\n parsed.user = matched[1];\n parsed.pathname = `/${matched[3]}`;\n parsed.parse_failed = false;\n } else {\n throwErr(\"URL parsing failed.\");\n }\n }\n\n return parsed;\n};\n\nparseUrl.MAX_INPUT_LENGTH = 2048;\n\nmodule.exports = parseUrl;\n","'use strict';\n\nconst processFn = (fn, opts) => function () {\n\tconst P = opts.promiseModule;\n\tconst args = new Array(arguments.length);\n\n\tfor (let i = 0; i < arguments.length; i++) {\n\t\targs[i] = arguments[i];\n\t}\n\n\treturn new P((resolve, reject) => {\n\t\tif (opts.errorFirst) {\n\t\t\targs.push(function (err, result) {\n\t\t\t\tif (opts.multiArgs) {\n\t\t\t\t\tconst results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (let i = 1; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i - 1] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tresults.unshift(err);\n\t\t\t\t\t\treject(results);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(results);\n\t\t\t\t\t}\n\t\t\t\t} else if (err) {\n\t\t\t\t\treject(err);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\targs.push(function (result) {\n\t\t\t\tif (opts.multiArgs) {\n\t\t\t\t\tconst results = new Array(arguments.length - 1);\n\n\t\t\t\t\tfor (let i = 0; i < arguments.length; i++) {\n\t\t\t\t\t\tresults[i] = arguments[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(results);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(result);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfn.apply(this, args);\n\t});\n};\n\nmodule.exports = (obj, opts) => {\n\topts = Object.assign({\n\t\texclude: [/.+(Sync|Stream)$/],\n\t\terrorFirst: true,\n\t\tpromiseModule: Promise\n\t}, opts);\n\n\tconst filter = key => {\n\t\tconst match = pattern => typeof pattern === 'string' ? key === pattern : pattern.test(key);\n\t\treturn opts.include ? opts.include.some(match) : !opts.exclude.some(match);\n\t};\n\n\tlet ret;\n\tif (typeof obj === 'function') {\n\t\tret = function () {\n\t\t\tif (opts.excludeMain) {\n\t\t\t\treturn obj.apply(this, arguments);\n\t\t\t}\n\n\t\t\treturn processFn(obj, opts).apply(this, arguments);\n\t\t};\n\t} else {\n\t\tret = Object.create(Object.getPrototypeOf(obj));\n\t}\n\n\tfor (const key in obj) { // eslint-disable-line guard-for-in\n\t\tconst x = obj[key];\n\t\tret[key] = typeof x === 'function' && filter(key) ? processFn(x, opts) : x;\n\t}\n\n\treturn ret;\n};\n","\"use strict\";\n\n/**\n * protocols\n * Returns the protocols of an input url.\n *\n * @name protocols\n * @function\n * @param {String|URL} input The input url (string or `URL` instance)\n * @param {Boolean|Number} first If `true`, the first protocol will be returned. If number, it will represent the zero-based index of the protocols array.\n * @return {Array|String} The array of protocols or the specified protocol.\n */\nmodule.exports = function protocols(input, first) {\n\n if (first === true) {\n first = 0;\n }\n\n var prots = \"\";\n if (typeof input === \"string\") {\n try {\n prots = new URL(input).protocol;\n } catch (e) {}\n } else if (input && input.constructor === URL) {\n prots = input.protocol;\n }\n\n var splits = prots.split(/\\:|\\+/).filter(Boolean);\n\n if (typeof first === \"number\") {\n return splits[first];\n }\n\n return splits;\n};","'use strict'\n\nfunction isFunction (funktion) {\n return typeof funktion === 'function'\n}\n\n// Default to complaining loudly when things don't go according to plan.\nvar logger = console.error.bind(console)\n\n// Sets a property on an object, preserving its enumerability.\n// This function assumes that the property is already writable.\nfunction defineProperty (obj, name, value) {\n var enumerable = !!obj[name] && obj.propertyIsEnumerable(name)\n Object.defineProperty(obj, name, {\n configurable: true,\n enumerable: enumerable,\n writable: true,\n value: value\n })\n}\n\n// Keep initialization idempotent.\nfunction shimmer (options) {\n if (options && options.logger) {\n if (!isFunction(options.logger)) logger(\"new logger isn't a function, not replacing\")\n else logger = options.logger\n }\n}\n\nfunction wrap (nodule, name, wrapper) {\n if (!nodule || !nodule[name]) {\n logger('no original function ' + name + ' to wrap')\n return\n }\n\n if (!wrapper) {\n logger('no wrapper function')\n logger((new Error()).stack)\n return\n }\n\n if (!isFunction(nodule[name]) || !isFunction(wrapper)) {\n logger('original object and wrapper must be functions')\n return\n }\n\n var original = nodule[name]\n var wrapped = wrapper(original, name)\n\n defineProperty(wrapped, '__original', original)\n defineProperty(wrapped, '__unwrap', function () {\n if (nodule[name] === wrapped) defineProperty(nodule, name, original)\n })\n defineProperty(wrapped, '__wrapped', true)\n\n defineProperty(nodule, name, wrapped)\n return wrapped\n}\n\nfunction massWrap (nodules, names, wrapper) {\n if (!nodules) {\n logger('must provide one or more modules to patch')\n logger((new Error()).stack)\n return\n } else if (!Array.isArray(nodules)) {\n nodules = [nodules]\n }\n\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to wrap on modules')\n return\n }\n\n nodules.forEach(function (nodule) {\n names.forEach(function (name) {\n wrap(nodule, name, wrapper)\n })\n })\n}\n\nfunction unwrap (nodule, name) {\n if (!nodule || !nodule[name]) {\n logger('no function to unwrap.')\n logger((new Error()).stack)\n return\n }\n\n if (!nodule[name].__unwrap) {\n logger('no original to unwrap to -- has ' + name + ' already been unwrapped?')\n } else {\n return nodule[name].__unwrap()\n }\n}\n\nfunction massUnwrap (nodules, names) {\n if (!nodules) {\n logger('must provide one or more modules to patch')\n logger((new Error()).stack)\n return\n } else if (!Array.isArray(nodules)) {\n nodules = [nodules]\n }\n\n if (!(names && Array.isArray(names))) {\n logger('must provide one or more functions to unwrap on modules')\n return\n }\n\n nodules.forEach(function (nodule) {\n names.forEach(function (name) {\n unwrap(nodule, name)\n })\n })\n}\n\nshimmer.wrap = wrap\nshimmer.massWrap = massWrap\nshimmer.unwrap = unwrap\nshimmer.massUnwrap = massUnwrap\n\nmodule.exports = shimmer\n","//filter will reemit the data if cb(err,pass) pass is truthy\n\n// reduce is more tricky\n// maybe we want to group the reductions or emit progress updates occasionally\n// the most basic reduce just emits one 'data' event after it has recieved 'end'\n\n\nvar through = require('through')\nvar Decoder = require('string_decoder').StringDecoder\n\nmodule.exports = split\n\n//TODO pass in a function to map across the lines.\n\nfunction split (matcher, mapper, options) {\n var decoder = new Decoder()\n var soFar = ''\n var maxLength = options && options.maxLength;\n var trailing = options && options.trailing === false ? false : true\n if('function' === typeof matcher)\n mapper = matcher, matcher = null\n if (!matcher)\n matcher = /\\r?\\n/\n\n function emit(stream, piece) {\n if(mapper) {\n try {\n piece = mapper(piece)\n }\n catch (err) {\n return stream.emit('error', err)\n }\n if('undefined' !== typeof piece)\n stream.queue(piece)\n }\n else\n stream.queue(piece)\n }\n\n function next (stream, buffer) {\n var pieces = ((soFar != null ? soFar : '') + buffer).split(matcher)\n soFar = pieces.pop()\n\n if (maxLength && soFar.length > maxLength)\n return stream.emit('error', new Error('maximum buffer reached'))\n\n for (var i = 0; i < pieces.length; i++) {\n var piece = pieces[i]\n emit(stream, piece)\n }\n }\n\n return through(function (b) {\n next(this, decoder.write(b))\n },\n function () {\n if(decoder.end)\n next(this, decoder.end())\n if(trailing && soFar != null)\n emit(this, soFar)\n this.queue(null)\n })\n}\n","// Copyright 2012 the V8 project authors. All rights reserved.\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following\n// disclaimer in the documentation and/or other materials provided\n// with the distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived\n// from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nfunction FormatErrorString(error) {\n try {\n return Error.prototype.toString.call(error);\n } catch (e) {\n try {\n return \"\";\n } catch (ee) {\n return \"\";\n }\n }\n}\n\nmodule.exports = function FormatStackTrace(error, frames) {\n var lines = [];\n lines.push(FormatErrorString(error));\n for (var i = 0; i < frames.length; i++) {\n var frame = frames[i];\n var line;\n try {\n line = frame.toString();\n } catch (e) {\n try {\n line = \"\";\n } catch (ee) {\n // Any code that reaches this point is seriously nasty!\n line = \"\";\n }\n }\n lines.push(\" at \" + line);\n }\n return lines.join(\"\\n\");\n};\n","// If a another copy (same version or not) of stack-chain exists it will result\n// in wrong stack traces (most likely dublicate callSites).\nif (global._stackChain) {\n // In case the version match, we can simply return the first initialized copy\n if (global._stackChain.version === require('./package.json').version) {\n module.exports = global._stackChain;\n }\n // The version don't match, this is really bad. Lets just throw\n else {\n throw new Error('Conflicting version of stack-chain found');\n }\n}\n// Yay, no other stack-chain copy exists, yet :/\nelse {\n module.exports = global._stackChain = require('./stack-chain');\n}\n","\n// use a already existing formater or fallback to the default v8 formater\nvar defaultFormater = require('./format.js');\n\n// public define API\nfunction stackChain() {\n this.extend = new TraceModifier();\n this.filter = new TraceModifier();\n this.format = new StackFormater();\n this.version = require('./package.json').version;\n}\n\n\nvar SHORTCIRCUIT_CALLSITE = false;\nstackChain.prototype.callSite = function collectCallSites(options) {\n if (!options) options = {};\n\n // Get CallSites\n SHORTCIRCUIT_CALLSITE = true;\n var obj = {};\n Error.captureStackTrace(obj, collectCallSites);\n var callSites = obj.stack;\n SHORTCIRCUIT_CALLSITE = false;\n\n // Slice\n callSites = callSites.slice(options.slice || 0);\n\n // Modify CallSites\n if (options.extend) callSites = this.extend._modify(obj, callSites);\n if (options.filter) callSites = this.filter._modify(obj, callSites);\n\n // Done\n return callSites;\n};\n\nvar chain = new stackChain();\n\nfunction TraceModifier() {\n this._modifiers = [];\n}\n\nTraceModifier.prototype._modify = function (error, frames) {\n for (var i = 0, l = this._modifiers.length; i < l; i++) {\n frames = this._modifiers[i](error, frames);\n }\n\n return frames;\n};\n\nTraceModifier.prototype.attach = function (modifier) {\n this._modifiers.push(modifier);\n};\n\nTraceModifier.prototype.deattach = function (modifier) {\n var index = this._modifiers.indexOf(modifier);\n\n if (index === -1) return false;\n\n this._modifiers.splice(index, 1);\n return true;\n};\n\nfunction StackFormater() {\n this._formater = defaultFormater;\n this._previous = undefined;\n}\n\nStackFormater.prototype.replace = function (formater) {\n if (formater) {\n this._formater = formater;\n } else {\n this.restore();\n }\n};\n\nStackFormater.prototype.restore = function () {\n this._formater = defaultFormater;\n this._previous = undefined;\n};\n\nStackFormater.prototype._backup = function () {\n this._previous = this._formater;\n};\n\nStackFormater.prototype._roolback = function () {\n if (this._previous === defaultFormater) {\n this.replace(undefined);\n } else {\n this.replace(this._previous);\n }\n\n this._previous = undefined;\n};\n\n\n//\n// Set Error.prepareStackTrace thus allowing stack-chain\n// to take control of the Error().stack formating.\n//\n\n// If there already is a custom stack formater, then set\n// that as the stack-chain formater.\nif (Error.prepareStackTrace) {\n chain.format.replace(Error.prepareStackTrace);\n}\n\nvar SHORTCIRCUIT_FORMATER = false;\nfunction prepareStackTrace(error, originalFrames) {\n if (SHORTCIRCUIT_CALLSITE) return originalFrames;\n if (SHORTCIRCUIT_FORMATER) return defaultFormater(error, originalFrames);\n\n // Make a loss copy of originalFrames\n var frames = originalFrames.concat();\n\n // extend frames\n frames = chain.extend._modify(error, frames);\n\n // filter frames\n frames = chain.filter._modify(error, frames);\n\n // reduce frames to match Error.stackTraceLimit\n frames = frames.slice(0, Error.stackTraceLimit);\n\n // Set the callSite property\n // But only if it hasn't been explicitly set, otherwise\n // error.stack would have unintended side effects. Check also for\n // non-extensible/sealed objects, such as those from Google's Closure Library\n if (Object.isExtensible(error) &&\n (Object.getOwnPropertyDescriptor(error, \"callSite\") === undefined)) {\n error.callSite = {\n original: originalFrames,\n mutated: frames\n };\n }\n\n // format frames\n SHORTCIRCUIT_FORMATER = true;\n var format = chain.format._formater(error, frames);\n SHORTCIRCUIT_FORMATER = false;\n\n return format;\n}\n\n// Replace the v8 stack trace creator\nObject.defineProperty(Error, 'prepareStackTrace', {\n 'get': function () {\n return prepareStackTrace;\n },\n\n 'set': function (formater) {\n // If formater is prepareStackTrace it means that someone ran\n // var old = Error.prepareStackTrace;\n // Error.prepareStackTrace = custom\n // new Error().stack\n // Error.prepareStackTrace = old;\n // The effect of this, should be that the old behaviour is restored.\n if (formater === prepareStackTrace) {\n chain.format._roolback();\n }\n // Error.prepareStackTrace was set, this means that someone is\n // trying to take control of the Error().stack format. Make\n // them belive they succeeded by setting them up as the stack-chain\n // formater.\n else {\n chain.format._backup();\n chain.format.replace(formater);\n }\n }\n});\n\n//\n// Manage call site storeage\n//\nfunction callSiteGetter() {\n // calculate call site object\n this.stack;\n\n // return call site object\n return this.callSite;\n}\n\nObject.defineProperty(Error.prototype, 'callSite', {\n 'get': callSiteGetter,\n\n 'set': function (frames) {\n // In case callSite was set before [[getter]], just set\n // the value\n Object.defineProperty(this, 'callSite', {\n value: frames,\n writable: true,\n configurable: true\n });\n },\n\n configurable: true\n});\n\nmodule.exports = chain;\n","'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(stream) {\n\tif (forceColor === false) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\n};\n","var Stream = require('stream')\n\n// through\n//\n// a stream that does nothing but re-emit the input.\n// useful for aggregating a series of changing but not ending streams into one stream)\n\nexports = module.exports = through\nthrough.through = through\n\n//create a readable writable stream.\n\nfunction through (write, end, opts) {\n write = write || function (data) { this.queue(data) }\n end = end || function () { this.queue(null) }\n\n var ended = false, destroyed = false, buffer = [], _ended = false\n var stream = new Stream()\n stream.readable = stream.writable = true\n stream.paused = false\n\n// stream.autoPause = !(opts && opts.autoPause === false)\n stream.autoDestroy = !(opts && opts.autoDestroy === false)\n\n stream.write = function (data) {\n write.call(this, data)\n return !stream.paused\n }\n\n function drain() {\n while(buffer.length && !stream.paused) {\n var data = buffer.shift()\n if(null === data)\n return stream.emit('end')\n else\n stream.emit('data', data)\n }\n }\n\n stream.queue = stream.push = function (data) {\n// console.error(ended)\n if(_ended) return stream\n if(data === null) _ended = true\n buffer.push(data)\n drain()\n return stream\n }\n\n //this will be registered as the first 'end' listener\n //must call destroy next tick, to make sure we're after any\n //stream piped from here.\n //this is only a problem if end is not emitted synchronously.\n //a nicer way to do this is to make sure this is the last listener for 'end'\n\n stream.on('end', function () {\n stream.readable = false\n if(!stream.writable && stream.autoDestroy)\n process.nextTick(function () {\n stream.destroy()\n })\n })\n\n function _end () {\n stream.writable = false\n end.call(stream)\n if(!stream.readable && stream.autoDestroy)\n stream.destroy()\n }\n\n stream.end = function (data) {\n if(ended) return\n ended = true\n if(arguments.length) stream.write(data)\n _end() // will emit or queue\n return stream\n }\n\n stream.destroy = function () {\n if(destroyed) return\n destroyed = true\n ended = true\n buffer.length = 0\n stream.writable = stream.readable = false\n stream.emit('close')\n return stream\n }\n\n stream.pause = function () {\n if(stream.paused) return\n stream.paused = true\n return stream\n }\n\n stream.resume = function () {\n if(stream.paused) {\n stream.paused = false\n stream.emit('resume')\n }\n drain()\n //may have become paused again,\n //as drain emits 'data'.\n if(!stream.paused)\n stream.emit('drain')\n return stream\n }\n return stream\n}\n\n","import {FileSystem} from '@github/copilot-promptlib';\nimport {CopilotTokenManagerFromGitHubToken} from '../../lib/src/auth/copilotToken';\nimport {createProductionContext} from '../../lib/src/common/productContext';\nimport {EditorAndPluginInfo, EditorSession} from '../../lib/src/config';\nimport {Context} from '../../lib/src/context';\nimport {CopilotIgnoreManager, NoOPCopilotIgnoreManager} from '../../lib/src/copilotIgnore/manager';\nimport {registerDefaultHandlers} from '../../lib/src/defaultHandlers';\nimport {HybridInference} from '../../lib/src/hybridInference/hybridInference';\nimport {NoopHybridInference} from '../../lib/src/hybridInference/noopHybridInference';\nimport {LogLevel, Logger} from '../../lib/src/logger';\nimport {DefaultNetworkConfiguration, NetworkConfiguration} from '../../lib/src/networkConfiguration';\nimport {NotificationSender} from '../../lib/src/notificationSender';\nimport {StatusReporter} from '../../lib/src/progress';\nimport {SymbolDefinitionProvider} from '../../lib/src/prompt/symbolDefinition';\nimport {TelemetryReporters} from '../../lib/src/telemetry';\nimport {setupTelemetryReporters} from '../../lib/src/telemetry/azureInsights';\nimport {LocationFactory} from '../../lib/src/textDocument';\nimport {TextDocumentManager} from '../../lib/src/textDocumentManager';\nimport {GitHubDeviceFlow} from './auth/deviceFlow';\nimport {AuthManager} from './auth/manager';\nimport {AgentConfigProvider, AgentEditorInfo} from './config';\nimport {CopilotCompletionCache} from './copilotCompletionCache';\nimport {WrappedConnection} from './debug';\nimport {FeatureFlagsNotifier} from './editorFeatures/featureFlagsNotifier';\nimport {setupRedirectingTelemetryReporters} from './editorFeatures/redirectTelemetryReporter';\nimport {NotificationStatusReporter} from './editorFeatures/statusReporter';\nimport {agentFileSystem} from './fileSystem';\nimport {AgentInstallationManager} from './installationManager';\nimport {MethodHandlers, NotificationHandlers, getAllMethods} from './methods/methods';\nimport {AgentNotificationSender, ConnectionNotificationSender} from './notificationSender';\nimport {PersistenceManager, makeXdgPersistenceManager} from './persist';\nimport {CopilotService} from './service';\nimport {agentEditorSession} from './session';\nimport {AgentSymbolDefinitionProvider} from './symbolDefinitionProvider';\nimport {AgentLocationFactory} from './textDocument';\nimport {AgentTextDocumentManager} from './textDocumentManager';\n\nasync function main() {\n const ctx = createAgentContext();\n const service = new CopilotService(ctx);\n service.listen();\n}\nmain();\n\nexport function createAgentContext(): Context {\n const ctx = createProductionContext(new AgentConfigProvider());\n const persistenceManager = makeXdgPersistenceManager();\n ctx.set(PersistenceManager, persistenceManager);\n const authManager = new AuthManager(persistenceManager, ghToken => new CopilotTokenManagerFromGitHubToken(ghToken));\n ctx.set(GitHubDeviceFlow, new GitHubDeviceFlow());\n ctx.set(AuthManager, authManager);\n ctx.set(EditorSession, agentEditorSession);\n ctx.set(EditorAndPluginInfo, new AgentEditorInfo());\n ctx.set(MethodHandlers, getAllMethods());\n ctx.set(NotificationHandlers, new NotificationHandlers());\n ctx.set(CopilotCompletionCache, new CopilotCompletionCache());\n ctx.set(LocationFactory, new AgentLocationFactory());\n ctx.set(FileSystem, agentFileSystem);\n\n // Currently copilotignore and hybrid inference are operational only in VS Code\n ctx.set(CopilotIgnoreManager, new NoOPCopilotIgnoreManager(ctx));\n ctx.set(HybridInference, new NoopHybridInference());\n\n // Set up handlers to send telemetry on uncaught exceptions and unhandled rejections\n // This serves two purposes: it gives us visibility of this happening, and it protects\n // the process from being terminated (that behaviour varies with different node versions).\n registerDefaultHandlers(ctx);\n ctx.set(WrappedConnection, WrappedConnection.from(ctx, process.stdin, process.stdout));\n const notificationSender = new ConnectionNotificationSender(ctx);\n ctx.set(NotificationSender, notificationSender);\n ctx.set(AgentNotificationSender, notificationSender);\n ctx.set(StatusReporter, new NotificationStatusReporter(ctx));\n ctx.set(FeatureFlagsNotifier, new FeatureFlagsNotifier(ctx));\n const textDocumentManager = new AgentTextDocumentManager(ctx);\n ctx.set(TextDocumentManager, textDocumentManager);\n ctx.set(AgentTextDocumentManager, textDocumentManager);\n ctx.set(NetworkConfiguration, new DefaultNetworkConfiguration());\n ctx.set(SymbolDefinitionProvider, new AgentSymbolDefinitionProvider());\n\n process.on('exit', () => {\n try {\n // TODO find a good way to flush reporters properly - maybe after we drop `vscode-extension-telemetry`.\n // attempt to flush reporters (unclear if this will work since only\n // synchronous actions can be performed before exiting)\n logger.debug(ctx, 'Shutting down agent');\n ctx.get(TelemetryReporters).deactivate();\n } catch (e) {\n // ignore errors - in particular this routinely fails on some call to `this.optOutListener.dispose()`\n }\n });\n\n return ctx;\n}\n\n// some services depend in information we only get from the editors (e.g. proxy information)\nexport async function initializeLateDependencies(ctx: Context, redirectTelemetry: boolean) {\n if (redirectTelemetry) {\n await setupRedirectingTelemetryReporters(ctx);\n } else {\n await setupTelemetryReporters(ctx, 'agent', true);\n }\n logger.debug(ctx, 'Telemetry initialized');\n await new AgentInstallationManager().startup(ctx);\n}\n\nexport const logger = new Logger(LogLevel.DEBUG, 'agent');\n","import {editorVersionHeaders} from '../../../lib/src/config';\nimport {Context} from '../../../lib/src/context';\nimport {UserErrorNotifier} from '../../../lib/src/error/userErrorNotifier';\nimport {NetworkConfiguration} from '../../../lib/src/networkConfiguration';\nimport {Fetcher, FetchOptions} from '../../../lib/src/networking';\nimport {\n telemetryGitHubLoginFailed,\n telemetryGitHubLoginSuccess,\n telemetryNewGitHubLogin,\n} from '../../../lib/src/telemetry/auth';\n\n/**\n * Handle authentication via the GitHub \"device flow\".\n * This is only currently used by the agent (for non-VSCode editors).\n */\n\n// this is the Copilot GitHub app, managed via https://github.com/organizations/github/settings/apps/github-copilot-plugin\nconst CLIENT_ID = 'Iv1.b507a08c87ecfe98';\n\ninterface DeviceFlowStage1 {\n user_code: string;\n device_code: string;\n verification_uri: string;\n expires_in: number;\n interval: number;\n}\n\ninterface DeviceFlowStage2 {\n access_token: string | undefined;\n}\n\nasync function requestDeviceFlowStage1(ctx: Context): Promise {\n telemetryNewGitHubLogin(ctx, 'unknown', 'deviceFlow');\n const request: FetchOptions = {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n ...editorVersionHeaders(ctx),\n },\n json: {\n client_id: CLIENT_ID,\n scope: 'read:user',\n },\n timeout: 30 * 1000,\n };\n const response = ctx.get(Fetcher).fetch(ctx.get(NetworkConfiguration).getDeviceFlowStartUrl(), request);\n return (await response).json() as any;\n}\n\nasync function requestDeviceFlowStage2(ctx: Context, deviceCode: string): Promise {\n const request: FetchOptions = {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n ...editorVersionHeaders(ctx),\n },\n json: {\n client_id: CLIENT_ID,\n device_code: deviceCode,\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n },\n timeout: 30 * 1000,\n };\n const response = ctx.get(Fetcher).fetch(ctx.get(NetworkConfiguration).getDeviceFlowCompletionUrl(), request);\n return response.then(r => r.json());\n}\n\ninterface User {\n login: string;\n}\n\nasync function requestUserInfo(ctx: Context, accessToken: string): Promise {\n telemetryGitHubLoginSuccess(ctx, 'deviceFlow');\n const response = ctx.get(Fetcher).fetch(ctx.get(NetworkConfiguration).getUserInfoUrl(), {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n Accept: 'application/json',\n },\n });\n return response.then(r => r.json());\n}\n\nexport interface GitHubUser {\n user: string;\n oauth_token: string;\n}\n\nexport class GitHubDeviceFlow {\n async getToken(ctx: Context) {\n try {\n return await this.getTokenUnguarded(ctx);\n } catch (error: any) {\n telemetryGitHubLoginFailed(ctx);\n ctx.get(UserErrorNotifier).notifyUser(ctx, error);\n throw error;\n }\n }\n\n private async getTokenUnguarded(ctx: Context) {\n const stage1 = await requestDeviceFlowStage1(ctx);\n const stage2Promise = new Promise(async (resolve, reject) => {\n let expiresIn = stage1.expires_in;\n let accessToken = undefined;\n while (expiresIn > 0) {\n const stage2 = await requestDeviceFlowStage2(ctx, stage1.device_code);\n expiresIn -= stage1.interval;\n await new Promise(resolve => setTimeout(resolve, 1000 * stage1.interval));\n accessToken = stage2.access_token;\n if (accessToken) {\n const userInfo = await requestUserInfo(ctx, accessToken);\n resolve({user: userInfo.login, oauth_token: accessToken});\n return;\n }\n }\n reject('Timed out waiting for login to complete');\n });\n return {...stage1, waitForAuth: stage2Promise};\n }\n}\n","import {CheckCopilotToken, CopilotTokenManager, GitHubToken} from '../../../lib/src/auth/copilotToken';\nimport {Context} from '../../../lib/src/context';\nimport {NetworkConfiguration} from '../../../lib/src/networkConfiguration';\nimport {PersistenceManager} from '../persist';\nimport {ErrorCode, RpcError} from '../rpc';\n\ninterface AuthRecord {\n user: string;\n oauth_token: string;\n dev_override?: {\n copilot_token_url: string;\n notification_url: string;\n };\n}\n\n// The invariant we try to maintain in this file is that if we know that user X\n// has successfully authed and there has been at least one call to a method that\n// handles authentication such as `checkStatus` (without `localChecksOnly`),\n// `initiateSignIn`, or `getCompletions`, then GitHubTokenManager.getCopilotTokenManager()\n// will be set, and otherwise it will be undefined.\n//\n// Here, \"we know\" means that either:\n// (a) the user has done it in the current session, or\n// (b) we found a stored record of the user having done it\n// and also the user has not done anything to invalidate their auth\n// in the current session (e.g. by re-authing as a different user).\n//\n// If the stored record changes, e.g. because another process caused an update, we\n// will not necessarily notice immediately.\n\nexport type AuthStatus =\n // Authentication succeeded and a Copilot token should be available.\n | {status: 'OK'; user: string}\n // We appear to be logged in but were asked not to connect to the network so can't verify this.\n | {status: 'MaybeOK'; user: string}\n // The user has not yet signed in to GitHub, or something is wrong with their GitHub token. Call `signInInitiate` to remedy this.\n | {status: 'NotSignedIn'}\n | {status: 'NotSignedIn'; user: string}\n // Fatal error: The user is not enabled for Copilot. Less likely, something else went wrong like we got an invalid GitHub token.\n // The client may wish to call `signInInitiate` to give the user a chance to login with a different GitHub user.\n | {status: 'NotAuthorized'; user: string}\n // Fatal error: The agent failed to get a valid Copilot token for some unknown reason.\n | {status: 'FailedToGetToken'; user: string}\n // Fatal error: The agent got a Copilot token but it wasn't valid.\n | {status: 'TokenInvalid'; user: string};\n\n/** A `AuthManager` keeps track of the user's GitHub token and\n * a `CopilotTokenManager` to manage the associated Copilot token.\n */\nexport class AuthManager {\n constructor(\n private readonly persistenceManager: PersistenceManager,\n private readonly mkTokenManager: (githubToken: GitHubToken) => CopilotTokenManager & CheckCopilotToken\n ) {}\n _copilotTokenManager: (CopilotTokenManager & CheckCopilotToken) | undefined;\n /** Get the current `CopilotTokenManager`, if one is stored. */\n getCopilotTokenManager(): CopilotTokenManager | undefined {\n return this._copilotTokenManager;\n }\n\n // Stored by `signInInitiate` for `signInConfirm` to await.\n _pendingSignIn: Promise | undefined = undefined;\n\n setPendingSignIn(promise: Promise | undefined): void {\n this._pendingSignIn = promise;\n }\n\n getPendingSignIn(): Promise | undefined {\n return this._pendingSignIn;\n }\n\n /**\n * Check if Copilot is in good working order, i.e. we believe we will be able\n * to get completions from the server.\n *\n * Note that this can have a side-effect: because we cache a working Copilot token\n * in 'globalCopilotTokenManager, if 'checkStatus' discovers that we aren't authed\n * or don't have telemetry consent now, it will clear the cache. Conversely if\n * we discover we are now authed (maybe some other process did it), it will set\n * the cache.\n *\n * This makes it more likely that the behaviour of Copilot afterwards will be consistent\n * with the result of 'checkStatus'.\n *\n * To only perform local checks, pass 'localChecksOnly: true'.\n */\n async checkAndUpdateStatus(ctx: Context, options?: {localChecksOnly?: boolean}): Promise {\n // Except in localChecksOnly mode, before returning this function should always either set\n // a valid token manager, or clear it. If there is already a token manager, and the\n // new state is also to have a working token manager, then it should always leave a\n // working token manager in place, i.e. any other code that runs concurrently should\n // never see a missing token manager.\n const localChecksOnly: boolean = options?.localChecksOnly ?? false;\n\n let authRecord;\n\n if (process.env.CODESPACES === 'true' && process.env.GITHUB_TOKEN) {\n // TODO share this with the code in extension/src/session.ts\n authRecord = {\n user: process.env.GITHUB_USER || 'codespace-user',\n oauth_token: process.env.GITHUB_TOKEN,\n };\n }\n\n if (authRecord === undefined) {\n authRecord = await this.getAuthRecord(ctx);\n }\n\n if (authRecord === undefined) {\n this._copilotTokenManager = undefined;\n return {status: 'NotSignedIn'};\n }\n\n if (localChecksOnly) {\n return {status: 'MaybeOK', user: authRecord.user};\n }\n\n // Even if we have an existing token manager, something may have changed. For example the user might have\n // just become enabled for Copilot, or might have signed in to a different GitHub account.\n // To keep things simple, just create a new one each time.\n const gitHubToken: GitHubToken = {token: authRecord.oauth_token};\n if (authRecord.dev_override) {\n gitHubToken.devOverride = {\n copilotTokenUrl: authRecord.dev_override.copilot_token_url,\n notificationUrl: authRecord.dev_override.notification_url,\n };\n }\n const provisionalTokenManager = this.mkTokenManager(gitHubToken);\n\n const checkTokenResult = await provisionalTokenManager.checkCopilotToken(ctx);\n if (!('status' in checkTokenResult)) {\n this._copilotTokenManager = undefined;\n // For the purposes of the agent, a 401 error and not being signed in to begin with have\n // the same practical consequence, the user should sign in again.\n const status = checkTokenResult.reason === 'HTTP401' ? 'NotSignedIn' : checkTokenResult.reason;\n return {status, user: authRecord.user};\n }\n\n this._copilotTokenManager = provisionalTokenManager;\n return {status: 'OK', user: authRecord.user};\n }\n\n async getAuthRecord(ctx: Context): Promise {\n return await this.persistenceManager.read(\n 'hosts',\n ctx.get(NetworkConfiguration).getAuthAuthority()\n );\n }\n\n /**\n * Record the user's GitHub token.\n */\n async setAuthRecord(ctx: Context, authRecord: AuthRecord) {\n await this.persistenceManager.update(\n 'hosts',\n ctx.get(NetworkConfiguration).getAuthAuthority(),\n authRecord\n );\n }\n\n /**\n * Remove our record of the user's GitHub token.\n */\n async deleteAuthRecord(ctx: Context) {\n await this.persistenceManager.delete('hosts', ctx.get(NetworkConfiguration).getAuthAuthority());\n }\n}\n\n/**\n * Set up a context containing a CopilotTokenManager, based on the current AuthManager.\n * @param ctx The incoming context.\n * @param overrideCopilotTokenManager If supplied, e.g. for testing, this will be used instead of one from the current AuthManager.\n * @returns An overridden context containing a CopilotTokenManager.\n */\nexport async function createRequestContext(\n ctx: Context,\n overrideCopilotTokenManager?: CopilotTokenManager\n): Promise {\n let tokenManager = overrideCopilotTokenManager;\n if (tokenManager === undefined) {\n // Hopefully there's already a token manager setup.\n tokenManager = ctx.get(AuthManager).getCopilotTokenManager();\n }\n\n if (tokenManager === undefined) {\n // If not, let's find out why.\n const authResult = await ctx.get(AuthManager).checkAndUpdateStatus(ctx);\n if (authResult.status !== 'OK') {\n return {\n code: ErrorCode.NoCopilotToken,\n message: `Not authenticated: ${authResult.status}`,\n };\n }\n tokenManager = ctx.get(AuthManager).getCopilotTokenManager();\n if (tokenManager === undefined) {\n // This case should be impossible because if `checkAndUpdateStatus` returned `OK` then\n // it should have set up a token manager.\n return {\n code: ErrorCode.InternalError,\n message: `Unexpected missing Copilot token`,\n };\n }\n }\n\n const requestCtx = new Context(ctx);\n requestCtx.forceSet(CopilotTokenManager, tokenManager);\n return requestCtx;\n}\n","//Based on: https://github.com/microsoft/vscode/blob/94c9ea46838a9a619aeafb7e8afd1170c967bb55/src/vs/base/common/cancellation.ts\nimport {ICancellationToken, IDisposable} from '../../lib/src/common/cancellation';\n\nconst shortcutEvent = Object.freeze(function (callback: (e: any) => any, context?: any): IDisposable {\n const handle = setTimeout(callback.bind(context), 0);\n return {\n dispose() {\n clearTimeout(handle);\n },\n };\n});\n\nconst none: ICancellationToken = Object.freeze({\n isCancellationRequested: false,\n onCancellationRequested: () => {\n return {dispose: () => {}};\n },\n});\n\nconst cancelled: ICancellationToken = Object.freeze({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent,\n});\n\nclass MutableToken implements ICancellationToken {\n private _isCancelled = false;\n private handlers: ((e: any) => any)[] = [];\n\n public cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n this.handlers.forEach(handler => handler(undefined));\n }\n }\n\n get isCancellationRequested(): boolean {\n return this._isCancelled;\n }\n\n public onCancellationRequested(\n listener: (e: any) => any,\n thisArgs?: any,\n disposables?: IDisposable[]\n ): IDisposable {\n if (this._isCancelled) {\n return shortcutEvent(listener, thisArgs);\n }\n this.handlers.push(listener.bind(thisArgs));\n return {dispose: () => {}};\n }\n\n public dispose(): void {\n this.handlers = [];\n }\n}\n\n/**\n * A cancellation token constructed from multiple other cancellation tokens.\n * It reports as cancelled when ANY of the component tokens are.\n * Cancellation of any of the component tokens will trigger cancellation of this token (i.e. `onCancellationRequested` from this token will be triggered).\n */\nexport class MergedToken implements ICancellationToken {\n private tokens: ICancellationToken[] = [];\n private handlers: ((e: any) => any)[] = [];\n private _isCancelled = false;\n\n private cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n this.handlers.forEach(handler => handler(undefined));\n }\n }\n\n constructor(tokens: ICancellationToken[]) {\n this.tokens = tokens;\n //Check if any of the tokens is already cancelled\n this._isCancelled = tokens.some(t => t.isCancellationRequested);\n //If any of the tokens triggers cancellation event, we want to propagate it\n tokens.forEach(t => {\n t.onCancellationRequested(this.cancel, this);\n });\n }\n\n public dispose(): void {\n this.tokens = [];\n }\n\n get isCancellationRequested(): boolean {\n return this.tokens.some(t => t.isCancellationRequested);\n }\n\n public onCancellationRequested(\n listener: (e: any) => any,\n thisArgs?: any,\n disposables?: IDisposable[]\n ): IDisposable {\n if (this._isCancelled) {\n return shortcutEvent(listener, thisArgs);\n }\n this.handlers.push(listener.bind(thisArgs));\n return {dispose: () => {}};\n }\n}\n\nexport class CancellationTokenSource {\n private _token?: ICancellationToken = undefined;\n private _parentListener?: IDisposable = undefined;\n\n constructor(parent?: ICancellationToken) {\n this._parentListener = parent && parent.onCancellationRequested(this.cancel, this);\n }\n\n get token(): ICancellationToken {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n\n cancel(): void {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = cancelled;\n } else if (this._token instanceof MutableToken) {\n // actually cancel\n this._token.cancel();\n }\n }\n\n dispose(cancel = false): void {\n if (cancel) {\n this.cancel();\n }\n if (this._parentListener) {\n this._parentListener.dispose();\n }\n if (!this._token) {\n // ensure to initialize with an empty token if we had none\n this._token = none;\n } else if (this._token instanceof MutableToken) {\n // actually dispose\n this._token.dispose();\n }\n }\n}\n","import {\n ConfigKeyType,\n DefaultsOnlyConfigProvider,\n EditorAndPluginInfo,\n InMemoryConfigProvider,\n NameAndVersion,\n} from '../../lib/src/config';\n\nexport class AgentConfigProvider extends InMemoryConfigProvider {\n constructor() {\n super(new DefaultsOnlyConfigProvider(), new Map());\n }\n\n getOptionalConfig(key: ConfigKeyType): T | undefined {\n if (Array.isArray(key) && key[0] == 'editor' && !this.isDefaultSettingOverwritten(key)) {\n return undefined;\n }\n return super.getConfig(key);\n }\n}\n\nexport class AgentEditorInfo extends EditorAndPluginInfo {\n private _editorInfo: NameAndVersion | undefined;\n private _editorPluginInfo: NameAndVersion | undefined;\n\n setEditorAndPluginInfo(editorInfo: NameAndVersion, editorPluginInfo: NameAndVersion): void {\n this._editorInfo = editorInfo;\n this._editorPluginInfo = editorPluginInfo;\n }\n\n getEditorInfo(): NameAndVersion {\n if (this._editorInfo) {\n return this._editorInfo;\n }\n // TODO this is transitional only and should become an error.\n // We don't want a mess of unattributable telemetry.\n return {name: 'unknown-editor', version: '0'};\n }\n\n getEditorPluginInfo(): NameAndVersion {\n if (this._editorPluginInfo) {\n return this._editorPluginInfo;\n }\n // TODO this is transitional only and should become an error.\n // We don't want a mess of unattributable telemetry.\n return {name: 'unknown-editor-plugin', version: '0'};\n }\n}\n","import {LRUCacheMap} from '../../lib/src/common/cache';\nimport {CopilotCompletion} from '../../lib/src/ghostText/copilotCompletion';\n\nexport class CopilotCompletionCache extends LRUCacheMap {\n constructor(maxSize = 100) {\n super(maxSize);\n }\n}\n","import {appendFile} from 'fs';\nimport {Writable} from 'stream';\nimport {\n Connection,\n createConnection,\n ProposedFeatures,\n StreamMessageReader,\n StreamMessageWriter,\n} from 'vscode-languageserver/node';\nimport {Context} from '../../lib/src/context';\nimport {Logger, LogLevel} from '../../lib/src/logger';\nimport {RuntimeMode} from '../../lib/src/testing/runtimeMode';\nimport {DebugServer} from './debug/debugServer';\n\n/** Wraps a vscode language server Connection, adding debug logging. */\nexport class WrappedConnection {\n constructor(readonly conn: Connection) {}\n\n static from(ctx: Context, readable: NodeJS.ReadableStream, writable: NodeJS.WritableStream): WrappedConnection {\n let writerStream = writable;\n const debugPort = parseInt(process.env.GH_COPILOT_DEBUG_UI_PORT!);\n if (!isNaN(debugPort)) {\n try {\n const debugServer = new DebugServer(debugPort).listen();\n writerStream = debugServer.wrapStdout(writable);\n } catch (e) {\n new Logger(LogLevel.WARN, 'agent').error(\n ctx,\n `Failed to start debug server on port ${debugPort} (maybe it's in use?)`,\n e\n );\n }\n }\n if (ctx.get(RuntimeMode).flags.recordInput) {\n const stamp = Date.now().toString();\n const inLogName = `stdin${stamp}.log`;\n readable.on('data', (data: string) => {\n appendFile(inLogName, data, err => {\n if (err) {\n console.error(err);\n }\n });\n });\n const outLogName = `stdout${stamp}.log`;\n writerStream = wrapWritableStream(writerStream, data => {\n appendFile(outLogName, data, err => {\n if (err) {\n console.error(err);\n }\n });\n });\n }\n\n // This is the protocol as defined by `vscode-languageserver`.\n // Each message should have:\n // one line containing 'Content-Length: ' where `n` is the length of the JSON\n // then a blank line\n // then the actual JSON\n // Also, lines need to be terminated with `\\r\\n` regardless of platform.\n const conn = createConnection(\n ProposedFeatures.all,\n new StreamMessageReader(readable),\n new StreamMessageWriter(writerStream)\n );\n return new WrappedConnection(conn);\n }\n\n listen() {\n this.conn.listen();\n }\n}\n\nfunction wrapWritableStream(stream: NodeJS.WritableStream, callback: (data: string) => void) {\n const stdinStream = new Writable({\n write: (str: string, encoding: BufferEncoding | undefined, cb: () => void) => {\n callback(str.toString());\n return stream.write(str, encoding, cb);\n },\n });\n return stdinStream;\n}\n","import * as events from 'events';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport * as path from 'path';\nimport * as stream from 'stream';\n\n/**\n * Wraps stdin and stdout, exposing them as server-sent event (SSE) streams.\n * These are accessible via /stdin and /stdout respectively, both served on the\n * provided port. The server will also serve a simple HTML page at / that can be\n * used to view the streams.\n */\nexport class DebugServer {\n private stdoutEmitter = new events.EventEmitter();\n private server: http.Server;\n\n constructor(private port: number) {\n this.server = http.createServer((req: http.IncomingMessage, res: http.ServerResponse) => {\n if (req.headers.accept && req.headers.accept == 'text/event-stream') {\n res.writeHead(200, {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n });\n switch (req.url) {\n case '/stdin':\n process.stdin.on('data', (data: string | Buffer) => {\n writeData(res, data);\n });\n return;\n case '/stdout':\n this.stdoutEmitter.on('data', (data: string) => {\n writeData(res, data);\n });\n return;\n default:\n res.writeHead(404);\n res.end();\n return;\n }\n }\n res.writeHead(200, {\n 'Content-Type': 'text/html',\n });\n let base = __dirname;\n if (path.basename(__dirname) === 'dist') {\n base = path.dirname(__dirname);\n }\n let file;\n try {\n file = fs.readFileSync(path.join(base, 'dist', 'debugServer.html'));\n } catch (e: any) {\n file = e.toString();\n }\n res.write(file);\n res.end();\n });\n }\n\n wrapStdout(stdout: NodeJS.WritableStream) {\n const stdoutStream = new stream.Writable({\n write: (str: string, encoding: BufferEncoding | undefined, cb: () => void) => {\n this.stdoutEmitter.emit('data', str);\n return stdout.write(str, encoding, cb);\n },\n });\n return stdoutStream;\n }\n\n listen(): this {\n this.server.listen(this.port);\n return this;\n }\n}\n\nfunction writeData(res: NodeJS.WritableStream, data: string | Buffer) {\n res.write('data: ' + data.toString().replace(/\\n/g, '\\ndata: ') + '\\n\\n');\n}\n","import {NotificationType} from 'vscode-languageserver/node';\nimport {CopilotTokenNotifier} from '../../../lib/src/auth/copilotTokenNotifier';\nimport {Context} from '../../../lib/src/context';\nimport {AgentNotificationSender} from '../notificationSender';\n\ninterface FeatureFlagsNotification {\n ssc: boolean;\n rt: boolean;\n chat: boolean;\n}\n\nexport class FeatureFlagsNotifier {\n private readonly notificationEndpoint = 'featureFlagsNotification';\n\n constructor(private readonly ctx: Context) {\n ctx.get(CopilotTokenNotifier).on('onCopilotToken', (token, envelope) => {\n this.sendNotification({\n ssc: token.getTokenValue('ssc') === '1',\n rt: token.getTokenValue('rt') === '1',\n chat: envelope.chat_enabled ?? false,\n });\n });\n }\n\n private sendNotification(notification: FeatureFlagsNotification) {\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationEndpoint), notification);\n }\n}\n","import {NotificationType} from 'vscode-languageserver/node';\nimport {Context} from '../../../lib/src/context';\nimport {LogLevel, LogTarget, toPlainText} from '../../../lib/src/logger';\nimport {AgentNotificationSender} from '../notificationSender';\n\ninterface LogNotification {\n level: LogLevel;\n message: string;\n metadataStr: string;\n extra: string[];\n}\n\nexport class NotificationLogger extends LogTarget {\n constructor(private readonly debugMode: boolean) {\n super();\n }\n\n logIt(ctx: Context, level: LogLevel, metadataStr: string, ...extra: any[]): void {\n const notification = {\n level: level,\n message: `${metadataStr} ${extra.map(toPlainText)}`,\n metadataStr,\n extra: extra.map(toPlainText),\n };\n\n ctx.get(AgentNotificationSender).sendNotification(\n new NotificationType('LogMessage'),\n notification\n );\n }\n\n //We don't want to send DEBUG messages to the client unless Agent is in debug mode.\n override shouldLog(ctx: Context, level: LogLevel): boolean | undefined {\n if (this.debugMode) {\n return true;\n }\n return level > LogLevel.DEBUG;\n }\n}\n","import {NotificationType} from 'vscode-languageserver';\nimport {Context} from '../../../lib/src/context';\nimport {CopilotTelemetryReporter, TelemetryReporters} from '../../../lib/src/telemetry';\nimport {AgentNotificationSender} from '../notificationSender';\n\ninterface TelemetryNotification {\n type: 'event' | 'exception';\n name: string;\n error?: {\n message: string;\n code: string;\n };\n properties: {\n [key: string]: string;\n };\n measurements: {\n [key: string]: number;\n };\n}\n\nexport class RedirectTelemetryReporter implements CopilotTelemetryReporter {\n constructor(private readonly ctx: Context, public readonly codeSnippets: boolean = false) {}\n\n private get notificationName(): string {\n return this.codeSnippets ? 'codeSnippetTelemetry' : 'telemetry';\n }\n\n sendTelemetryEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void {\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationName), {\n type: 'event',\n name: eventName,\n properties: properties || {},\n measurements: measurements || {},\n });\n }\n\n sendTelemetryErrorEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void {\n this.sendTelemetryEvent(eventName, properties, measurements);\n }\n\n sendTelemetryException(\n error: Error,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void {\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationName), {\n type: 'exception',\n name: 'exception',\n error: this.serializableError(error),\n properties: properties || {},\n measurements: measurements || {},\n });\n }\n\n private serializableError(error: any): {message: string; code: string} {\n // this mirrors how app insights handles exceptions\n return {\n message: error.message,\n code: error.code || error.id || '',\n };\n }\n\n dispose(): Promise {\n return Promise.resolve();\n }\n}\n\nexport async function setupRedirectingTelemetryReporters(ctx: Context): Promise {\n const container = ctx.get(TelemetryReporters);\n const deactivation = container.deactivate();\n container.setReporter(new RedirectTelemetryReporter(ctx));\n container.setSecureReporter(new RedirectTelemetryReporter(ctx, true));\n await deactivation; // awaiting this last protects against unpredictable telemetry destinations if this function is called without awaiting it\n}\n","import {NotificationType} from 'vscode-languageserver/node';\nimport {Context} from '../../../lib/src/context';\nimport {StatusReporter} from '../../../lib/src/progress';\nimport {AgentNotificationSender} from '../notificationSender';\n\ninterface StatusNotification {\n status: string;\n message: string;\n}\n\nexport class NotificationStatusReporter extends StatusReporter {\n readonly notificationEndpoint = 'statusNotification';\n status: 'Error' | 'Normal' | 'Warning' | 'InProgress' | 'Inactive' = 'Normal';\n\n constructor(private readonly ctx: Context) {\n super();\n }\n\n setProgress() {\n if (this.status === 'Error') {\n return;\n }\n this.status = 'InProgress';\n const notification = {\n status: 'InProgress',\n message: '',\n };\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationEndpoint), notification);\n }\n\n removeProgress() {\n if (this.status === 'Error' || this.status === 'Warning') {\n return;\n }\n this.status = 'Normal';\n const notification = {\n status: 'Normal',\n message: '',\n };\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationEndpoint), notification);\n }\n\n forceNormal() {\n this.status = 'Normal';\n const notification = {\n status: 'Normal',\n message: '',\n };\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationEndpoint), notification);\n }\n\n setInactive() {}\n\n setWarning(warningMessage?: string) {\n if (this.status === 'Error') {\n return;\n }\n this.status = 'Warning';\n const notification = {\n status: 'Warning',\n message: warningMessage ?? '',\n };\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationEndpoint), notification);\n }\n\n setError(errorMessage: string) {\n this.status = 'Error';\n const notification = {\n status: 'Error',\n message: errorMessage,\n };\n this.ctx\n .get(AgentNotificationSender)\n .sendNotification(new NotificationType(this.notificationEndpoint), notification);\n }\n}\n","import {FileStat, FileSystem} from '@github/copilot-promptlib';\nimport {promises as fsp} from 'fs';\n\nclass AgentFileSystem extends FileSystem {\n readFile(uri: string): Promise {\n return fsp.readFile(uri);\n }\n async mtime(uri: string): Promise {\n const stat = await fsp.stat(uri);\n return stat.mtimeMs;\n }\n async stat(uri: string): Promise {\n const stat = await fsp.stat(uri);\n return {\n ctime: stat.ctimeMs,\n mtime: stat.mtimeMs,\n size: stat.size,\n };\n }\n}\n\nexport const agentFileSystem = new AgentFileSystem();\n","import {coerce, gt} from 'semver';\nimport {EditorAndPluginInfo} from '../../lib/src/config';\nimport {Context} from '../../lib/src/context';\nimport {InstallationManager} from '../../lib/src/installationManager';\nimport {PersistenceManager} from './persist';\n\nexport class AgentInstallationManager extends InstallationManager {\n async isNewInstall(ctx: Context): Promise {\n const info = ctx.get(EditorAndPluginInfo).getEditorPluginInfo();\n const knownVersion = await ctx.get(PersistenceManager).read('versions', info.name);\n return knownVersion === undefined && !(await this.hasPersistedSettings(ctx));\n }\n\n private async hasPersistedSettings(ctx: Context): Promise {\n const allSettings = await ctx.get(PersistenceManager).listSettings();\n return allSettings.length > 0;\n }\n\n async markInstalled(ctx: Context): Promise {\n const info = ctx.get(EditorAndPluginInfo).getEditorPluginInfo();\n await ctx.get(PersistenceManager).update('versions', info.name, info.version);\n }\n\n wasPreviouslyInstalled(ctx: Context): Promise {\n return Promise.resolve(false); // there isn't currently a way to detect this\n }\n\n async isNewUpgrade(ctx: Context): Promise {\n try {\n const info = ctx.get(EditorAndPluginInfo).getEditorPluginInfo();\n const knownVersion = await ctx.get(PersistenceManager).read('versions', info.name);\n if (knownVersion === undefined && (await this.hasPersistedSettings(ctx))) return true;\n return gt(coerce(info.version)!, coerce(knownVersion)!);\n } catch (e) {\n return false;\n }\n }\n\n async markUpgraded(ctx: Context): Promise {\n await this.markInstalled(ctx);\n }\n\n override async uninstall(ctx: Context): Promise {\n await super.uninstall(ctx);\n const info = ctx.get(EditorAndPluginInfo).getEditorPluginInfo();\n await ctx.get(PersistenceManager).delete('versions', info.name);\n\n const otherVersions = await ctx.get(PersistenceManager).listKeys('versions');\n if (otherVersions.length === 0) {\n // it would be nice to remove the hosts settings as well, but that would be\n // destructive if this machine has multiple versions of the same editor with\n // Copilot installed (which is possible).\n await ctx.get(PersistenceManager).deleteSetting('versions');\n }\n }\n}\n","import {\n AbstractMessageReader,\n AbstractMessageWriter,\n DataCallback,\n Disposable,\n MessageWriter,\n ProposedFeatures,\n RequestMessage,\n createConnection,\n} from 'vscode-languageserver/node';\nimport {WrappedConnection} from './debug';\n\nexport class FakeMessageReader extends AbstractMessageReader {\n private _callback: ((msg: RequestMessage) => void) | undefined;\n listen(callback: DataCallback): Disposable {\n this._callback = callback;\n return {\n dispose: () => {\n this._callback = undefined;\n },\n };\n }\n public sendMessage(msg: any): void {\n if (this._callback) {\n this._callback({jsonrpc: '2.0', ...msg});\n }\n }\n}\n\nexport class FakeMessageWriter extends AbstractMessageWriter implements MessageWriter {\n messages: RequestMessage[] = [];\n async write(msg: RequestMessage): Promise {\n this.messages.push(msg);\n }\n end(): void {}\n}\n\nexport class FakeWrappedConnection extends WrappedConnection {\n constructor(readonly reader = new FakeMessageReader(), readonly writer = new FakeMessageWriter()) {\n super(createConnection(ProposedFeatures.all, reader, writer));\n }\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {AuthManager, AuthStatus} from '../auth/manager';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {getTestingContext} from '../testing/context';\nimport {MethodResult} from './methods';\nimport {TestingOptions} from './testingOptions';\n\nconst Params = Type.Object({\n options: Type.Optional(\n Type.Intersect([\n Type.Object({\n /**\n * If `true` then only conduct partial checks that can be run locally.\n *\n * If `false` then include any steps that require the network.\n *\n * Defaults to `false`.\n */\n localChecksOnly: Type.Optional(Type.Boolean()),\n }),\n TestingOptions,\n ])\n ),\n});\n\ntype Params = Static;\n\nexport type Result = AuthStatus;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * The `checkStatus` method is used to verify whether the agent is ready for the client\n * to send requests. Typically it will be called either on process startup and/or when the\n * user decides to configure Copilot.\n */\nexport default async function handleCheckStatus(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n if (params.options?.testingCtx !== undefined) {\n ctx = getTestingContext(params.options.testingCtx);\n }\n const status = await ctx.get(AuthManager).checkAndUpdateStatus(ctx, params.options);\n return [status, null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport * as uuid from 'uuid';\nimport {URI} from 'vscode-uri';\nimport {CopilotTokenManager} from '../../../lib/src/auth/copilotToken';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {completionsFromGhostTextResults} from '../../../lib/src/ghostText/copilotCompletion';\nimport {CompletionResult, ResultType, getGhostText} from '../../../lib/src/ghostText/ghostText';\nimport {\n GhostTextResultWithTelemetry,\n handleGhostTextResultTelemetry,\n mkCanceledResultTelemetry,\n} from '../../../lib/src/ghostText/telemetry';\nimport {LogLevel, Logger} from '../../../lib/src/logger';\nimport {isAbortError} from '../../../lib/src/networking';\nimport {TelemetryData, telemetry} from '../../../lib/src/telemetry';\nimport {IPosition, IRange, ITextDocument, LocationFactory} from '../../../lib/src/textDocument';\nimport {createRequestContext} from '../auth/manager';\nimport {CancellationTokenSource, MergedToken} from '../cancellation';\nimport {CopilotCompletionCache} from '../copilotCompletionCache';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {parseChallengeDoc} from '../testing/challengeDoc';\nimport {getTestingContext} from '../testing/context';\nimport {AgentTextDocument, getTextDocumentChecked} from '../textDocument';\nimport {MethodResult} from './methods';\nimport {CompletionDocuments} from './testing/setCompletionDocuments';\nimport {TestingOptions} from './testingOptions';\n\nconst Params = Type.Object({\n doc: Type.Object({\n position: Type.Object({\n line: Type.Number({minimum: 0}),\n character: Type.Number({minimum: 0}),\n }),\n insertSpaces: Type.Optional(Type.Boolean()),\n tabSize: Type.Optional(Type.Number()),\n uri: Type.String(),\n version: Type.Number(),\n source: Type.Optional(Type.String()),\n languageId: Type.Optional(Type.String()),\n relativePath: Type.Optional(Type.String()),\n ifInserted: Type.Optional(\n Type.Object({\n text: Type.String(),\n end: Type.Optional(\n Type.Object({\n line: Type.Number({minimum: 0}),\n character: Type.Number({minimum: 0}),\n })\n ),\n })\n ),\n }),\n options: Type.Optional(TestingOptions),\n});\n\nexport type Params = Static;\n\nexport type CancellationReason = 'DocumentVersionMismatch' | 'RequestCancelled' | 'OtherFailure';\n\nexport type Result = {\n completions: Array<{\n uuid: string;\n text: string;\n docVersion: number;\n range: IRange;\n displayText: string;\n position: IPosition;\n }>;\n cancellationReason?: CancellationReason;\n};\n\nconst logger = new Logger(LogLevel.DEBUG, 'getCompletions');\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nlet cancellationTokenSource: CancellationTokenSource | undefined;\n\nasync function handleGetCompletionsHelper(\n ctx: Context,\n serverToken: ICancellationToken,\n params: unknown,\n tokenManager: CopilotTokenManager | undefined = undefined,\n isCycling: boolean\n): Promise> {\n const telemetryData = TelemetryData.createAndMarkAsIssued();\n //This implements `cancel-previous` behavior. Whenever we get new `getCompletions` or `getCompletionsCycling` requests, we cancel the previous one.\n if (cancellationTokenSource) {\n cancellationTokenSource.cancel();\n cancellationTokenSource.dispose();\n }\n cancellationTokenSource = new CancellationTokenSource();\n //We cancel either on `cancel-previous` or after the LSP cancel request is received (managed by the server library)\n const token = new MergedToken([serverToken, cancellationTokenSource.token]);\n\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n if (params.options?.testingCtx !== undefined) {\n ctx = getTestingContext(params.options.testingCtx);\n }\n\n let testingDocs;\n try {\n testingDocs = ctx.get(CompletionDocuments);\n } catch (e) {\n // TODO this is a hack to avoid exposing `tryGet` from the context, which is also not desirable. If this approach works out we should have a\n // \"live\" CompletionDocuments object too.\n }\n if (testingDocs) {\n const numCompletions = isCycling ? 3 : 1;\n const result = testingDocs.documents.slice(0, numCompletions).map((challengeDoc: string) => {\n const {cursorLine, lines, start, end} = parseChallengeDoc(challengeDoc, params.doc.position);\n const completion = [cursorLine.slice(Math.min(start.character, params.doc.position.character))]\n .concat(lines.slice(params.doc.position.line + 1))\n .join('\\n');\n return {\n uuid: uuid.v4(),\n text: completion,\n displayText: completion,\n position: params.doc.position,\n range: {start, end},\n docVersion: params.doc.version,\n };\n });\n return [{completions: result}, null];\n }\n\n const requestCtx = await createRequestContext(ctx, tokenManager);\n\n if (!(requestCtx instanceof Context)) {\n // it's an RPC error, return it\n return [null, requestCtx];\n }\n\n const uri = URI.parse(params.doc.uri);\n let textDocument: ITextDocument;\n try {\n textDocument = await getTextDocumentChecked(ctx, uri, params.doc);\n if (textDocument.version !== params.doc.version) {\n raiseVersionMismatchIfNotCanceled(ctx, token, textDocument, params);\n return [{completions: [], cancellationReason: 'DocumentVersionMismatch'}, null];\n }\n } catch (e) {\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: (e as Error).message,\n },\n ];\n }\n\n const position = positionAndContentForCompleting(\n requestCtx,\n telemetryData,\n textDocument,\n params.doc.position,\n params.doc.ifInserted\n );\n\n logCompletionLocation(ctx, textDocument, position);\n\n const resultWithTelemetry = await getGhostTextWithAbortHandling(\n requestCtx,\n textDocument,\n position,\n isCycling,\n telemetryData,\n token\n );\n\n // TODO handling telemetry at this point doesn't take account of the possibility of something going wrong later.\n // We don't do much more before we return the result to the editor, but in theory something could still go wrong\n // either in the small amount of code in the agent, or inside the editor itself.\n const result = await handleGhostTextResultTelemetry(ctx, resultWithTelemetry);\n if (!result) {\n return [{completions: [], ...cancellationReason(resultWithTelemetry)}, null];\n }\n const [resultArray, resultType] = result;\n\n const rawCompletions = completionsFromGhostTextResults(\n ctx,\n resultArray,\n resultType,\n textDocument,\n position,\n params.doc\n );\n\n //Put returned completions in temporary cache used for telemetry\n const cache = ctx.get(CopilotCompletionCache);\n for (const completion of rawCompletions) {\n cache.set(completion.uuid, completion);\n }\n\n const completions = rawCompletions.map(rawCompletion => {\n return {\n uuid: rawCompletion.uuid,\n text: rawCompletion.text,\n range: rawCompletion.range,\n displayText: rawCompletion.displayText,\n position: rawCompletion.position,\n docVersion: textDocument.version,\n };\n });\n\n return [{completions}, null];\n}\n\nasync function raiseVersionMismatchIfNotCanceled(\n ctx: Context,\n token: MergedToken,\n textDocument: ITextDocument,\n params: Params\n) {\n if (!token.isCancellationRequested) {\n telemetryVersionMismatch(ctx, textDocument, params.doc.version);\n logger.debug(\n ctx,\n `Producing empty completions due to document version mismatch. Completions requested for document version ${params.doc.version} but document version was ${textDocument.version}.`\n );\n }\n}\n\nfunction positionAndContentForCompleting(\n ctx: Context,\n telemetryData: TelemetryData,\n textDocument: ITextDocument,\n docPosition: {line: number; character: number},\n ifInserted?: {text: string; end?: {line: number; character: number}}\n): IPosition {\n const offset = textDocument.offsetAt(ctx.get(LocationFactory).position(docPosition.line, docPosition.character));\n let position = textDocument.positionAt(offset);\n\n if (ifInserted && ifInserted.text.length > 0 && textDocument instanceof AgentTextDocument) {\n const endRange = ifInserted.end ?? docPosition;\n textDocument.update(\n [\n {\n range: {start: docPosition, end: endRange},\n text: ifInserted.text,\n },\n ],\n textDocument.version\n );\n position = textDocument.positionAt(offset + ifInserted.text.length);\n telemetryData.properties.completionsActive = 'true';\n }\n\n return position;\n}\n\nfunction logCompletionLocation(ctx: Context, textDocument: ITextDocument, position: IPosition) {\n const prefix = textDocument.getText({\n start: {line: Math.max(position.line - 1, 0), character: 0},\n end: position,\n });\n const suffix = textDocument.getText({\n start: position,\n end: {\n line: Math.min(position.line + 2, textDocument.lineCount - 1),\n character: textDocument.lineCount - 1 > position.line ? 0 : position.character,\n },\n });\n\n logger.debug(\n ctx,\n `Requesting completion at position ${position.line}:${position.character}, between ${JSON.stringify(\n prefix\n )} and ${JSON.stringify(suffix)}.`\n );\n}\n\nasync function telemetryVersionMismatch(ctx: Context, textDocument: ITextDocument, requestedDocumentVersion: number) {\n const data = TelemetryData.createAndMarkAsIssued({\n languageId: String(textDocument.languageId),\n requestedDocumentVersion: String(requestedDocumentVersion),\n actualDocumentVersion: String(textDocument.version),\n });\n telemetry(ctx, 'getCompletions.docVersionMismatch', data);\n}\n\nfunction cancellationReason(\n resultWithTelemetry: GhostTextResultWithTelemetry<[CompletionResult[], ResultType]>\n): {cancellationReason: CancellationReason} | undefined {\n switch (resultWithTelemetry.type) {\n case 'abortedBeforeIssued':\n case 'canceled':\n return {cancellationReason: 'RequestCancelled'};\n case 'failed':\n return {cancellationReason: 'OtherFailure'};\n default:\n return;\n }\n}\n\nasync function getGhostTextWithAbortHandling(\n requestCtx: Context,\n textDocument: ITextDocument,\n position: IPosition,\n isCycling: boolean,\n telemetryData: TelemetryData,\n token: MergedToken\n): Promise> {\n try {\n return await getGhostText(requestCtx, textDocument, position, isCycling, telemetryData, token);\n } catch (e: any) {\n // The cancellation token may be called after the request is done but while we still process data.\n // The underlying implementation catches abort errors for specific scenarios but we still have uncovered paths.\n // To avoid that the LSP server doesn't return an error to the editor, this acts as an fault barrier here.\n if (isAbortError(e)) {\n return {\n type: 'canceled',\n reason: 'aborted at unknown location',\n telemetryData: mkCanceledResultTelemetry(telemetryData, {\n cancelledNetworkRequest: true,\n }),\n };\n }\n throw e;\n }\n}\n\nexport async function handleGetCompletions(\n ctx: Context,\n token: ICancellationToken,\n params: unknown,\n tokenManager: CopilotTokenManager | undefined = undefined\n) {\n return handleGetCompletionsHelper(ctx, token, params, tokenManager, false);\n}\n\nexport async function handleGetCompletionsCycling(\n ctx: Context,\n token: ICancellationToken,\n params: unknown,\n tokenManager: CopilotTokenManager | undefined = undefined\n) {\n return handleGetCompletionsHelper(ctx, token, params, tokenManager, true);\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {SHA256} from 'crypto-js';\nimport * as uuid from 'uuid';\nimport {NotificationType} from 'vscode-languageserver';\nimport {URI} from 'vscode-uri';\nimport {CopilotTokenManager} from '../../../lib/src/auth/copilotToken';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {ConfigKey, getConfig} from '../../../lib/src/config';\nimport {Context} from '../../../lib/src/context';\nimport {CompletionContext, completionContextForDocument} from '../../../lib/src/copilotPanel/common';\nimport {\n ISolutionManager,\n SolutionsStream,\n UnformattedSolution,\n launchSolutions,\n normalizeCompletionText,\n} from '../../../lib/src/copilotPanel/panel';\nimport {LogLevel, Logger} from '../../../lib/src/logger';\nimport {TelemetryData} from '../../../lib/src/telemetry';\nimport {IPosition, IRange, ITextDocument, LocationFactory} from '../../../lib/src/textDocument';\nimport {createRequestContext} from '../auth/manager';\nimport {CancellationTokenSource, MergedToken} from '../cancellation';\nimport {AgentNotificationSender} from '../notificationSender';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {parseChallengeDoc} from '../testing/challengeDoc';\nimport {getTestingContext} from '../testing/context';\nimport {getTextDocumentChecked} from '../textDocument';\nimport {MethodResult} from './methods';\nimport {PanelCompletionDocuments} from './testing/setPanelCompletionDocuments';\nimport {TestingOptions} from './testingOptions';\n\nconst Params = Type.Object({\n doc: Type.Object({\n position: Type.Object({\n line: Type.Number({minimum: 0}),\n character: Type.Number({minimum: 0}),\n }),\n uri: Type.String(),\n version: Type.Number(),\n source: Type.Optional(Type.String()),\n languageId: Type.Optional(Type.String()),\n relativePath: Type.Optional(Type.String()),\n }),\n // This will be used to identify individual solutions sent via notifications as they become available.\n // It can be anything the caller chooses, but if it is not unique for each request the caller\n // may have problems routing solutions to the right place.\n panelId: Type.String(),\n options: Type.Optional(TestingOptions),\n});\n\ntype Params = Static;\n\nexport type Result = {\n // The number of solutions we are aiming to produce. Invalid solutions and duplicates will be dropped,\n // so we may not achieve this target.\n solutionCountTarget: number;\n};\n\nexport type Solution = {\n panelId: string;\n // The range of the document which should be replaced by the solution.\n // TODO: for now we report every completion with an empty replace range\n // at the current cursor position. This means that we can't handle things like\n // de-indentation (VSCode can't either).\n range: IRange;\n // The text of the solution to insert in the document\n completionText: string;\n // The text of the solution to display.\n displayText: string;\n // Use this to rank the solutions as they appear. Higher score = better solution.\n score: number;\n // If a new solution with this id is received, it's a duplicate modulo whitespace.\n // If the new score is better, then replace the old one (in the appropriate position\n // for the new score). If the new score is not better, just ignore the new solution.\n solutionId: string;\n // The doc version this solution was generated for.\n docVersion: number;\n};\n\nexport type SolutionsDone = {\n panelId: string;\n status: 'OK' | 'Error';\n message?: string;\n};\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\n\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nfunction makeSolution(panelId: string, range: IRange, unformattedSolution: UnformattedSolution): Solution {\n const normalizedText = normalizeCompletionText(unformattedSolution.completionText);\n\n return {\n panelId,\n range,\n completionText: unformattedSolution.completionText,\n displayText: unformattedSolution.displayText,\n score: unformattedSolution.meanProb,\n solutionId: SHA256(normalizedText).toString(),\n docVersion: unformattedSolution.docVersion,\n };\n}\n\nclass AgentSolutionManager implements ISolutionManager {\n public savedTelemetryData: TelemetryData = TelemetryData.createAndMarkAsIssued();\n\n constructor(\n private readonly textDocument: ITextDocument,\n public readonly startPosition: IPosition,\n public readonly completionContext: CompletionContext,\n public readonly solutionCountTarget: number,\n public readonly cancellationToken: ICancellationToken\n ) {}\n\n public reportCancelled(): void {\n // Nothing extra to do: the SolutionsStream will end with the appropriate error anyway.\n }\n\n public getCancellationToken(): ICancellationToken {\n return this.cancellationToken;\n }\n\n public async getDocument(): Promise {\n return this.textDocument;\n }\n}\n\nasync function reportSolutions(\n panelId: string,\n range: IRange,\n notificationSender: AgentNotificationSender,\n nextSolutionPromise: Promise,\n reportNotificationsDone: () => void\n): Promise {\n const nextSolution = await nextSolutionPromise;\n switch (nextSolution.status) {\n case 'Solution':\n notificationSender.sendNotification(\n new NotificationType('PanelSolution'),\n makeSolution(panelId, range, nextSolution.solution)\n );\n await reportSolutions(panelId, range, notificationSender, nextSolution.next, reportNotificationsDone);\n break;\n case 'FinishedNormally':\n await reportDone(panelId, notificationSender, reportNotificationsDone);\n break;\n case 'FinishedWithError':\n notificationSender.sendNotification(new NotificationType('PanelSolutionsDone'), {\n status: 'Error',\n message: nextSolution.error,\n panelId,\n });\n reportNotificationsDone();\n break;\n }\n}\n\nasync function reportDone(\n panelId: string,\n notificationSender: AgentNotificationSender,\n reportNotificationsDone: () => void\n) {\n notificationSender.sendNotification(new NotificationType('PanelSolutionsDone'), {\n status: 'OK',\n panelId,\n });\n reportNotificationsDone();\n}\n\nlet cancellationTokenSource: CancellationTokenSource | undefined;\n\n/**\n * This method will return immediately with a \"panel id\" and other metadata about the\n * list of solutions.\n *\n * It will then send a stream of 'PanelSolution' notification messages with the panel id.\n * Each will contain a single solution, of type 'Solution'.\n *\n * @param [tokenManager] For testing: override the token manager to use for authentication.\n * @param [reportNotificationsDone] For testing: a function to call when all notification messages have been sent.\n */\nexport async function handleGetPanelCompletions(\n ctx: Context,\n serverToken: ICancellationToken,\n params: unknown,\n tokenManager: CopilotTokenManager | undefined = undefined,\n reportNotificationsDone?: () => void\n): Promise> {\n //This implements `cancel-previous` behavior. Whenever we get new `getCompletions` or `getCompletionsCycling` requests, we cancel the previous one.\n if (cancellationTokenSource) {\n cancellationTokenSource.cancel();\n cancellationTokenSource.dispose();\n }\n cancellationTokenSource = new CancellationTokenSource();\n //We cancel either on `cancel-previous` or after the LSP cancel request is received (managed by the server library)\n const token = new MergedToken([serverToken, cancellationTokenSource.token]);\n\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n if (params.options?.testingCtx !== undefined) {\n ctx = getTestingContext(params.options.testingCtx);\n }\n\n let nextSolutionPromise: Promise;\n let position: IPosition;\n\n const solutionCountTarget = getConfig(ctx, ConfigKey.ListCount);\n\n let testingDocs: PanelCompletionDocuments | undefined;\n try {\n testingDocs = ctx.get(PanelCompletionDocuments);\n } catch (e) {\n // TODO this is a hack to avoid exposing `tryGet` from the context, which is also not desirable. If this approach works out we should have a\n // \"live\" CompletionDocuments object too.\n }\n if (testingDocs) {\n const headerRequestId = uuid.v4();\n const documents = testingDocs.documents;\n\n const getNextSolution: (solutionIndex: number) => Promise = async (solutionIndex: number) => {\n if (solutionIndex >= solutionCountTarget || solutionIndex >= documents.length) {\n return {\n status: 'FinishedNormally',\n };\n }\n const {text, score} = documents[solutionIndex];\n const {cursorLine, lines, start} = parseChallengeDoc(text, params.doc.position);\n const completion = [cursorLine.slice(Math.min(start.character, params.doc.position.character))]\n .concat(lines.slice(params.doc.position.line + 1))\n .join('\\n');\n const unformattedSolution: UnformattedSolution = {\n requestId: {\n headerRequestId,\n completionId: uuid.v4(),\n created: 0,\n serverExperiments: '',\n deploymentId: '',\n },\n completionText: completion,\n displayText: completion,\n meanProb: score, // the current code turns this back into the score later\n meanLogProb: -1,\n choiceIndex: solutionIndex,\n prependToCompletion: '',\n docVersion: params.doc.version,\n };\n return {\n status: 'Solution',\n solution: unformattedSolution,\n next: getNextSolution(solutionIndex + 1),\n };\n };\n position = params.doc.position;\n nextSolutionPromise = getNextSolution(0);\n } else {\n const requestCtx = await createRequestContext(ctx, tokenManager);\n\n if (!(requestCtx instanceof Context)) {\n // it's an RPC error, return it\n return [null, requestCtx];\n }\n\n const uri = URI.parse(params.doc.uri);\n let textDocument;\n try {\n textDocument = await getTextDocumentChecked(ctx, uri, params.doc);\n if (textDocument.version !== params.doc.version) {\n new Logger(LogLevel.DEBUG, 'getPanelCompletions').debug(\n ctx,\n `Producing empty solutions due to document version mismatch. Panel completions requested for document version ${params.doc.version} but document version was ${textDocument.version}.`\n );\n return produceEmptySolutions(ctx, params, reportNotificationsDone);\n }\n } catch (e) {\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: (e as Error).message,\n },\n ];\n }\n\n const offset = textDocument.offsetAt(\n requestCtx.get(LocationFactory).position(params.doc.position.line, params.doc.position.character)\n );\n position = textDocument.positionAt(offset);\n\n const completionContext = completionContextForDocument(ctx, textDocument, position);\n\n const solutionManager = new AgentSolutionManager(\n textDocument,\n position,\n completionContext,\n solutionCountTarget,\n token\n );\n\n nextSolutionPromise = launchSolutions(requestCtx, solutionManager);\n ctx = requestCtx;\n }\n\n // Using setImmediate here is an attempt to delay the start of the notification stream until after the\n // response to this request has been sent. However, it is fragile as it relies both on the behavior\n // of `vscode-languageserver` and of the node.js event loop itself.\n setImmediate(() =>\n reportSolutions(\n params.panelId,\n ctx.get(LocationFactory).range(position, position),\n ctx.get(AgentNotificationSender),\n nextSolutionPromise,\n reportNotificationsDone ?? (() => {})\n )\n );\n\n return [{solutionCountTarget}, null];\n}\n\nfunction produceEmptySolutions(\n ctx: Context,\n params: Params,\n reportNotificationsDone?: () => void\n): MethodResult {\n reportDone(params.panelId, ctx.get(AgentNotificationSender), reportNotificationsDone ?? (() => {}));\n return [{solutionCountTarget: 0}, null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {getVersion} from '../../../lib/src/config';\nimport {Context} from '../../../lib/src/context';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nconst Params = Type.Object({});\n\ntype Params = Static;\n\nexport type Result = {\n version: string;\n};\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleGetVersion(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n return [\n {\n version: getVersion(ctx),\n },\n null,\n ];\n}\n","import {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {RpcError} from '../rpc';\nimport handleCheckStatus from './checkStatus';\nimport {handleGetCompletions, handleGetCompletionsCycling} from './getCompletions';\nimport {handleGetPanelCompletions} from './getPanelCompletions';\nimport handleGetVersion from './getVersion';\nimport {notifyAccepted} from './notifyAccepted';\nimport {notifyRejected} from './notifyRejected';\nimport {notifyShown} from './notifyShown';\nimport {handleSetEditorInfo} from './setEditorInfo';\nimport handleSignInConfirm from './signInConfirm';\nimport handleSignInInitiate from './signInInitiate';\nimport handleSignInWithGithubToken from './signInWithGithubToken';\nimport handleSignOut from './signOut';\nimport handleTelemetryAuthNotifyDismissed from './telemetry/authNotifyDismissed';\nimport handleTelemetryAuthNotifyShown from './telemetry/authNotifyShown';\nimport handleTelemetryGitHubLoginSuccess from './telemetry/gitHubLoginSuccess';\nimport handleTelemetryNewGitHubLogin from './telemetry/newGitHubLogin';\nimport {telemetryExceptionMethod} from './telemetryTrack';\nimport handleTestingAlwaysAuth from './testing/alwaysAuth';\nimport handleTestingCreateContext from './testing/createContext';\nimport handleGetDocument from './testing/getDocument';\nimport handleTestingGetTelemetry from './testing/getTelemetry';\nimport handleTestingNeverAuth from './testing/neverAuth';\nimport handleTestingSetCompletionDocuments from './testing/setCompletionDocuments';\nimport handleTestingSetPanelCompletionDocuments from './testing/setPanelCompletionDocuments';\nimport handleTestingSetTelemetryCapture from './testing/setTelemetryCapture';\nimport handleTriggerShowMessage from './testing/triggerShowMessage';\nimport handleTestingUseTestingToken from './testing/useTestingToken';\nimport handleUninstall from './uninstall';\nimport {handleVerifyCertificate} from './verifyCertificate';\nimport {handleVerifyState, handleVerifyWorkspaceState} from './verifyState';\n\nexport type MethodSuccess = [T, null];\nexport type MethodFailure = [null, RpcError];\nexport type MethodResult = MethodSuccess | MethodFailure;\n\nexport type methodHandler = (ctx: Context, token: ICancellationToken, params: unknown) => Promise>;\n\nexport class MethodHandlers {\n constructor(readonly handlers: Map>) {}\n}\n\nexport function getAllMethods(): MethodHandlers {\n const methods = new Map>();\n methods.set('getCompletions', handleGetCompletions);\n methods.set('getCompletionsCycling', handleGetCompletionsCycling);\n methods.set('getPanelCompletions', handleGetPanelCompletions);\n methods.set('getVersion', handleGetVersion);\n methods.set('setEditorInfo', handleSetEditorInfo);\n methods.set('checkStatus', handleCheckStatus);\n methods.set('signInInitiate', handleSignInInitiate);\n methods.set('signInConfirm', handleSignInConfirm);\n methods.set('signInWithGithubToken', handleSignInWithGithubToken);\n methods.set('signOut', handleSignOut);\n methods.set('notifyShown', notifyShown);\n methods.set('notifyAccepted', notifyAccepted);\n methods.set('notifyRejected', notifyRejected);\n methods.set('telemetry/exception', telemetryExceptionMethod);\n methods.set('telemetry/authNotifyDismissed', handleTelemetryAuthNotifyDismissed);\n methods.set('telemetry/authNotifyShown', handleTelemetryAuthNotifyShown);\n methods.set('telemetry/gitHubLoginSuccess', handleTelemetryGitHubLoginSuccess);\n methods.set('telemetry/newGitHubLogin', handleTelemetryNewGitHubLogin);\n methods.set('testing/createContext', handleTestingCreateContext);\n methods.set('testing/alwaysAuth', handleTestingAlwaysAuth);\n methods.set('testing/neverAuth', handleTestingNeverAuth);\n methods.set('testing/useTestingToken', handleTestingUseTestingToken);\n methods.set('testing/setCompletionDocuments', handleTestingSetCompletionDocuments);\n methods.set('testing/setPanelCompletionDocuments', handleTestingSetPanelCompletionDocuments);\n methods.set('testing/triggerShowMessageRequest', handleTriggerShowMessage);\n methods.set('testing/getTelemetry', handleTestingGetTelemetry);\n methods.set('testing/setTelemetryCapture', handleTestingSetTelemetryCapture);\n methods.set('testing/getDocument', handleGetDocument);\n methods.set('uninstall', handleUninstall);\n methods.set('debug/verifyState', handleVerifyState);\n methods.set('debug/verifyCertificate', handleVerifyCertificate);\n methods.set('debug/verifyWorkspaceState', handleVerifyWorkspaceState);\n return new MethodHandlers(methods);\n}\n\nexport type notificationHandler = (ctx: Context, params: unknown) => Promise;\n\nexport class NotificationHandlers {\n constructor(readonly handlers = new Map()) {}\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {postInsertionTasks} from '../../../lib/src/postInsertion';\nimport {CopilotCompletionCache} from '../copilotCompletionCache';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {getTestingContext} from '../testing/context';\nimport {MethodResult} from './methods';\nimport {TestingOptions} from './testingOptions';\n\nconst Params = Type.Object({\n uuid: Type.String({minLength: 1}),\n options: Type.Optional(TestingOptions),\n});\n\ntype Params = Static;\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport async function notifyAccepted(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n if (params.options?.testingCtx !== undefined) {\n ctx = getTestingContext(params.options.testingCtx);\n }\n\n const cache = ctx.get(CopilotCompletionCache);\n const completion = cache.get(params.uuid);\n if (completion) {\n //We don't need to keep the completion around anymore\n cache.delete(params.uuid);\n //We want to start post insertion tasks after the completion is accepted\n postInsertionTasks(\n ctx,\n 'ghostText',\n completion.text,\n completion.offset,\n completion.file,\n completion.telemetry,\n completion.uuid,\n completion.range.start\n );\n }\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ConfigKey, ConfigProvider} from '../../../lib/src/config';\nimport {Context} from '../../../lib/src/context';\nimport {NetworkConfiguration} from '../../../lib/src/networkConfiguration';\nimport {Fetcher} from '../../../lib/src/networking';\nimport {AgentConfigProvider} from '../config';\nimport {extractAjvErrors} from '../rpc';\nimport {getTestingContext} from '../testing/context';\nimport {TestingOptions} from './testingOptions';\n\nexport const NetworkProxy = Type.Object({\n host: Type.String(),\n port: Type.Number(),\n username: Type.Optional(Type.String()),\n password: Type.Optional(Type.String()),\n rejectUnauthorized: Type.Optional(Type.Boolean()),\n});\n\nexport const EditorConfigurationSettings = Type.Object({\n showEditorCompletions: Type.Optional(Type.Boolean()),\n enableAutoCompletions: Type.Optional(Type.Boolean()),\n delayCompletions: Type.Optional(Type.Boolean()),\n filterCompletions: Type.Optional(Type.Boolean()),\n disabledLanguages: Type.Optional(\n Type.Array(\n Type.Object({\n languageId: Type.String(),\n })\n )\n ),\n});\n\nexport const AuthProvider = Type.Object({\n url: Type.Optional(Type.String()),\n});\n\nconst EditorConfigurationParams = Type.Object({\n settings: Type.Optional(EditorConfigurationSettings),\n networkProxy: Type.Optional(Type.Union([NetworkProxy, Type.Null()])),\n authProvider: Type.Optional(AuthProvider),\n options: Type.Optional(TestingOptions),\n});\n\ntype EditorConfigurationSettings = Static;\ntype EditorConfigurationParams = Static;\ntype NetworkProxy = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(EditorConfigurationParams));\nfunction validParams(candidate: unknown): candidate is EditorConfigurationParams {\n return _validParams(candidate);\n}\n\nexport function notifyChangeConfiguration(ctx: Context, params: unknown): void {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n throw new Error(`Invalid params: ${errorMessages.join(', ')}`);\n }\n\n if (params.options?.testingCtx !== undefined) {\n ctx = getTestingContext(params.options.testingCtx);\n }\n\n if (params.settings) {\n applySettingsToConfiguration(ctx, params.settings);\n }\n if (params.networkProxy !== undefined) {\n applyNetworkProxyConfiguration(ctx, params.networkProxy);\n }\n if (params.authProvider) {\n ctx.get(NetworkConfiguration).updateBaseUrl(ctx, params.authProvider.url);\n }\n}\n\nexport function applySettingsToConfiguration(ctx: Context, settings: EditorConfigurationSettings) {\n const config = ctx.get(ConfigProvider) as AgentConfigProvider;\n config.setConfig(ConfigKey.ShowEditorCompletions, settings.showEditorCompletions);\n config.setConfig(ConfigKey.DelayCompletions, settings.delayCompletions);\n config.setConfig(ConfigKey.EnableAutoCompletions, settings.enableAutoCompletions);\n config.setConfig(ConfigKey.FilterCompletions, settings.filterCompletions);\n if (settings.disabledLanguages) {\n for (const languageEnablement of settings.disabledLanguages) {\n config.setLanguageEnablement(languageEnablement.languageId, false);\n }\n }\n}\n\nexport function applyNetworkProxyConfiguration(ctx: Context, proxySettings: NetworkProxy | null) {\n if (!proxySettings) {\n ctx.get(Fetcher).proxySettings = undefined;\n ctx.get(Fetcher).rejectUnauthorized = undefined;\n return;\n }\n let authentication;\n if (proxySettings.username) {\n if (proxySettings.password) {\n authentication = proxySettings.username + ':' + proxySettings.password;\n } else {\n authentication = proxySettings.username;\n }\n }\n // setup proxy as environment variables for the the telemetry library\n // see https://github.com/microsoft/ApplicationInsights-node.js/releases/tag/1.0.3\n const authenticationForUrl = authentication ? authentication + '@' : '';\n process.env.http_proxy = `http://${authenticationForUrl}${proxySettings.host}:${proxySettings.port}`;\n process.env.https_proxy = `http://${authenticationForUrl}${proxySettings.host}:${proxySettings.port}`;\n ctx.get(Fetcher).proxySettings = {\n host: proxySettings.host,\n port: proxySettings.port,\n proxyAuth: authentication,\n headers: {},\n };\n ctx.get(Fetcher).rejectUnauthorized = proxySettings.rejectUnauthorized ?? true;\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {postRejectionTasks} from '../../../lib/src/postInsertion';\nimport {CopilotCompletionCache} from '../copilotCompletionCache';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {getTestingContext} from '../testing/context';\nimport {MethodResult} from './methods';\nimport {TestingOptions} from './testingOptions';\n\nconst Params = Type.Object({\n uuids: Type.Array(Type.String()),\n options: Type.Optional(TestingOptions),\n});\n\ntype Params = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport async function notifyRejected(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n if (params.options?.testingCtx !== undefined) {\n ctx = getTestingContext(params.options.testingCtx);\n }\n\n const cache = ctx.get(CopilotCompletionCache);\n const completions = params.uuids.flatMap(uuid => cache.get(uuid) ?? []);\n if (completions.length > 0) {\n const completion = completions[0];\n for (const uuid of params.uuids) {\n //We don't need to keep the completion around anymore\n cache.delete(uuid);\n }\n const rejectionInput = completions.map(c => {\n return {\n completionText: c.displayText,\n completionTelemetryData: c.telemetry,\n };\n });\n //We want to start post rejection tasks after the completion is rejected\n postRejectionTasks(ctx, 'ghostText', completion.offset, completion.file, rejectionInput);\n }\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {ResultType} from '../../../lib/src/ghostText/ghostText';\nimport {telemetryShown} from '../../../lib/src/ghostText/telemetry';\nimport {CopilotCompletionCache} from '../copilotCompletionCache';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {getTestingContext} from '../testing/context';\nimport {MethodResult} from './methods';\nimport {TestingOptions} from './testingOptions';\n\nconst Params = Type.Object({\n uuid: Type.String({minLength: 1}),\n options: Type.Optional(TestingOptions),\n});\n\ntype Params = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport async function notifyShown(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n if (params.options?.testingCtx !== undefined) {\n ctx = getTestingContext(params.options.testingCtx);\n }\n\n const cache = ctx.get(CopilotCompletionCache);\n const completion = cache.get(params.uuid);\n if (completion) {\n const fromCache = !(completion.resultType === ResultType.Network);\n telemetryShown(ctx, 'ghostText', completion.telemetry, fromCache);\n }\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {EditorAndPluginInfo} from '../../../lib/src/config';\nimport {Context} from '../../../lib/src/context';\nimport {NetworkConfiguration} from '../../../lib/src/networkConfiguration';\nimport {initializeLateDependencies} from '../agent';\nimport {AgentEditorInfo} from '../config';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\nimport {\n AuthProvider,\n EditorConfigurationSettings,\n NetworkProxy,\n applyNetworkProxyConfiguration,\n applySettingsToConfiguration,\n} from './notifyChangeConfiguration';\n\nconst NameAndVersionParam = Type.Object({\n name: Type.String(),\n version: Type.String(),\n});\n\nconst Params = Type.Object({\n editorInfo: NameAndVersionParam,\n editorPluginInfo: NameAndVersionParam,\n editorConfiguration: Type.Optional(EditorConfigurationSettings),\n networkProxy: Type.Optional(NetworkProxy),\n authProvider: Type.Optional(AuthProvider),\n redirectTelemetry: Type.Optional(Type.Boolean()),\n options: Type.Optional(Type.Object({})),\n});\n\nexport type Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport async function handleSetEditorInfo(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n (ctx.get(EditorAndPluginInfo) as AgentEditorInfo).setEditorAndPluginInfo(\n params.editorInfo,\n params.editorPluginInfo\n );\n if (params.editorConfiguration) {\n applySettingsToConfiguration(ctx, params.editorConfiguration);\n }\n if (params.networkProxy) {\n applyNetworkProxyConfiguration(ctx, params.networkProxy);\n }\n if (params.authProvider) {\n ctx.get(NetworkConfiguration).updateBaseUrl(ctx, params.authProvider.url);\n }\n await initializeLateDependencies(ctx, params.redirectTelemetry || false);\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {AuthManager, AuthStatus} from '../auth/manager';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nconst Params = Type.Object({\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result = AuthStatus;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/** The `signInConfirm` method should be called after receiving a `PromptUserDeviceFlow` response from `initiateSignIn` and\n * actually prompting the user as described in the `Result` type for `initiateSignIn`.\n *\n * It will not return a result until the user signs in or the attempt times out.\n *\n * The result will be an `AuthStatus` object either indicating that the user is now fully authenticated,\n * or that some other problem remains.\n */\nexport default async function handleSignInConfirm(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n const pendingSignIn = ctx.get(AuthManager).getPendingSignIn();\n if (pendingSignIn === undefined) {\n return [\n null,\n {\n code: ErrorCode.InvalidRequest,\n message: 'No pending sign in',\n },\n ];\n }\n let result;\n try {\n result = await pendingSignIn;\n return [result, null];\n } catch (err: any) {\n return [\n null,\n {\n code: ErrorCode.DeviceFlowFailed,\n message: err.toString(),\n },\n ];\n } finally {\n ctx.get(AuthManager).setPendingSignIn(undefined);\n }\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {GitHubDeviceFlow} from '../auth/deviceFlow';\nimport {AuthManager} from '../auth/manager';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nconst Params = Type.Object({\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result =\n // The user should be prompted to visit `verificationUri`, paste in `userCode` and\n // authorize access. It will take up to `interval` seconds after they do this for\n // authentication to complete. If they don't complete this within `expiresIn` seconds,\n // authentication will time out.\n //\n // After prompting the user, call `signInConfirm` to wait for them to do it.\n | {\n status: 'PromptUserDeviceFlow';\n userCode: string;\n verificationUri: string;\n expiresIn: number;\n interval: number;\n }\n // The user has already been authenticated and doesn't need to authenticate again.\n | {\n status: 'AlreadySignedIn';\n user: string;\n };\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * The `signInInitiate` method should be called after the agent returns an `AuthStatus` of `NotSignedIn`.\n */\nexport default async function handleInitiateSignIn(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n const currentStatus = await ctx.get(AuthManager).checkAndUpdateStatus(ctx);\n if (currentStatus.status === 'OK') {\n return [{status: 'AlreadySignedIn', user: currentStatus.user}, null];\n }\n const deviceFlow = await ctx.get(GitHubDeviceFlow).getToken(ctx);\n const waitForAuth = deviceFlow.waitForAuth.then(async authed => {\n await ctx.get(AuthManager).setAuthRecord(ctx, authed);\n return await ctx.get(AuthManager).checkAndUpdateStatus(ctx);\n });\n ctx.get(AuthManager).setPendingSignIn(waitForAuth);\n\n const result: Result = {\n status: 'PromptUserDeviceFlow',\n userCode: deviceFlow.user_code,\n verificationUri: deviceFlow.verification_uri,\n expiresIn: deviceFlow.expires_in,\n interval: deviceFlow.interval,\n };\n return [result, null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {AuthManager, AuthStatus} from '../auth/manager';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nconst Params = Type.Object({\n githubToken: Type.String({minLength: 1}),\n user: Type.String({minLength: 1}),\n});\n\ntype Params = Static;\n\nexport type Result = AuthStatus;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleSignInWithGithubToken(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n const githubToken = params.githubToken;\n const githubUser = params.user;\n\n await ctx.get(AuthManager).setAuthRecord(ctx, {user: githubUser, oauth_token: githubToken});\n const result = await ctx.get(AuthManager).checkAndUpdateStatus(ctx);\n\n return [result, null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {AuthManager, AuthStatus} from '../auth/manager';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nconst Params = Type.Object({\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result = AuthStatus;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * The `signOut` method should be called if the user wants to sign out from GitHub and hence stop using\n * Copilot for now.\n *\n * The result will be an `AuthStatus` object, most likely `NotSignedIn`.\n */\nexport default async function handleSignOut(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n await ctx.get(AuthManager).deleteAuthRecord(ctx);\n const newStatus = await ctx.get(AuthManager).checkAndUpdateStatus(ctx);\n return [newStatus, null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {telemetryAuthNotifyDismissed} from '../../../../lib/src/telemetry/auth';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({});\n\nexport type Params = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleTelemetryAuthNotifyDismissed(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n await telemetryAuthNotifyDismissed(ctx);\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {telemetryAuthNotifyShown} from '../../../../lib/src/telemetry/auth';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n authSource: Type.Union([Type.Literal('toast'), Type.Literal('goldbar'), Type.Literal('menu')]),\n});\n\nexport type Params = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleTelemetryAuthNotifyShown(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n await telemetryAuthNotifyShown(ctx, params.authSource);\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {telemetryGitHubLoginSuccess} from '../../../../lib/src/telemetry/auth';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n authType: Type.Union([Type.Literal('editorAuth'), Type.Literal('deviceFlow')]),\n});\n\nexport type Params = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleTelemetryGitHubLoginSuccess(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n await telemetryGitHubLoginSuccess(ctx, params.authType);\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {telemetryNewGitHubLogin} from '../../../../lib/src/telemetry/auth';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n authSource: Type.Union([Type.Literal('toast'), Type.Literal('goldbar'), Type.Literal('menu')]),\n authType: Type.Union([Type.Literal('editorAuth'), Type.Literal('deviceFlow')]),\n});\n\nexport type Params = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleTelemetryNewGitHubLogin(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n await telemetryNewGitHubLogin(ctx, params.authSource, params.authType);\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {telemetryException} from '../../../lib/src/telemetry';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nconst Params = Type.Object({\n origin: Type.String(),\n stacktrace: Type.Optional(Type.String()),\n properties: Type.Optional(Type.Record(Type.String(), Type.String())),\n});\n\nexport type Params = Static;\n\nexport type Response = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport async function telemetryExceptionMethod(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n const error = new Error('Original stacktrace: ' + params.stacktrace);\n error.stack = ''; // avoid using stacktrace from our json-rpc method\n const properties = params.properties || {};\n await telemetryException(ctx, error, params.origin, properties);\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {AuthManager} from '../../auth/manager';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {AlwaysAuthManager} from '../../testing/auth';\nimport {getTestingContext} from '../../testing/context';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n testingCtx: Type.Number(),\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * Configure the given `testingCtx` to always report that it is authenticated.\n * This will only be useful for tests that don't call the proxy, e.g.\n * because they use `testing/setCompletionDocuments` to before requesting completions.\n *\n * The goal of this method is to support running tests without any network calls.\n */\nexport default async function handleTestingAlwaysAuth(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n getTestingContext(params.testingCtx).forceSet(AuthManager, new AlwaysAuthManager());\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {newTestingContext} from '../../testing/context';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result = number;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * Create a \"context\" object, represented by an id, that can be used for overriding the default\n * behaviour of the agent for tests.\n *\n * By default, the context is created with a standard production context. This can be overridden\n * by specific calls that side-effect the context.\n */\nexport default async function handleTestingCreateContext(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n return [newTestingContext(ctx), null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {TextDocumentItem} from 'vscode-languageserver';\nimport {URI} from 'vscode-uri';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {TextDocumentManager} from '../../../../lib/src/textDocumentManager';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {AgentTextDocumentManager} from '../../textDocumentManager';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n uri: Type.String(),\n});\n\ntype Params = Static;\n\nexport type Result = TextDocumentItem;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * Allow accessing document from the TextDocumentManager for testing purposes.\n *\n * If a document isn't found, it will return an empty document with the and languageId set to 'unknown'\n * and a version of -1.\n */\nexport default async function handleGetDocument(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n const textDocumentManager = ctx.get(TextDocumentManager) as AgentTextDocumentManager;\n const document = await textDocumentManager.getTextDocument(URI.parse(params.uri));\n return [\n {\n uri: params.uri,\n languageId: document?.languageId ?? 'unknown',\n version: document?.version ?? -1,\n text: document?.getText() ?? '',\n },\n null,\n ];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {TelemetryReporters} from '../../../../lib/src/telemetry';\nimport {PromiseQueue, TestPromiseQueue} from '../../../../lib/src/testing/telemetry';\nimport {TelemetrySpy} from '../../../../lib/src/testing/telemetrySpy';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({});\n\ntype Params = Static;\n\nexport type Result = {\n standard: {\n events: any[];\n errors: any[];\n exceptions: any[];\n };\n restricted: {\n events: any[];\n errors: any[];\n exceptions: any[];\n };\n};\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleTestingGetTelemetry(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n const reporters = ctx.get(TelemetryReporters);\n const standardReporter = reporters.getReporter(ctx);\n const restrictedReporter = reporters.getSecureReporter(ctx);\n\n if (\n !(standardReporter instanceof TelemetrySpy) ||\n !(restrictedReporter instanceof TelemetrySpy || restrictedReporter === undefined)\n ) {\n return [\n null,\n {\n code: ErrorCode.InternalError,\n message: 'Telemetry is not being captured. You must first call testing/setTelemetryCapture.',\n },\n ];\n }\n\n const queue = ctx.get(PromiseQueue);\n if (queue instanceof TestPromiseQueue) {\n await queue.awaitPromises();\n }\n\n const telemetry = {\n standard: {\n events: standardReporter.events,\n errors: standardReporter.errors,\n exceptions: serializableExceptions(standardReporter.exceptions),\n },\n restricted: {\n events: restrictedReporter?.events || [],\n errors: restrictedReporter?.errors || [],\n exceptions: serializableExceptions(restrictedReporter?.exceptions || []),\n },\n };\n\n return [telemetry, null];\n}\n\nfunction serializableExceptions(exceptions: any[]): any[] {\n return exceptions.map(exception => {\n return {\n ...exception,\n error: {\n // this mirrors how app insights handles exceptions\n message: exception.error.message,\n code: exception.error.code || exception.error.id || '',\n },\n };\n });\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {AuthManager} from '../../auth/manager';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {NotAuthManager} from '../../testing/auth';\nimport {getTestingContext} from '../../testing/context';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n testingCtx: Type.Number(),\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * Configure the given `testingCtx` to always report that it is not authenticated.\n * This will only be useful for tests of what happens in this scenario.\n */\nexport default async function handleTestingNeverAuth(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n getTestingContext(params.testingCtx).forceSet(AuthManager, new NotAuthManager());\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {getTestingContext} from '../../testing/context';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n testingCtx: Type.Number(),\n documents: Type.Array(Type.String()),\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport class CompletionDocuments {\n constructor(public readonly documents: string[]) {}\n}\n\n/**\n * Configure a `testing context` to return pre-determined results from\n * `getCompletions` and `getCompletionsCycling`.\n *\n * @param documents\n * Each document in this list is a full text file. It will be converted\n * into a completion by taking the suffix of the document starting from the\n * cursor position passed to `getCompletions` and `getCompletionsCycling`.\n *\n * Regardless of how many documents are configured, only the first documents\n * will be used, corresponding to the expected behaviour of `getCompletions`\n * and `getCompletionsCycling`. (Currently 1 and 3 respectively).\n *\n * By default, the replace range of the completion will be empty. This can be\n * overridden by so-called \"challenge\" markers in the completion text:\n *\n * - If a % marker is present then the replace range will start at the % marker and\n * continue to the cursor position, and the suggested replacement will start with\n * with the text from the cursor position. This allows for \"de-indentation\".\n * - If two ^ markers are present, for example surrounding something like a ')', then the\n * replace range will include that ')'.\n *\n * The challenge markers will be removed from the returned completion.\n */\nexport default async function handleTestingSetCompletionDocuments(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n getTestingContext(params.testingCtx).forceSet(CompletionDocuments, new CompletionDocuments(params.documents));\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {getTestingContext} from '../../testing/context';\nimport {MethodResult} from '../methods';\n\nconst PanelCompletionDocument = Type.Object({\n text: Type.String(),\n score: Type.Number(),\n});\n\nconst Params = Type.Object({\n testingCtx: Type.Number(),\n documents: Type.Array(PanelCompletionDocument),\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\ntype PanelCompletionDocument = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport class PanelCompletionDocuments {\n constructor(public readonly documents: PanelCompletionDocument[]) {}\n}\n\n/**\n * Configure a `testing context` to return pre-determined results from\n * `getPanelCompletions`.\n *\n * @param documents\n * Each document in this list is a full text file along with a score.\n * The text file will be converted into a completion by taking the suffix of the\n * document starting from the cursor position passed to `getPanelCompletions`.\n *\n * Regardless of how many documents are configured, only the first documents\n * will be used, corresponding to the expected behaviour of `getPanelCompletions`\n * (Currently 10).\n */\n// TODO consider unifying this with `testing/setCompletionDocuments`. The only\n// real difference is that the solutions have an associated score that is used to\n// rank them.\n// The other difference is that we don't yet support challenge markers because Open\n// Copilot doesn't de-indent properly so there's no point. (Though the code in\n// `getPanelCompletions` does call the challenge markers parsing method to make it\n// easier to add this support in future).\nexport default async function handleTestingSetPanelCompletionDocuments(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n getTestingContext(params.testingCtx).forceSet(\n PanelCompletionDocuments,\n new PanelCompletionDocuments(params.documents)\n );\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {TelemetryReporters} from '../../../../lib/src/telemetry';\nimport {setupTelemetryReporters} from '../../../../lib/src/telemetry/azureInsights';\nimport {PromiseQueue, TestPromiseQueue} from '../../../../lib/src/testing/telemetry';\nimport {TelemetrySpy} from '../../../../lib/src/testing/telemetrySpy';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n telemetryCapture: Type.Boolean(),\n});\n\ntype Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleTestingSetTelemetryCapture(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n if (params.telemetryCapture) {\n await setupTelemetryReporters(ctx, 'agent', false); // deactivate existing reporters\n ctx.get(TelemetryReporters).setReporter(new TelemetrySpy());\n ctx.get(TelemetryReporters).setSecureReporter(new TelemetrySpy());\n ctx.forceSet(PromiseQueue, new TestPromiseQueue());\n } else {\n await setupTelemetryReporters(ctx, 'agent', true);\n ctx.forceSet(PromiseQueue, new PromiseQueue());\n }\n\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {LogLevel, LogTarget} from '../../../../lib/src/logger';\nimport {ActionItem} from '../../../../lib/src/notificationSender';\nimport {AgentNotificationSender} from '../../notificationSender';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({});\n\ntype Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport default async function handleTriggerShowMessage(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n const sender = ctx.get(AgentNotificationSender);\n const logger = ctx.get(LogTarget);\n await sender\n .showWarningMessage('This is a test message', {title: 'Some Action'})\n .catch(error => sendNotification(LogLevel.ERROR, 'error sending show message request', error))\n .then(r => sendNotification(LogLevel.INFO, 'response from message request', (r as ActionItem).title));\n return ['OK', null];\n\n async function sendNotification(level: LogLevel, message: string, payload: any): Promise> {\n return logger.logIt(ctx, level, message + ' (' + payload + ')', payload);\n }\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {CheckCopilotToken, CopilotTokenManager} from '../../../../lib/src/auth/copilotToken';\nimport {ICancellationToken} from '../../../../lib/src/common/cancellation';\nimport {Context} from '../../../../lib/src/context';\nimport {getTestingCopilotTokenManager} from '../../../../lib/src/testing/copilotToken';\nimport {AuthManager, AuthStatus} from '../../auth/manager';\nimport {PersistenceManager} from '../../persist';\nimport {ErrorCode, extractAjvErrors} from '../../rpc';\nimport {getTestingContext} from '../../testing/context';\nimport {MethodResult} from '../methods';\n\nconst Params = Type.Object({\n testingCtx: Type.Number(),\n options: Type.Optional(Type.Object({})),\n});\n\ntype Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n// TODO this is a hack caused by the fact that AuthManager has to generate\n// a CopilotTokenManager on each request. The real solution is to have an\n// singleton CopilotTokenManagerFromAuthManager.\nexport class FakeAuthManager extends AuthManager {\n user = 'user'; // this is just for tests so any made-up username will do\n constructor(private readonly tokenManager: CopilotTokenManager & CheckCopilotToken) {\n super(undefined as any as PersistenceManager, _ => tokenManager);\n }\n override getCopilotTokenManager() {\n return this.tokenManager;\n }\n override async checkAndUpdateStatus(ctx: Context, options?: {localChecksOnly?: boolean}): Promise {\n const checkTokenResult = await this.tokenManager.checkCopilotToken(ctx);\n if (!('status' in checkTokenResult)) {\n // For the purposes of the agent, a 401 error and not being signed in to begin with have\n // the same practical consequence, the user should sign in again.\n const status = checkTokenResult.reason === 'HTTP401' ? 'NotSignedIn' : checkTokenResult.reason;\n return {status, user: this.user};\n }\n\n return {status: 'OK', user: this.user};\n }\n}\n\n/**\n * Configure the given `testingCtx` to obtain a Copilot token from the following sources, in priority order:\n * 1. The environment variable `GH_COPILOT_TOKEN`\n * 2. The environment variable `GITHUB_TOKEN`\n * 3. The file `${HOME}/.copilot-testing-gh-token`\n * Items 2 and 3 will produce a GitHub token which will be used to obtain a Copilot token.\n *\n * The goal of this method is to support running integration tests on CI.\n */\nexport default async function handleTestingUseTestingToken(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n const tokenManager = getTestingCopilotTokenManager();\n getTestingContext(params.testingCtx).forceSet(AuthManager, new FakeAuthManager(tokenManager));\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\n\nexport const TestingOptions = Type.Object({\n testingCtx: Type.Optional(Type.Number()),\n});\n\nexport type TestingOptions = Static;\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {AgentInstallationManager} from '../installationManager';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nconst Params = Type.Object({});\n\ntype Params = Static;\n\nexport type Result = 'OK';\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\n/**\n * The `uninstall` method should be called when the extension is being uninstalled.\n * It is to notify the agent to do any cleanup related to uninstall. The next\n * expected method call after `uninstall` is `shutdown`.\n */\nexport default async function handleUninstall(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n const mgr = new AgentInstallationManager();\n await mgr.uninstall(ctx);\n return ['OK', null];\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport * as os from 'os';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {getRootCertificateReader} from '../../../lib/src/network/certificateReaders';\nimport {asReadableCert, normalizeNewlines} from '../../../lib/src/testing/certificates';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {MethodResult} from './methods';\n\nexport type Result = {\n status: boolean;\n message: string;\n};\n\nconst Params = Type.Object({\n expectedCertificate: Type.String(),\n});\n\ntype Params = Static;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport async function handleVerifyCertificate(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n\n const reader = getRootCertificateReader(ctx);\n const certs = (await reader.getAllRootCAs()).map(normalizeNewlines);\n const expectedCert = normalizeNewlines(params.expectedCertificate);\n if (certs.includes(expectedCert)) {\n return [\n {\n status: true,\n message: 'Certificate verified',\n },\n null,\n ];\n } else {\n return [\n {\n status: false,\n message: `expected certificate not found - Expected to find certificate ${asReadableCert(\n expectedCert\n )}. Only found those installed on the system:${os.EOL}${certs\n .map(c => '- ' + asReadableCert(c))\n .join(os.EOL)}`,\n },\n null,\n ];\n }\n}\n","import {Static, Type} from '@sinclair/typebox';\nimport Ajv, {DefinedError} from 'ajv';\nimport {URI} from 'vscode-uri';\nimport {ICancellationToken} from '../../../lib/src/common/cancellation';\nimport {Context} from '../../../lib/src/context';\nimport {TextDocumentManager} from '../../../lib/src/textDocumentManager';\nimport {ErrorCode, extractAjvErrors} from '../rpc';\nimport {AgentTextDocumentManager} from '../textDocumentManager';\nimport {MethodResult} from './methods';\n\nexport type Result = {\n status: boolean;\n message: string;\n};\n\nconst Params = Type.Object({\n source: Type.String(),\n languageId: Type.String(),\n version: Type.Number(),\n uri: Type.String(),\n});\n\ntype Params = Static;\n\nconst ajv = new Ajv();\nconst _validParams = ajv.compile(Type.Strict(Params));\nfunction validParams(candidate: unknown): candidate is Params {\n return _validParams(candidate);\n}\n\nexport async function handleVerifyState(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n if (!validParams(params)) {\n const errorMessages = extractAjvErrors(_validParams.errors as DefinedError[]);\n return [\n null,\n {\n code: ErrorCode.InvalidParams,\n message: 'Invalid params: ' + errorMessages.join(';'),\n },\n ];\n }\n const tdm = ctx.get(TextDocumentManager);\n const document = await tdm.getTextDocument(URI.parse(params.uri));\n if (document) {\n if (document.languageId !== params.languageId) {\n return [\n {\n status: false,\n message: `Language id mismatch: [State] ${document.languageId} !== [Request] ${params.languageId}`,\n },\n null,\n ];\n }\n\n if (document.getText() !== params.source) {\n return [\n {\n status: false,\n message: `Source mismatch: [State] ${document.getText()} !== [Request] ${params.source}`,\n },\n null,\n ];\n }\n if (document.version !== params.version) {\n return [\n {\n status: false,\n message: `Version mismatch: [State] ${document.version} !== [Request] ${params.version}`,\n },\n null,\n ];\n }\n const result: Result = {\n status: true,\n message: '',\n };\n return [result, null];\n } else {\n const result: Result = {\n status: false,\n message: `Document not found: \"${URI.parse(params.uri)}\" (given by the editor: \"${params.uri}\")`,\n };\n return [result, null];\n }\n}\n\nexport async function handleVerifyWorkspaceState(\n ctx: Context,\n token: ICancellationToken,\n params: unknown\n): Promise> {\n return [ctx.get(AgentTextDocumentManager).workspaceFolders, null];\n}\n","import {NotificationType} from 'vscode-languageserver/node';\nimport {Context} from '../../lib/src/context';\nimport {ActionItem, NotificationSender} from '../../lib/src/notificationSender';\nimport {WrappedConnection} from './debug';\n\n/**\n * AgentNotificationSender has an extended API to send notifications to the client.\n * While other parts of the system (e.g. lib) can use NotificationSender, the agent\n * requires more LSP-specific features (e.g. sendNotification). Thus, the agent context\n * exposes the `AgentNotificationSender` implementaiton both as `NotificationSender` and\n * `AgentNotificationSender`. Agent code that requires `sendNotification` should ask for the\n * `AgentNotificationSender` instead of the `NotificationSender`.\n */\nexport abstract class AgentNotificationSender extends NotificationSender {\n abstract sendNotification(notificationType: NotificationType, notification: T): void;\n}\n\nexport class ConnectionNotificationSender extends AgentNotificationSender {\n private readonly connection = this.ctx.get(WrappedConnection).conn;\n\n constructor(private readonly ctx: Context) {\n super();\n }\n\n override sendNotification(notificationType: NotificationType, notification: T): void {\n this.connection.sendNotification(notificationType, notification);\n }\n\n showWarningMessage(message: string, ...actions: ActionItem[]): Promise {\n return this.connection.window.showWarningMessage(message, ...actions);\n }\n}\n","import {promises as fs} from 'fs';\nimport {platform} from 'os';\nimport {env} from 'process';\n\n/** Persist any state the agent wants to record, in a directory on disk using JSON.\n * For example, a GitHub token.\n */\nexport class PersistenceManager {\n constructor(private readonly directory: string) {}\n /**\n * Retrieve a piece of state from disk, if present.\n * @param setting The name of the file the state is stored in. `.json` will be appended.\n * @param key The key to lookup inside the file.\n * @returns The value if found, or `undefined` if not.\n */\n async read(setting: string, key: string): Promise {\n const configFile = `${this.directory}/${setting}.json`;\n try {\n const contents = await fs.readFile(configFile, {encoding: 'utf8'});\n const contentsJSON = JSON.parse(contents as string);\n return contentsJSON[key];\n } catch (e) {\n return undefined;\n }\n }\n /**\n * Update or set a piece of state on disk.\n * @param setting The name of the file to store the state in. `.json` will be appended.\n * @param key The key to store the value under inside the file.\n * @param value The value to store.\n */\n async update(setting: string, key: string, value: T): Promise {\n // TODO this method has a race condition if any other process is trying to\n // read or write this setting file simultaneously. For now this is unlikely\n // so not handled.\n await fs.mkdir(this.directory, {recursive: true, mode: 0o700});\n const configFile = `${this.directory}/${setting}.json`;\n let contentsJSON: {[key: string]: T} = {};\n try {\n const contents = await fs.readFile(configFile, {encoding: 'utf8'});\n contentsJSON = JSON.parse(contents as string);\n } catch (e) {\n // Ignore\n }\n contentsJSON[key] = value;\n await fs.writeFile(configFile, JSON.stringify(contentsJSON) + '\\n', {encoding: 'utf8'});\n }\n\n async delete(setting: string, key: string): Promise {\n const configFile = `${this.directory}/${setting}.json`;\n try {\n const contents = await fs.readFile(configFile, {encoding: 'utf8'});\n const contentsJSON = JSON.parse(contents as string);\n delete contentsJSON[key];\n await fs.writeFile(configFile, JSON.stringify(contentsJSON) + '\\n', {encoding: 'utf8'});\n } catch (e) {\n // Ignore\n }\n }\n\n /**\n * Remove all keys for a single setting.\n */\n async deleteSetting(setting: string): Promise {\n const configFile = `${this.directory}/${setting}.json`;\n try {\n await fs.rm(configFile);\n } catch (e) {\n // Ignore\n }\n }\n\n /**\n * Return a list of all available settings. Returns an empty list if none.\n */\n async listSettings(): Promise {\n try {\n const files = await fs.readdir(this.directory);\n return files.filter(f => f.endsWith('.json')).map(f => f.slice(0, -5));\n } catch (e) {\n return [];\n }\n }\n\n /**\n * Return a list of all keys in a setting. Returns an empty list if none.\n * @param setting The name of the setting to list keys for.\n */\n async listKeys(setting: string): Promise {\n const configFile = `${this.directory}/${setting}.json`;\n try {\n const contents = await fs.readFile(configFile, {encoding: 'utf8'});\n return Object.keys(JSON.parse(contents as string));\n } catch (e) {\n return [];\n }\n }\n}\n\nfunction getXdgConfigPath(): string {\n // There are various approaches to using XDG on non-Linux platforms.\n // For now we just follow what copilot.vim was doing.\n // TODO review this.\n if (env.XDG_CONFIG_HOME) {\n return env.XDG_CONFIG_HOME + '/github-copilot';\n }\n if (platform() === 'win32') {\n return env.USERPROFILE + '\\\\AppData\\\\Local\\\\github-copilot';\n }\n return env.HOME + '/.config/github-copilot';\n}\n\n/** Get a `PersistenceManager` that stores state using an appropriate path for the system.\n * The XDG \"config\" path is used, in line with what the GitHub CLI does.\n */\nexport function makeXdgPersistenceManager(): PersistenceManager {\n return new PersistenceManager(getXdgConfigPath());\n}\n","import {DefinedError} from 'ajv';\n\nexport type RpcError = {\n code: number;\n message: string;\n data?: unknown;\n};\n\nexport enum ErrorCode {\n // From \n ParseError = -32700,\n InvalidRequest = -32600,\n MethodNotFound = -32601,\n InvalidParams = -32602,\n InternalError = -32603,\n\n // 0-999 are reserved for errors reported by the client.\n // 0-255 are normally used to report a POSIX exit code from the agent if it dies unexpectedly.\n // There's currently no standard for what to do for exit codes above 256, which are possible e.g. on Windows.\n\n // Our errors\n NoCopilotToken = 1000,\n DeviceFlowFailed = 1001,\n ContextNotInitialized = 1002,\n}\n\nexport function extractAjvErrors(errors: DefinedError[]): string[] {\n return errors.map(err => {\n // The instance path may be overly verbose for some top-level errors, but\n // it's critical for making sense of anything nested\n return `${err.instancePath} ${err.message}`;\n });\n}\n","import {CancellationToken, ResponseError, TextDocumentSyncKind} from 'vscode-languageserver/node';\nimport {URI} from 'vscode-uri';\nimport {Context} from '../../lib/src/context';\nimport {registerDocumentTracker} from '../../lib/src/documentTracker';\nimport {LogLevel, LogTarget, Logger, MultiLog} from '../../lib/src/logger';\nimport {isDebugEnabled, isRunningInTest} from '../../lib/src/testing/runtimeMode';\nimport {WrappedConnection} from './debug';\nimport {NotificationLogger} from './editorFeatures/logTarget';\nimport {MethodHandlers, NotificationHandlers} from './methods/methods';\nimport {notifyChangeConfiguration} from './methods/notifyChangeConfiguration';\nimport {ErrorCode} from './rpc';\nimport {AgentTextDocumentManager} from './textDocumentManager';\n\nexport class CopilotService {\n private readonly wrappedConnection: WrappedConnection;\n private initialized: boolean;\n\n public constructor(private readonly ctx: Context) {\n this.wrappedConnection = ctx.get(WrappedConnection);\n const connection = this.wrappedConnection.conn;\n this.initialized = false;\n\n // decorate existing logger with a logger that sends notifications\n const compositeLogTarget = new MultiLog([\n this.ctx.get(LogTarget),\n new NotificationLogger(isDebugEnabled(this.ctx)),\n ]);\n this.ctx.forceSet(LogTarget, compositeLogTarget);\n new Logger(LogLevel.DEBUG, 'agent').debug(this.ctx, 'Agent service starting');\n\n connection.onRequest(this.messageHandler.bind(this));\n connection.onNotification(this.notificationHandler.bind(this));\n\n // Get this from ctx outside the onInitialize callback since errors in\n // there are not easily visible in tests.\n const tdm = ctx.get(AgentTextDocumentManager);\n connection.onInitialize(async params => {\n const clientWorkspace = params.capabilities.workspace?.workspaceFolders ?? false;\n //Initialize text document manager with the initial set of workspace folders\n tdm.init(\n params.workspaceFolders?.map(folder => URI.parse(folder.uri)) ?? [],\n /*registerWorkspaceFolder=*/ !isRunningInTest(this.ctx) && clientWorkspace\n );\n registerDocumentTracker(this.ctx);\n\n this.initialized = true;\n\n return {\n capabilities: {\n //We require client to support incremental text document sync\n //and open/close notifications.\n textDocumentSync: {\n openClose: true,\n change: TextDocumentSyncKind.Incremental,\n },\n workspace: {\n //Workspace folders depends on the client support\n workspaceFolders: {\n supported: clientWorkspace,\n changeNotifications: clientWorkspace,\n },\n },\n },\n };\n });\n connection.onDidChangeConfiguration(async params => {\n notifyChangeConfiguration(this.ctx, params);\n });\n }\n\n private async messageHandler(\n method: string,\n params: any[] | object | undefined,\n token: CancellationToken\n ): Promise> {\n const handler = this.ctx.get(MethodHandlers).handlers.get(method);\n if (!handler) {\n const responseError = new ResponseError(ErrorCode.MethodNotFound, `Method not found: ${method}`);\n return responseError;\n }\n\n if (!this.initialized) {\n const responseError = new ResponseError(ErrorCode.ContextNotInitialized, 'Agent service not initialized.');\n return responseError;\n }\n\n // TODO figure out what's going on here\n if (Array.isArray(params)) {\n params = params[0];\n }\n const [maybeResult, maybeErr] = await handler(this.ctx, token, params);\n if (maybeErr) {\n // What we return needs to satisfy `instanceof ResponseError` to be treated as an error by vscode-languageserver.\n const responseError = new ResponseError(maybeErr.code, maybeErr.message, maybeErr.data);\n return responseError;\n } else {\n return maybeResult;\n }\n }\n\n private async notificationHandler(method: string, params: any[] | object | undefined): Promise {\n const handler = this.ctx.get(NotificationHandlers).handlers.get(method);\n if (!handler) {\n return;\n }\n\n // TODO figure out what's going on here\n if (Array.isArray(params)) {\n params = params[0];\n }\n await handler(this.ctx, params);\n return;\n }\n\n public listen() {\n this.wrappedConnection.listen();\n }\n public dispose() {\n this.wrappedConnection.conn.dispose();\n }\n}\n","import * as uuid from 'uuid';\nimport {EditorSession} from '../../lib/src/config';\nimport {getMachineId} from '../../lib/src/machineId';\n\nconst sessionId: string = uuid.v4() + Date.now();\n\nexport const agentEditorSession = new EditorSession(sessionId, getMachineId());\n","import {SnippetWithProviderInfo} from '@github/copilot-promptlib';\nimport {DocumentInfoWithPosition, SymbolDefinitionProvider} from '../../lib/src/prompt/symbolDefinition';\n\nexport class AgentSymbolDefinitionProvider extends SymbolDefinitionProvider {\n async getSymbolDefinition(docInfo: DocumentInfoWithPosition): Promise {\n return [];\n }\n}\n","import {CopilotTokenManager, FixedCopilotTokenManager} from '../../../lib/src/auth/copilotToken';\nimport {Context} from '../../../lib/src/context';\nimport {AuthManager, AuthStatus} from '../auth/manager';\n\nexport class NotAuthManager extends AuthManager {\n constructor() {\n super(null as unknown as any, () => null as unknown as any);\n }\n override async checkAndUpdateStatus(\n ctx: Context,\n options?: {localChecksOnly?: boolean | undefined}\n ): Promise {\n return {status: 'NotSignedIn'};\n }\n}\n\nexport class AlwaysAuthManager extends AuthManager {\n constructor() {\n super(null as unknown as any, () => null as unknown as any);\n }\n override async checkAndUpdateStatus(\n ctx: Context,\n options?: {localChecksOnly?: boolean | undefined}\n ): Promise {\n return {status: 'OK', user: 'user'};\n }\n override getCopilotTokenManager(): CopilotTokenManager {\n return new FixedCopilotTokenManager('tid=valid-copilot-token');\n }\n}\n","import {IPosition} from '../../../lib/src/textDocument';\n\nexport function parseChallengeDoc(challengeDoc: string, cursorPosition: IPosition) {\n // TODO: this code partially duplicates the challenge marker parsing logic in `lib/src/testing/challenge.ts/challengeMarkers`,\n // but it's not easy to re-use that logic in its current form (for one thing, it expects an '@' character for the cursor position,\n // which we explicitly don't want here).\n const lines = challengeDoc.split('\\n');\n let start = cursorPosition;\n let end = cursorPosition;\n let cursorLine = lines[cursorPosition.line];\n const percentSign = cursorLine.indexOf('%');\n if (percentSign !== -1) {\n cursorLine = cursorLine.substring(0, percentSign) + cursorLine.substring(percentSign + 1);\n start = {line: cursorPosition.line, character: percentSign};\n }\n const caretOne = cursorLine.indexOf('^');\n if (caretOne !== -1) {\n const caretTwo = cursorLine.indexOf('^', caretOne + 1);\n if (caretTwo === -1) {\n throw new Error('Challenge document must contain zero or two ^ characters.');\n }\n cursorLine =\n cursorLine.substring(0, caretOne) +\n cursorLine.substring(caretOne + 1, caretTwo) +\n cursorLine.substring(caretTwo + 1);\n start = {line: cursorPosition.line, character: cursorPosition.character};\n end = {\n line: cursorPosition.line,\n character: cursorPosition.character + caretTwo - caretOne - 1,\n };\n }\n return {cursorLine, lines, start, end};\n}\n","import {FileSystem} from '@github/copilot-promptlib';\nimport {URI} from 'vscode-uri';\nimport {Event} from '../../../lib/src/common/event';\nimport {EditorAndPluginInfo, NameAndVersion} from '../../../lib/src/config';\nimport {Context} from '../../../lib/src/context';\nimport {NotificationSender} from '../../../lib/src/notificationSender';\nimport {_createBaselineContext} from '../../../lib/src/testing/context';\nimport {INotebookDocument, ITextDocument, LocationFactory} from '../../../lib/src/textDocument';\nimport {\n CursorChangeEvent,\n TextDocumentChangeEvent,\n TextDocumentFocusedEvent,\n TextDocumentManager,\n} from '../../../lib/src/textDocumentManager';\nimport {AgentConfigProvider, AgentEditorInfo} from '../../src/config';\nimport {CopilotCompletionCache} from '../../src/copilotCompletionCache';\nimport {agentFileSystem} from '../../src/fileSystem';\nimport {AgentLocationFactory, AgentTextDocument} from '../../src/textDocument';\nimport {WrappedConnection} from '../debug';\nimport {FakeWrappedConnection} from '../lspHelper.test';\nimport {MethodHandlers, getAllMethods} from '../methods/methods';\nimport {AgentNotificationSender} from '../notificationSender';\nimport {TestAgentNotificationSender} from './notificationSender';\n\n// As this is just for testing, we allow the contexts to leak.\nconst testingContexts = new Map();\n\nlet nextTestingId = 0;\n\nexport function newTestingContext(ctx: Context): number {\n const id = nextTestingId;\n const testingCtx = new Context(ctx);\n testingContexts.set(id, testingCtx);\n nextTestingId++;\n return id;\n}\n\nexport function getTestingContext(id: number): Context {\n const ctx = testingContexts.get(id);\n if (ctx === undefined) {\n throw new Error(`Testing context ${id} not found`);\n }\n return ctx;\n}\n\nexport class TestTextDocumentManager extends TextDocumentManager {\n private _textDocuments: ITextDocument[] = [];\n\n get textDocuments(): readonly ITextDocument[] {\n return this._textDocuments;\n }\n onDidFocusTextDocument: Event = () => {\n return {dispose: () => {}};\n };\n onDidChangeTextDocument: Event = () => {\n return {dispose: () => {}};\n };\n onDidChangeCursor: Event = () => {\n return {dispose: () => {}};\n };\n\n async getTextDocument(uri: URI): Promise {\n return this.textDocuments.find(t => t.uri.toString() == uri.toString());\n }\n\n async getRelativePath(doc: ITextDocument): Promise {\n return undefined;\n }\n\n setTextDocument(uri: URI, languageId: string, text: string) {\n const existing = this._textDocuments.find(t => t.uri.toString() == uri.toString()) as AgentTextDocument;\n if (existing) {\n existing.update([{text: text}], existing.version + 1);\n } else {\n this._textDocuments.push(AgentTextDocument.create(uri, languageId, 0, text));\n }\n }\n\n findNotebook(doc: ITextDocument): INotebookDocument | undefined {\n return undefined;\n }\n\n getWorkspaceFolders(): URI[] {\n return [];\n }\n}\n\nexport class TestAgentEditorInfo extends AgentEditorInfo {\n private inner = new AgentEditorInfo();\n\n clear() {\n this.inner = new AgentEditorInfo();\n }\n\n override setEditorAndPluginInfo(editorInfo: NameAndVersion, editorPluginInfo: NameAndVersion): void {\n this.inner.setEditorAndPluginInfo(editorInfo, editorPluginInfo);\n }\n\n override getEditorInfo(): NameAndVersion {\n return this.inner.getEditorInfo();\n }\n\n override getEditorPluginInfo(): NameAndVersion {\n return this.inner.getEditorPluginInfo();\n }\n}\n\n/**\n * A default context for agent testing, building on general one in `lib`.\n * Only includes items that are needed for almost all agent tests.\n */\nexport function createAgentTestingContext() {\n const ctx = _createBaselineContext(new AgentConfigProvider());\n const editorInfo = createAgentEditorInfo();\n ctx.set(EditorAndPluginInfo, editorInfo);\n ctx.set(AgentEditorInfo, editorInfo);\n ctx.set(TestAgentEditorInfo, editorInfo);\n ctx.set(LocationFactory, new AgentLocationFactory());\n const tdm = new TestTextDocumentManager();\n ctx.set(TextDocumentManager, tdm);\n ctx.set(TestTextDocumentManager, tdm);\n ctx.set(FileSystem, agentFileSystem);\n const wrappedConnection = new FakeWrappedConnection();\n ctx.set(WrappedConnection, wrappedConnection);\n ctx.set(FakeWrappedConnection, wrappedConnection);\n const notificationSender = new TestAgentNotificationSender();\n // A TestNotificationSender is registered for the lib tests :/\n ctx.forceSet(NotificationSender, notificationSender);\n ctx.set(AgentNotificationSender, notificationSender);\n ctx.set(TestAgentNotificationSender, notificationSender);\n ctx.set(CopilotCompletionCache, new CopilotCompletionCache());\n ctx.set(MethodHandlers, getAllMethods());\n return ctx;\n}\n\nfunction createAgentEditorInfo() {\n const editorInfo = new TestAgentEditorInfo();\n editorInfo.setEditorAndPluginInfo({name: 'agent-tests', version: '0'}, {name: 'agent-tests', version: '0'});\n return editorInfo;\n}\n","import {NotificationType} from 'vscode-languageserver';\nimport {ActionItem} from '../../../lib/src/notificationSender';\nimport {AgentNotificationSender} from '../notificationSender';\n\nexport class TestAgentNotificationSender extends AgentNotificationSender {\n public readonly sentNotifications: any[] = [];\n public readonly sentMessages: any[] = [];\n public readonly setNotificationNames: string[] = [];\n\n constructor() {\n super();\n }\n\n sendNotification(notificationType: NotificationType, notification: T): void {\n this.setNotificationNames.push(notificationType.method);\n this.sentNotifications.push(notification);\n }\n\n showWarningMessage(message: string, ...actions: ActionItem[]): Promise {\n this.sentMessages.push(message);\n return actions ? Promise.resolve(actions[0]) : Promise.resolve(undefined);\n }\n}\n","import {Uri} from 'vscode';\nimport {TextDocument, TextDocumentContentChangeEvent} from 'vscode-languageserver-textdocument';\nimport {Position, Range} from 'vscode-languageserver-types';\nimport {URI} from 'vscode-uri';\nimport {Context} from '../../lib/src/context';\nimport {ILine, IPosition, IRange, ITextDocument, LocationFactory} from '../../lib/src/textDocument';\nimport {TextDocumentManager} from '../../lib/src/textDocumentManager';\n\nexport class AgentLocationFactory extends LocationFactory {\n range(start: IPosition, end: IPosition): IRange;\n range(startLine: number, startCharacter: number, endLine: number, endCharacter: number): IRange;\n range(x1: any, y1: any, x2?: any, y2?: any): IRange {\n if (x2 !== undefined && y2 !== undefined) {\n return Range.create(x1, y1, x2, y2);\n } else {\n return Range.create(x1, y1);\n }\n }\n position(line: number, character: number): IPosition {\n return Position.create(line, character);\n }\n}\n\nexport async function getTextDocumentChecked(\n ctx: Context,\n uri: URI,\n doc: {source?: string; languageId?: string; relativePath?: string}\n): Promise {\n // TODO remove once we drop bc for non-LSP clients\n if (doc && doc.source && doc.languageId) {\n const newDocument = AgentTextDocument.create(uri, doc.languageId, 0, doc.source);\n if (doc.relativePath) {\n newDocument.relativePath = doc.relativePath;\n }\n return newDocument;\n }\n const tdm = ctx.get(TextDocumentManager);\n return await tdm.getTextDocument(uri).then(textDocument => {\n if (!textDocument) {\n const knownDocuments = tdm.textDocuments.map(td => td.uri).join(', ');\n throw new Error(\n `Document for URI could not be found: ${uri}, URIs of the known document are: ${knownDocuments}`\n );\n }\n // create a copy of the document so that mutating the original doesn't affect the callers\n return AgentTextDocument.create(\n textDocument.uri,\n textDocument.languageId,\n textDocument.version,\n textDocument.getText()\n );\n });\n}\n\nexport class AgentTextDocument implements ITextDocument {\n private _textDocument: TextDocument;\n private _uri: Uri;\n private _relativePath: string | undefined;\n\n private constructor(textDocument: TextDocument, uri: Uri) {\n this._textDocument = textDocument;\n this._uri = uri;\n }\n\n static create(uri: URI, languageId: string, version: number, text: string): AgentTextDocument {\n return new AgentTextDocument(TextDocument.create(uri.toString(), languageId, version, text), uri);\n }\n\n static wrap(textDocument: TextDocument): AgentTextDocument {\n return new AgentTextDocument(textDocument, URI.parse(textDocument.uri));\n }\n\n public get textDocument(): TextDocument {\n return this._textDocument;\n }\n\n public get uri(): URI {\n return this._uri;\n }\n\n public get fileName(): string {\n return this._uri.fsPath;\n }\n\n public get languageId(): string {\n return this._textDocument.languageId;\n }\n\n public get version(): number {\n return this._textDocument.version;\n }\n\n public get lineCount() {\n return this._textDocument.lineCount;\n }\n\n public get relativePath(): string | undefined {\n return this._relativePath;\n }\n\n public set relativePath(path: string | undefined) {\n this._relativePath = path;\n }\n\n getText(range?: IRange): string {\n return this._textDocument.getText(range);\n }\n\n positionAt(offset: number): IPosition {\n return this._textDocument.positionAt(offset);\n }\n\n offsetAt(position: IPosition): number {\n return this._textDocument.offsetAt(position);\n }\n\n lineAt(position: number | IPosition): ILine {\n const lineNumber = typeof position === 'number' ? position : (position as Position).line;\n const lines = this.getText().split('\\n');\n const text = lines[lineNumber];\n const range = Range.create(Position.create(lineNumber, 0), Position.create(lineNumber, text.length));\n\n const isEmptyOrWhitespace = text.trim().length === 0;\n return {text, range, isEmptyOrWhitespace};\n }\n\n getWordRangeAtPosition(position: IPosition): IRange | undefined {\n // TODO: Try to come up with some nice implementation here.\n // Note: Because we always return undefined here, completionsFromGhostTextResults will always produce ranges starting at column 0.\n // NeoVim currently depends on this behaviour (see https://github.com/github/copilot-client/issues/2306).\n return undefined;\n }\n\n update(changes: TextDocumentContentChangeEvent[], version: number) {\n TextDocument.update(this._textDocument, changes, version);\n }\n}\n","import EventEmitter = require('events');\nimport path = require('path');\nimport {\n Connection,\n TextDocumentContentChangeEvent as LspEvent,\n TextDocuments,\n TextDocumentsConfiguration,\n} from 'vscode-languageserver';\nimport {TextDocument} from 'vscode-languageserver-textdocument';\nimport {URI} from 'vscode-uri';\nimport {Event} from '../../lib/src/common/event';\nimport {Context} from '../../lib/src/context';\nimport {primeLanguageDetectionCache} from '../../lib/src/language/languageDetection';\nimport {INotebookDocument, ITextDocument} from '../../lib/src/textDocument';\nimport {\n CursorChangeEvent,\n TextDocumentChangeEvent,\n TextDocumentContentChangeEvent,\n TextDocumentFocusedEvent,\n TextDocumentManager,\n getRelativePath,\n} from '../../lib/src/textDocumentManager';\nimport {WrappedConnection} from './debug';\nimport {AgentTextDocument} from './textDocument';\n\nclass AgentTextDocumentsConfiguration implements TextDocumentsConfiguration {\n public emitter = new EventEmitter();\n\n constructor(private readonly ctx: Context) {}\n\n create(uri: string, languageId: string, version: number, content: string): TextDocument {\n const doc = AgentTextDocument.create(URI.parse(uri), languageId, version, content);\n primeLanguageDetectionCache(this.ctx, doc);\n return doc.textDocument;\n }\n\n update(document: TextDocument, changes: LspEvent[], version: number): TextDocument {\n const updates: TextDocumentContentChangeEvent[] = [];\n for (const change of changes) {\n if (LspEvent.isIncremental(change)) {\n const update: TextDocumentContentChangeEvent = {\n range: change.range,\n rangeOffset: document.offsetAt(change.range.start),\n rangeLength: document.offsetAt(change.range.end) - document.offsetAt(change.range.start),\n text: change.text,\n };\n\n updates.push(update);\n } else {\n // We don't support full document changes (yet?).\n // I think we should require incremental updates for the document changes.\n // We won't be able to track position for full document changes.\n }\n }\n\n const agentTextDocument = AgentTextDocument.wrap(document);\n const event: TextDocumentChangeEvent = {\n document: agentTextDocument,\n contentChanges: updates,\n };\n this.emitter.emit('change', event);\n\n agentTextDocument.update(changes, version);\n return document;\n }\n}\n\n/**\n * Manager class keeping track of the text documents using the LSP connection.\n *\n * Listens for `low level` notification on the given connection to\n * update the text documents managed by this instance.\n *\n * **Requires** the LSP client to send `textDocument/didOpen`, `textDocument/didChange` and `textDocument/didClose` notifications.\n *\n * **Requires** the LSP client to implement incremental updates in `textDocument/didChange` notifications.\n *\n * Additionally supports `textDocument/didSave` and `textDocument/willSave` notifications.\n * However we currently don't use them or expose as API in `TextDocumentManager`.\n *\n * Please note that the connection only provides handlers not an event model. Therefore\n * listening on a connection will overwrite the following handlers on a connection:\n * `onDidOpenTextDocument`, `onDidChangeTextDocument`, `onDidCloseTextDocument`,\n * `onWillSaveTextDocument`, `onWillSaveTextDocumentWaitUntil` and `onDidSaveTextDocument`.\n * */\nexport class AgentTextDocumentManager extends TextDocumentManager {\n private readonly _textDocumentConfiguration: AgentTextDocumentsConfiguration;\n private readonly _textDocumentListener: TextDocuments;\n private readonly connection: Connection = this.ctx.get(WrappedConnection).conn;\n readonly workspaceFolders: URI[] = [];\n\n constructor(private readonly ctx: Context) {\n super();\n this._textDocumentConfiguration = new AgentTextDocumentsConfiguration(ctx);\n this._textDocumentListener = new TextDocuments(this._textDocumentConfiguration);\n this._textDocumentListener.listen(this.connection);\n\n // Visual Studio does not support workspaceFolders capability\n // That's why we handle these special notifications for the GitHub copilot extension to work\n this.connection.onNotification('vs/didAddWorkspaceFolder', c => this.registerWorkspaceFolder(c));\n this.connection.onNotification('vs/didRemoveWorkspaceFolder', c => this.unregisterWorkspaceFolder(c));\n }\n\n init(workspaceFolders: URI[], registerWorkspaceFolder: boolean) {\n this.workspaceFolders.length = 0;\n this.workspaceFolders.push(...workspaceFolders);\n //We don't want to register `onDidChangeWorkspaceFolders` if we're in a test mode.\n //Otherwise we hit some issues around disposing of connection and uncaught exceptions.\n //TODO: Figure it out\n if (registerWorkspaceFolder) {\n this.connection.workspace.onDidChangeWorkspaceFolders(event => {\n event.added.forEach(c => this.registerWorkspaceFolder(c));\n event.removed.forEach(c => this.unregisterWorkspaceFolder(c));\n });\n }\n }\n\n onDidChangeTextDocument: Event = (listener, thisArgs?, disposables?) => {\n const handler = listener.bind(thisArgs);\n this._textDocumentConfiguration.emitter.on('change', handler);\n return {\n dispose: () => {\n this._textDocumentConfiguration.emitter.removeListener('change', handler);\n },\n };\n };\n\n onDidFocusTextDocument: Event = (listener, thisArgs?, disposables?) => {\n this.connection.onNotification('textDocument/didFocus', (event: {uri: string}) => {\n const uri = URI.parse(event.uri);\n listener.call(thisArgs, {document: {uri}});\n });\n return {\n dispose: () => {\n return;\n },\n };\n };\n\n onDidChangeCursor: Event = (listener, thisArgs?, disposables?) => {\n return {\n dispose: () => {\n return;\n },\n };\n };\n\n private unregisterWorkspaceFolder(container: {uri: string}) {\n const index = this.workspaceFolders.findIndex(f => f.toString() === URI.parse(container.uri).toString());\n if (index >= 0) {\n this.workspaceFolders.splice(index, 1);\n }\n }\n\n private registerWorkspaceFolder(container: {uri: string}) {\n this.workspaceFolders.push(URI.parse(container.uri));\n }\n\n public get textDocuments(): readonly ITextDocument[] {\n return this._textDocumentListener.all().map(doc => AgentTextDocument.wrap(doc));\n }\n\n async getTextDocument(uri: URI): Promise {\n //TODO: Handle a case where document was already closed. Should we send request from agent to editor, to get file content?\n return this.textDocuments.find(doc => doc.uri.toString() == uri.toString());\n }\n\n async getRelativePath(doc: ITextDocument): Promise {\n const agentDoc = doc as AgentTextDocument;\n if (agentDoc.relativePath) {\n return agentDoc.relativePath;\n }\n\n return getRelativePath(this.workspaceFolders ?? [], doc.fileName) ?? path.basename(doc.fileName);\n }\n\n getWorkspaceFolders(): URI[] {\n return this.workspaceFolders;\n }\n\n findNotebook(doc: ITextDocument): INotebookDocument | undefined {\n //TODO: Agent doesn't have concept of notebook... maybe it should?\n return undefined;\n }\n}\n","import {EventEmitter} from 'events';\nimport {EditorAndPluginInfo, editorVersionHeaders} from '../config';\nimport {Context} from '../context';\nimport {UserErrorNotifier} from '../error/userErrorNotifier';\nimport {LogLevel, Logger} from '../logger';\nimport {NetworkConfiguration} from '../networkConfiguration';\nimport {Fetcher} from '../networking';\nimport {NotificationSender} from '../notificationSender';\nimport {TelemetryData, telemetry, telemetryError} from '../telemetry';\nimport {UrlOpener} from '../util/opener';\nimport {CopilotTokenNotifier} from './copilotTokenNotifier';\n\nconst authLogger = new Logger(LogLevel.INFO, 'auth');\n\n// Buffer to allow refresh to happen successfully\nconst REFRESH_BUFFER_SECONDS = 60;\n// track how many refresh token functions are running\nlet refreshRunningCount = 0;\n\n// Name of the event emitted after a token refresh.\nexport const TOKEN_REFRESHED_EVENT = 'token_refreshed';\n\nexport type GitHubTokenDevOverride = {\n copilotTokenUrl: string;\n notificationUrl: string;\n};\n\nexport type GitHubToken = {\n token: string;\n devOverride?: GitHubTokenDevOverride;\n};\n\nexport function nowSeconds(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * Details of the user's telemetry consent status we get from the server during token retrieval.\n *\n * `unconfigured` is a transitional state for pre-GA that indicates the user is in the Technical Preview\n * and needs to be asked about telemetry consent client-side. It can be removed post-GA as the server\n * will never return it again.\n *\n * `enabled` indicates that they agreed to full telemetry.\n *\n * `disabled` indicates that they opted out of full telemetry so we can only send the core messages\n * that users cannot opt-out of.\n *\n */\nexport type UserTelemetryChoice = 'enabled' | 'disabled';\n\n/**\n * A notification we get from the server during token retrieval. Needs to be presented to the user.\n */\ntype ServerSideNotification = {\n message: string;\n url: string;\n title: string;\n};\n\n/**\n * A notification that warns the user about upcoming problems.\n */\ntype WarningNotification = ServerSideNotification & {\n notification_id: string;\n};\n\n/**\n * A notification in case of an error.\n */\ntype ErrorNotification = ServerSideNotification;\n\n/**\n * A server response containing a Copilot token and metadata associated with it.\n */\nexport interface TokenInfo {\n // v2 format: fields:mac\n // fields are ';' separated key=value pairs, including tid (tracking_id), dom (domain), and exp (unix_time).\n token: string;\n expires_at: number; // unix time UTC in seconds\n refresh_in: number; // seconds to refresh token\n user_notification?: WarningNotification;\n error_details?: ErrorNotification;\n organization_list?: string[];\n code_quote_enabled?: boolean;\n copilotignore_enabled?: boolean;\n chat_enabled?: boolean;\n}\n\nexport type TokenEnvelope = Omit;\n\nexport type TokenErrorReason = 'NotAuthorized' | 'FailedToGetToken' | 'TokenInvalid' | 'GitHubLoginFailed' | 'HTTP401';\n\nexport type TokenError = {\n reason: TokenErrorReason;\n message?: string; // TODO: not used yet, but will be for 466 errors\n};\n\nexport type TokenInfoOrError = ({kind: 'success'} & TokenInfo) | ({kind: 'failure'} & TokenError);\n\ntype NotGitHubLoginFailed =\n | {kind: 'success'}\n | {kind: 'failure'; reason: Exclude};\n\nexport async function authFromGitHubToken(\n ctx: Context,\n githubToken: GitHubToken\n): Promise {\n telemetry(ctx, 'auth.new_login');\n const response = await fetchCopilotToken(ctx, githubToken);\n if (!response) {\n authLogger.info(ctx, 'Failed to get copilot token');\n telemetryError(ctx, 'auth.request_failed');\n return {kind: 'failure', reason: 'FailedToGetToken'};\n }\n\n // FIXME: Unverified type after inputting response\n const tokenInfo: undefined | TokenInfo = await response.json();\n if (!tokenInfo) {\n authLogger.info(ctx, 'Failed to get copilot token');\n telemetryError(ctx, 'auth.request_read_failed');\n return {kind: 'failure', reason: 'FailedToGetToken'};\n }\n\n const notification = tokenInfo.user_notification;\n notifyUser(ctx, notification, githubToken);\n\n if (response.status === 401) {\n authLogger.info(ctx, 'Failed to get copilot token due to 401 status. Please sign out and try again.');\n telemetryError(ctx, 'auth.unknown_401');\n return {kind: 'failure', reason: 'HTTP401'};\n }\n\n if (!response.ok || !tokenInfo.token) {\n authLogger.info(ctx, `Invalid copilot token: missing token: ${response.status} ${response.statusText}`);\n telemetryError(\n ctx,\n 'auth.invalid_token',\n TelemetryData.createAndMarkAsIssued({\n status: response.status.toString(),\n status_text: response.statusText,\n })\n );\n const error_details = tokenInfo.error_details;\n notifyUser(ctx, error_details, githubToken);\n return {kind: 'failure', reason: 'NotAuthorized', ...error_details};\n }\n\n const expires_at = tokenInfo.expires_at;\n // some users have clocks adjusted ahead, expires_at will immediately be less than current clock time;\n // adjust expires_at to the refresh time + a buffer to avoid expiring the token before the refresh can fire.\n tokenInfo.expires_at = nowSeconds() + tokenInfo.refresh_in + REFRESH_BUFFER_SECONDS;\n\n // Extract the data needed to instantiate the copilot token, and group the\n // remaining data from the CopilotEnvelope object.\n const {token, organization_list, ...tokenEnvelope} = tokenInfo;\n\n // create the copilot token\n const copilotToken = new CopilotToken(token, organization_list);\n ctx.get(CopilotTokenNotifier).emit('onCopilotToken', copilotToken, tokenEnvelope);\n\n telemetry(\n ctx,\n 'auth.new_token',\n TelemetryData.createAndMarkAsIssued(\n {\n sku: copilotToken.getTokenValue('sku') ?? 'unknown',\n },\n {\n adjusted_expires_at: tokenInfo.expires_at,\n expires_at: expires_at, // track original expires_at\n current_time: nowSeconds(),\n }\n )\n );\n\n return {kind: 'success', ...tokenInfo};\n}\n\nasync function fetchCopilotToken(ctx: Context, githubToken: GitHubToken) {\n const copilotTokenUrl = ctx.get(NetworkConfiguration).getTokenUrl(githubToken);\n try {\n return await ctx.get(Fetcher).fetch(copilotTokenUrl, {\n headers: {\n Authorization: `token ${githubToken.token}`,\n ...editorVersionHeaders(ctx),\n },\n });\n } catch (err: any) {\n ctx.get(UserErrorNotifier).notifyUser(ctx, err);\n throw err;\n }\n}\n\nconst recentNotifications: Map = new Map();\n\nfunction notifyUser(\n ctx: Context,\n notification: ErrorNotification | WarningNotification | undefined,\n githubToken: GitHubToken\n) {\n if (!notification) {\n return;\n }\n // TODO this is a quick hack to avoid spamming the user with the same notification repeatedly,\n // especially when clients of the agent call things that trigger token requests and hence notifications\n // as a side-effect.\n // We should find a cleaner way of doing this.\n // The current implementation also interferes with tests that happen to reuse the same message. If we keep\n // this machinery for a significant period, the global `recentNotifications` should be properly abstracted into the Context.\n const now = nowSeconds();\n const recent = recentNotifications.get(notification.message);\n // We used to suppress notifications for 5s (see https://github.com/github/copilot-client/pull/2079), hence the timestamps.\n // However if the account was in a state with no Copilot access,\n // notifications would appear every time a token would be requested (minus the 5s suppression).\n // As a short-term mitigation plan we are suppressing notifications for the rest of the session once shown,\n // but we really need to rethink how we handle notifications.\n if (recent) {\n return;\n }\n recentNotifications.set(notification.message, now);\n\n ctx.get(NotificationSender)\n .showWarningMessage(notification.message, {title: notification.title}, {title: 'Dismiss'})\n .catch(error => {\n console.error(error);\n authLogger.exception(ctx, error, `Error while sending notification`);\n })\n .then(async r => {\n const showUrl = r?.title === notification.title;\n const ackNotification = showUrl || r?.title === 'Dismiss';\n if (showUrl) {\n const editorInfo = ctx.get(EditorAndPluginInfo).getEditorPluginInfo();\n const urlWithContext = notification.url.replace(\n '{EDITOR}',\n encodeURIComponent(editorInfo.name + '_' + editorInfo.version)\n );\n await ctx.get(UrlOpener).open(urlWithContext);\n }\n if ('notification_id' in notification && ackNotification) {\n await sendNotificationResultToGitHub(ctx, notification.notification_id, githubToken);\n }\n });\n}\n\nasync function sendNotificationResultToGitHub(ctx: Context, notification_id: string, githubToken: GitHubToken) {\n const notificationUrl = ctx.get(NetworkConfiguration).getNotificationUrl(githubToken);\n const response = await ctx.get(Fetcher).fetch(notificationUrl, {\n headers: {\n Authorization: `token ${githubToken.token}`,\n ...editorVersionHeaders(ctx),\n },\n method: 'POST',\n body: JSON.stringify({\n notification_id,\n }),\n });\n if (!response || !response.ok) {\n authLogger.error(\n ctx,\n `Failed to send notification result to GitHub: ${response?.status} ${response?.statusText}`\n );\n }\n}\n\nexport class CopilotToken {\n private readonly tokenMap: Map;\n constructor(public readonly token: string, public readonly organization_list?: string[]) {\n this.tokenMap = this.parseToken(token);\n }\n\n private parseToken(token: string): Map {\n const result = new Map();\n const firstPart = token?.split(':')[0];\n const fields = firstPart?.split(';');\n for (const field of fields) {\n const [key, value] = field.split('=');\n result.set(key, value);\n }\n return result;\n }\n\n public getTokenValue(key: string): string | undefined {\n return this.tokenMap.get(key);\n }\n}\n\nexport abstract class CopilotTokenManager {\n /**\n * Event emitter that will fire an event every time a token refresh is requested.\n *\n * This is used for example in the repo enablement code (lib/src/enablement.ts),\n * where we need to clear the list of cached repos whenever we request a new token.\n */\n readonly tokenRefreshEventEmitter: EventEmitter;\n\n constructor() {\n this.tokenRefreshEventEmitter = new EventEmitter();\n }\n\n /**\n * Returns a currently valid GitHub token, also known as session token or auth token.\n * It is the token retrieved by the call to the GITHUB_API_COPILOT_V2_TOKEN_URL endpoint.\n * If there is no valid token, returns undefined.\n */\n abstract getGitHubToken(ctx: Context): Promise;\n\n /** Return a currently valid Copilot token, retrieving a fresh one if\n * necessary.\n *\n * Note that a Copilot token manager should not provide a Copilot token unless\n * telemetry consent has been obtained. If this is not checked by the token manager\n * implementation itself, then anything constructing or initialising it should not\n * do so without checking this. force will force a refresh of the token, even not expired\n */\n abstract getCopilotToken(ctx: Context, force?: boolean): Promise;\n\n /** Drop the current Copilot token as we received an HTTP error while trying\n * to use it that indicates it's no longer valid.\n */\n abstract resetCopilotToken(ctx: Context, httpError?: number): void;\n}\n\n/**\n * A `CopilotTokenManager` that always returns the same token.\n * Mostly only useful for short periods, e.g. tests or single completion requests,\n * as these tokens typically expire after a few hours.\n */\nexport class FixedCopilotTokenManager extends CopilotTokenManager implements CheckCopilotToken {\n wasReset = false;\n constructor(private readonly token: string) {\n super();\n }\n\n async getGitHubToken(ctx: Context): Promise {\n return Promise.resolve('token');\n }\n\n async getCopilotToken(ctx: Context, force?: boolean): Promise {\n return new CopilotToken(this.token);\n }\n\n resetCopilotToken(ctx: Context, httpError?: number): void {\n this.wasReset = true;\n }\n\n async checkCopilotToken(ctx: Context): Promise<{status: 'OK'}> {\n // assume it's valid\n return {status: 'OK'};\n }\n}\n\n/** Intended for use as an add-on to `CopilotTokenManager`,\n * that checks that a valid Copilot token is available.\n */\nexport interface CheckCopilotToken {\n /** Check that the object has access to a valid Copilot token. */\n checkCopilotToken(\n ctx: Context\n ): Promise<{status: 'OK'} | (TokenError & {reason: Exclude})>;\n}\n\n/**\n * Given a GitHub token, return a Copilot token, refreshing it as needed.\n * The caller that initialises the object is responsible for checking telemetry consent before\n * using the object.\n */\nexport class CopilotTokenManagerFromGitHubToken extends CopilotTokenManager implements CheckCopilotToken {\n copilotToken: TokenInfo | undefined;\n\n constructor(private readonly githubToken: GitHubToken) {\n super();\n this.copilotToken = undefined;\n }\n\n async getGitHubToken(ctx: Context): Promise {\n return Promise.resolve(this.githubToken.token);\n }\n\n async getCopilotToken(ctx: Context, force?: boolean): Promise {\n if (!this.copilotToken || this.copilotToken.expires_at < nowSeconds() || force) {\n const tokenResult = await authFromGitHubToken(ctx, this.githubToken);\n if (tokenResult.kind === 'failure') {\n throw Error(\n `Failed to get copilot token: ${tokenResult.reason.toString()} ${tokenResult.message ?? ''}`\n );\n }\n this.copilotToken = {...tokenResult};\n refreshToken(ctx, this, tokenResult.refresh_in);\n }\n return new CopilotToken(this.copilotToken.token, this.copilotToken.organization_list);\n }\n\n async checkCopilotToken(ctx: Context) {\n if (!this.copilotToken || this.copilotToken.expires_at < nowSeconds()) {\n const tokenResult = await authFromGitHubToken(ctx, this.githubToken);\n if (tokenResult.kind === 'failure') {\n return tokenResult;\n }\n this.copilotToken = {...tokenResult};\n refreshToken(ctx, this, tokenResult.refresh_in);\n }\n const result: {status: 'OK'} = {\n status: 'OK',\n };\n return result;\n }\n\n resetCopilotToken(ctx: Context, httpError?: number): void {\n if (httpError !== undefined) {\n telemetry(ctx, 'auth.reset_token_' + httpError);\n }\n authLogger.debug(ctx, `Resetting copilot token on HTTP error ${httpError || 'unknown'}`);\n this.copilotToken = undefined;\n }\n}\n\n/**\n * calls back to token manager, caller, to refresh the token\n * @param ctx\n * @param tokenManager\n * @param refreshIn seconds to refresh in\n */\nexport function refreshToken(ctx: Context, tokenManager: CopilotTokenManager, refreshIn: number) {\n const now = nowSeconds();\n // only let refresh run when there is no one doing work\n if (refreshRunningCount > 0) {\n return;\n }\n // lock in a single run\n refreshRunningCount++;\n // refresh the token prior to expiry\n // promise is launched but not awaited, since the timeout is async, tested manually to confirm it works\n setTimeout(async () => {\n let kind: string;\n let error = '';\n try {\n // decrement to let in the next caller\n refreshRunningCount--;\n // call the caller with force, will cause the child to recurse back, if the count is 0\n await tokenManager.getCopilotToken(ctx, true);\n kind = 'success';\n\n // Emit a refresh event for any possible listeners like the repo enablement code.\n tokenManager.tokenRefreshEventEmitter.emit(TOKEN_REFRESHED_EVENT);\n } catch (e: any) {\n // if we fail mark it for telem, but don't throw\n kind = 'failure';\n // get the error\n error = e.toString();\n }\n const data = TelemetryData.createAndMarkAsIssued(\n {result: kind},\n {time_taken: nowSeconds() - now, refresh_count: refreshRunningCount}\n );\n if (error) {\n data.properties['reason'] = error;\n }\n telemetry(ctx, 'auth.token_refresh', data);\n }, refreshIn * 1000); //ms to refresh token in from api\n}\n","import EventEmitter = require('events');\nimport {CopilotToken, TokenEnvelope} from './copilotToken';\n\nexport type CopilotTokenEvent = 'onCopilotToken';\n\nexport declare interface CopilotTokenNotifier {\n on(event: CopilotTokenEvent, listener: (token: CopilotToken, envelope: TokenEnvelope) => void): this;\n}\n\nexport class CopilotTokenNotifier extends EventEmitter {\n constructor() {\n super();\n }\n\n override emit(event: CopilotTokenEvent, token: CopilotToken, envelope: TokenEnvelope): boolean {\n return super.emit(event, token, envelope);\n }\n}\n","import {URI} from 'vscode-uri';\nimport {IDisposable} from './common/cancellation';\nimport {Context} from './context';\nimport {TextDocumentManager} from './textDocumentManager';\n\n/**\n * A tracker which can take an arbitrary number of actions to run after a given timeout\n * When all pushed timeouts have been resolved, the tracker disposes of itself.\n */\nexport class ChangeTracker {\n private _offset: number;\n public get offset(): number {\n return this._offset;\n }\n private _referenceCount = 0;\n private _tracker: IDisposable;\n private _isDisposed = false;\n\n constructor(ctx: Context, fileURI: URI, insertionOffset: number) {\n this._offset = insertionOffset;\n const documentManager = ctx.get(TextDocumentManager);\n\n this._tracker = documentManager.onDidChangeTextDocument(async e => {\n if (e.document.uri === fileURI) {\n for (const cc of e.contentChanges) {\n if (cc.rangeOffset + cc.rangeLength <= this.offset) {\n const delta = cc.text.length - cc.rangeLength;\n this._offset = this._offset + delta;\n }\n }\n }\n });\n }\n\n public push(action: () => void, timeout: number): void {\n if (this._isDisposed) {\n throw new Error('Unable to push new actions to a disposed ChangeTracker');\n }\n this._referenceCount++;\n setTimeout(() => {\n action();\n this._referenceCount--;\n if (this._referenceCount === 0) {\n this._tracker.dispose();\n this._isDisposed = true;\n }\n }, timeout);\n }\n}\n","export class Clock {\n public now(): Date {\n return new Date();\n }\n}\n","import {URI} from 'vscode-uri';\n\nexport abstract class CommitFileResolver {\n abstract getCoCommitResult(targetPath: string, maxFiles: number): Promise;\n}\n","import {SHA256} from 'crypto-js';\nimport {Prompt} from '../prompt/prompt';\n\n/**\n * Returns a cache key for the given prompt.\n */\nexport function keyForPrompt(prompt: Prompt): string {\n return SHA256(prompt.prefix + prompt.suffix).toString();\n}\n\n/**\n * This implements the Map interface. Note that in all methods that iterate or return an iterator, a copy of the underlying data is\n * returned so that if you call `get`, `set`, or `delete` while iterating, the iterator will not be invalidated.\n */\nexport class LRUCacheMap implements Map {\n private valueMap = new Map();\n private lruKeys: string[] = [];\n private sizeLimit: number;\n\n // constructor\n constructor(size = 10) {\n this.sizeLimit = size;\n }\n\n set(key: string, value: T): this {\n let maybeKeyToDelete: string | undefined = undefined;\n if (this.valueMap.has(key)) {\n maybeKeyToDelete = key;\n } else if (this.lruKeys.length >= this.sizeLimit) {\n // least-recently used cache eviction strategy\n maybeKeyToDelete = this.lruKeys[0];\n }\n\n // Delete\n if (maybeKeyToDelete !== undefined) {\n this.delete(maybeKeyToDelete);\n }\n\n this.valueMap.set(key, value);\n this.touchKeyInLRU(key);\n return this;\n }\n /**\n * Warning this method makes the key the most recently used. To avoid this, use `peek` instead.\n * @param key\n * @returns\n */\n get(key: string): T | undefined {\n if (this.valueMap.has(key)) {\n const entry = this.valueMap.get(key);\n // Add the key to the end of the lruKeys array\n this.touchKeyInLRU(key);\n return entry;\n }\n\n return undefined;\n }\n\n delete(key: string): boolean {\n if (this.has(key)) {\n this.removeKeyFromLRU(key);\n const tree = this.valueMap.get(key);\n if (tree !== undefined) {\n this.valueMap.delete(key);\n }\n return true;\n }\n return false;\n }\n\n clear() {\n this.valueMap.clear();\n this.lruKeys = [];\n }\n\n get size(): number {\n return this.valueMap.size;\n }\n\n keys(): IterableIterator {\n return this.lruKeys.slice().values();\n }\n\n values(): IterableIterator {\n return new Map(this.valueMap).values();\n }\n\n entries(): IterableIterator<[string, T]> {\n return new Map(this.valueMap).entries();\n }\n\n [Symbol.iterator](): IterableIterator<[string, T]> {\n return this.entries();\n }\n\n has(key: string): boolean {\n return this.valueMap.has(key);\n }\n\n forEach(callbackfn: (value: T, key: string, map: Map) => void, thisArg?: any): void {\n new Map(this.valueMap).forEach(callbackfn, thisArg);\n }\n\n get [Symbol.toStringTag](): string {\n return 'LRUCacheMap';\n }\n\n peek(key: string): T | undefined {\n return this.valueMap.get(key);\n }\n\n private removeKeyFromLRU(key: string) {\n // Check if lruKeys array contains the key\n const index = this.lruKeys.indexOf(key);\n if (index !== -1) {\n // Remove the key from the lry array\n this.lruKeys.splice(index, 1);\n }\n }\n\n private touchKeyInLRU(key: string) {\n this.removeKeyFromLRU(key);\n this.lruKeys.push(key);\n }\n}\n","type DebounceState = {\n timer: NodeJS.Timeout;\n reject: (reason?: any) => void;\n};\n\n/**\n * Debouncer class for async code.\n *\n * Implements \"trailing\" debouncing as described here:\n * https://css-tricks.com/debouncing-throttling-explained-examples/#aa-debounce\n *\n * For a given instance of this class, at most one call to `debounce` can be\n * in progress at a time. A subsequent call will trigger rejection of the promise returned\n * by the previous call.\n */\nexport class Debouncer {\n private state: DebounceState | undefined;\n\n /**\n * Wait for the specified number of milliseconds, then resolve.\n * Rejects if another call is made to `debounce` on this object in the meantime.\n */\n public async debounce(ms: number): Promise {\n if (this.state) {\n clearTimeout(this.state.timer);\n this.state.reject();\n this.state = undefined;\n }\n return new Promise((resolve, reject) => {\n this.state = {\n timer: setTimeout(() => resolve(), ms),\n reject,\n };\n });\n }\n}\n\n/** Debounce function for sync functions */\nexport function debounce any>(\n ms: number,\n callback: T\n): (...args: Parameters) => Promise> {\n let timer: NodeJS.Timeout | undefined;\n\n return (...args: Parameters) => {\n if (timer) {\n clearTimeout(timer);\n }\n return new Promise>(resolve => {\n timer = setTimeout(() => {\n const returnValue = callback(...args) as ReturnType;\n resolve(returnValue);\n }, ms);\n });\n };\n}\n","export async function* asyncIterableMap(\n source: AsyncIterable,\n selector: (x: TSource) => Promise\n): AsyncIterable {\n for await (const item of source) {\n yield selector(item);\n }\n}\n\nexport async function* asyncIterableFilter(\n source: AsyncIterable,\n predicate: (x: TSource) => Promise\n): AsyncIterable {\n for await (const item of source) {\n if (await predicate(item)) {\n yield item;\n }\n }\n}\n\nexport async function* asyncIterableMapFilter(\n source: AsyncIterable,\n selector: (x: TSource) => Promise\n): AsyncIterable {\n for await (const item of source) {\n const result = await selector(item);\n if (result !== undefined) {\n yield result;\n }\n }\n}\n\nexport async function* asyncIterableFromArray(source: TSource[]): AsyncIterable {\n for (const item of source) {\n yield item;\n }\n}\n","import {CopilotTokenNotifier} from '../auth/copilotTokenNotifier';\nimport {Clock} from '../clock';\nimport {BlockModeConfig, BuildInfo, ConfigBlockModeConfig, ConfigProvider} from '../config';\nimport {Context} from '../context';\nimport {UserErrorNotifier} from '../error/userErrorNotifier';\nimport {Features} from '../experiments/features';\nimport {ExpConfigMaker, ExpConfigNone} from '../experiments/fetchExperiments';\nimport {CompletionsCache} from '../ghostText/completionsCache';\nimport {ContextualFilterManager} from '../ghostText/contextualFilter';\nimport {HeaderContributors} from '../headerContributors';\nimport {LanguageDetection, getLanguageDetection} from '../language/languageDetection';\nimport {ConsoleLog, LogLevel, LogTarget, LogVerbose, Logger} from '../logger';\nimport {CertificateReaderCache} from '../network/certificateReaderCache';\nimport {RootCertificateReader, getRootCertificateReader} from '../network/certificateReaders';\nimport {HelixFetcher} from '../network/helix';\nimport {Fetcher} from '../networking';\nimport {LiveOpenAIFetcher, OpenAIFetcher} from '../openai/fetch';\nimport {PostInsertionNotifier} from '../postInsertionNotifier';\nimport {TelemetryEndpointUrl, TelemetryReporters, TelemetryUserConfig} from '../telemetry';\nimport {RuntimeMode, isVerboseLoggingEnabled} from '../testing/runtimeMode';\nimport {PromiseQueue} from '../testing/telemetry';\nimport {RealUrlOpener, UrlOpener} from '../util/opener';\n\nexport function createProductionContext(configProvider: ConfigProvider): Context {\n const ctx = new Context();\n ctx.set(ConfigProvider, configProvider);\n ctx.set(Clock, new Clock());\n ctx.set(BuildInfo, new BuildInfo());\n setupRudimentaryLogging(ctx);\n logger.debug(ctx, 'Initializing main context');\n ctx.set(CompletionsCache, new CompletionsCache());\n ctx.set(CopilotTokenNotifier, new CopilotTokenNotifier());\n ctx.set(CertificateReaderCache, new CertificateReaderCache());\n ctx.set(RootCertificateReader, getRootCertificateReader(ctx));\n ctx.set(Fetcher, new HelixFetcher(ctx));\n ctx.set(LanguageDetection, getLanguageDetection(ctx));\n ctx.set(Features, new Features(ctx));\n ctx.set(PostInsertionNotifier, new PostInsertionNotifier());\n ctx.set(TelemetryUserConfig, new TelemetryUserConfig(ctx));\n ctx.set(TelemetryEndpointUrl, new TelemetryEndpointUrl());\n ctx.set(TelemetryReporters, new TelemetryReporters());\n ctx.set(HeaderContributors, new HeaderContributors());\n ctx.set(UserErrorNotifier, new UserErrorNotifier(ctx));\n ctx.set(ContextualFilterManager, new ContextualFilterManager());\n ctx.set(OpenAIFetcher, new LiveOpenAIFetcher());\n ctx.set(BlockModeConfig, new ConfigBlockModeConfig());\n ctx.set(UrlOpener, new RealUrlOpener());\n ctx.set(ExpConfigMaker, new ExpConfigNone());\n ctx.set(PromiseQueue, new PromiseQueue());\n return ctx;\n}\n\nfunction setupRudimentaryLogging(ctx: Context) {\n ctx.set(RuntimeMode, RuntimeMode.fromEnvironment(false));\n ctx.set(LogVerbose, new LogVerbose(isVerboseLoggingEnabled(ctx)));\n ctx.set(LogTarget, new ConsoleLog(console));\n}\n\nexport const logger = new Logger(LogLevel.DEBUG, 'context');\n","import {isSupportedLanguageId} from '@github/copilot-promptlib';\nimport {CopilotConfigPrefix} from './constants';\nimport {Context} from './context';\nimport {Features} from './experiments/features';\n\nconst packageJson = require('../../package.json');\n\nexport const ConfigKey = {\n Enable: 'enable',\n InlineSuggestEnable: 'inlineSuggest.enable',\n\n ShowEditorCompletions: ['editor', 'showEditorCompletions'],\n EnableAutoCompletions: ['editor', 'enableAutoCompletions'],\n DelayCompletions: ['editor', 'delayCompletions'],\n FilterCompletions: ['editor', 'filterCompletions'],\n\n DisplayStyle: ['advanced', 'displayStyle'],\n SecretKey: ['advanced', 'secret_key'],\n SolutionLength: ['advanced', 'length'],\n Stops: ['advanced', 'stops'],\n Temperature: ['advanced', 'temperature'],\n TopP: ['advanced', 'top_p'],\n IndentationMode: ['advanced', 'indentationMode'],\n InlineSuggestCount: ['advanced', 'inlineSuggestCount'],\n ListCount: ['advanced', 'listCount'],\n\n DebugOverrideProxyUrl: ['advanced', 'debug.overrideProxyUrl'],\n DebugTestOverrideProxyUrl: ['advanced', 'debug.testOverrideProxyUrl'],\n DebugOverrideEngine: ['advanced', 'debug.overrideEngine'],\n DebugShowScores: ['advanced', 'debug.showScores'],\n DebugOverrideLogLevels: ['advanced', 'debug.overrideLogLevels'],\n DebugFilterLogCategories: ['advanced', 'debug.filterLogCategories'],\n\n ConversationEngine: ['advanced', 'conversationEngine'],\n ConversationMaxMessageTokens: ['advanced', 'maxMessageTokens'],\n ConversationMaxResponseTokens: ['advanced', 'maxResponseTokens'],\n ConversationTemperature: ['advanced', 'conversationTemperature'],\n ConversationTopP: ['advanced', 'conversationTop_p'],\n ConversationSlashCommandEnablements: ['advanced', 'slashCommands'],\n ConversationAdditionalPromptContext: ['advanced', 'conversationAdditionalPromptContext'],\n InteractiveEditorRichContext: ['advanced', 'interactiveEditorRichContext'],\n InteractiveEditorIntentDetection: ['advanced', 'interactiveEditorIntentDetection'],\n ConversationLoggingEnabled: ['advanced', 'conversationLoggingEnabled'],\n};\n\nexport type ConfigKeyType = (typeof ConfigKey)[keyof typeof ConfigKey];\n\n// How to determine where to terminate the completion to the current block.\nexport enum BlockMode {\n /**\n * Parse the context + completion on the client using treesitter to\n * determine blocks.\n */\n Parsing = 'parsing',\n /**\n * Let the server parse out blocks and assume that the completion terminates\n * at the end of a block.\n */\n Server = 'server',\n /**\n * Runs both the treesitter parsing on the client plus indentation-based\n * truncation on the proxy.\n */\n ParsingAndServer = 'parsingandserver',\n}\n\nexport function shouldDoParsingTrimming(blockMode: BlockMode): boolean {\n return [BlockMode.Parsing, BlockMode.ParsingAndServer].includes(blockMode);\n}\n\nexport function shouldDoServerTrimming(blockMode: BlockMode): boolean {\n return [BlockMode.Server, BlockMode.ParsingAndServer].includes(blockMode);\n}\n\n// TODO rework this enum so that the normal/nightly and prod/dev distinctions are orthogonal. (dev builds should behave like nightly?)\nexport enum BuildType {\n DEV = 'dev',\n PROD = 'prod',\n NIGHTLY = 'nightly',\n}\n\nexport abstract class BlockModeConfig {\n abstract forLanguage(ctx: Context, languageId: string): Promise;\n}\n\nexport class ConfigBlockModeConfig extends BlockModeConfig {\n async forLanguage(ctx: Context, languageId: string): Promise {\n // If the user has explicitly overridden any indentation mode settings, use their settings\n // for all languages, regardless of any AB tests.\n // This is only likely to be our team as the setting is not advertised apart\n // from being discoverable in VSCode settings.\n if (ctx.get(ConfigProvider).isDefaultSettingOverwritten(ConfigKey.IndentationMode)) {\n const clientIndent = ctx\n .get(ConfigProvider)\n .getLanguageConfig<'client' | 'server' | 'clientandserver' | boolean>(\n ConfigKey.IndentationMode,\n languageId\n );\n switch (clientIndent) {\n case 'client':\n case true:\n case 'server':\n return BlockMode.Server;\n case 'clientandserver':\n // So that setting this for all languages doesn't\n // accidentally break non-tree-sitter languages.\n return toApplicableBlockMode(BlockMode.ParsingAndServer, languageId);\n default:\n return BlockMode.Parsing;\n }\n }\n const overrideBlockMode = await ctx.get(Features).overrideBlockMode();\n if (overrideBlockMode) {\n return toApplicableBlockMode(overrideBlockMode, languageId);\n }\n // TODO: https://github.com/github/copilot-client/issues/2366 get rid of this\n // special casing once cancellations based on tree-sitter propagate to\n // the proxy.\n if (languageId == 'ruby') {\n return BlockMode.Parsing;\n }\n // For existing multiline languages use standard tree-sitter based parsing\n // plus proxy-side trimming\n if (isSupportedLanguageId(languageId)) {\n return BlockMode.ParsingAndServer;\n }\n return BlockMode.Server;\n }\n}\n\n/**\n * Prevents tree-sitter parsing from being applied to languages we don't include\n * parsers for.\n */\nfunction toApplicableBlockMode(blockMode: BlockMode, languageId: string): BlockMode {\n switch (blockMode) {\n case BlockMode.Parsing:\n if (isSupportedLanguageId(languageId)) {\n return BlockMode.Parsing;\n } else {\n return BlockMode.Server;\n }\n case BlockMode.Server:\n return BlockMode.Server;\n case BlockMode.ParsingAndServer:\n default:\n if (isSupportedLanguageId(languageId)) {\n return BlockMode.ParsingAndServer;\n } else {\n return BlockMode.Server;\n }\n }\n}\n\nexport abstract class ConfigProvider {\n abstract getConfig(key: ConfigKeyType): T;\n /**\n * Check whether the setting we got for a particular key\n * is still the default setting or has been overwritten\n * by a user setting (at any level).\n */\n abstract isDefaultSettingOverwritten(key: ConfigKeyType): boolean;\n abstract dumpConfig(): {[key: string]: string};\n abstract getLanguageConfig(key: ConfigKeyType, language?: string): T | undefined;\n}\n\n/** Provides only the default values, ignoring the user's settings. */\nexport class DefaultsOnlyConfigProvider extends ConfigProvider {\n override getConfig(key: ConfigKeyType): T {\n // hardcode default values for the agent, for now\n if (Array.isArray(key)) {\n return getConfigDefaultForObjectKey(key[0], key[1]);\n } else {\n return getConfigDefaultForKey(key);\n }\n }\n\n override isDefaultSettingOverwritten(key: (typeof ConfigKey)[keyof typeof ConfigKey]): boolean {\n return false;\n }\n\n override dumpConfig(): {[key: string]: string} {\n return {};\n }\n\n override getLanguageConfig(key: ConfigKeyType, language?: string): T | undefined {\n const obj: {[key: string]: T} = this.getConfig(key);\n return language && language in obj ? obj[language] : obj['*'];\n }\n}\n\n/**\n * A ConfigProvider that allows overriding of config values.\n */\nexport class InMemoryConfigProvider extends ConfigProvider {\n constructor(private readonly baseConfigProvider: ConfigProvider, readonly overrides: Map) {\n super();\n }\n\n getConfig(key: ConfigKeyType): T {\n const override = this.overrides.get(key);\n if (override !== undefined) {\n return override as T;\n }\n return this.baseConfigProvider.getConfig(key);\n }\n\n setConfig(key: ConfigKeyType, value: unknown): void {\n if (value !== undefined) {\n this.overrides.set(key, value);\n } else {\n this.overrides.delete(key);\n }\n }\n\n setLanguageEnablement(languageId: string, value: boolean): void {\n this.overrides.set(ConfigKey.Enable, {[languageId]: value});\n }\n\n isDefaultSettingOverwritten(key: ConfigKeyType): boolean {\n if (this.overrides.has(key)) {\n return true;\n }\n return this.baseConfigProvider.isDefaultSettingOverwritten(key);\n }\n\n keyAsString(key: ConfigKeyType): string {\n return Array.isArray(key) ? key.join('.') : key;\n }\n\n dumpConfig(): {[key: string]: string} {\n const config = this.baseConfigProvider.dumpConfig();\n this.overrides.forEach((value, key) => {\n config[this.keyAsString(key)] = JSON.stringify(value);\n });\n return config;\n }\n\n getLanguageConfig(key: ConfigKeyType, language?: string): T | undefined {\n const value: {[key: string]: T} = this.overrides.get(key) as {[key: string]: T};\n if (value !== undefined) {\n if (language !== undefined) {\n return value[language];\n } else {\n return value['*'];\n }\n }\n return this.baseConfigProvider.getLanguageConfig(key, language);\n }\n}\n\nexport function getConfigDefaultForKey(key: string): T {\n try {\n const value = packageJson.contributes.configuration[0].properties[`${CopilotConfigPrefix}.${key}`].default;\n if (value === undefined) {\n throw new Error(`Missing config default value: ${CopilotConfigPrefix}.${key}`);\n }\n return value;\n } catch (e) {\n throw new Error(`Error inspecting config default value ${CopilotConfigPrefix}.${key}: ${e}`);\n }\n}\n\nexport function getConfigDefaultForObjectKey(key: string, objectKey: string): T {\n try {\n const value =\n packageJson.contributes.configuration[0].properties[`${CopilotConfigPrefix}.${key}`].properties[objectKey]\n .default;\n if (value === undefined) {\n throw new Error(`Missing config default value: ${CopilotConfigPrefix}.${key}`);\n }\n return value;\n } catch (e) {\n throw new Error(`Error inspecting config default value ${CopilotConfigPrefix}.${key}.${objectKey}: ${e}`);\n }\n}\n\nexport function getConfig(ctx: Context, key: ConfigKeyType): T {\n return ctx.get(ConfigProvider).getConfig(key);\n}\n\nexport function isDefaultSettingOverwritten(ctx: Context, key: (typeof ConfigKey)[keyof typeof ConfigKey]): boolean {\n return ctx.get(ConfigProvider).isDefaultSettingOverwritten(key);\n}\n\n/**\n * If we want to have a config setting, but not make it very visible to users, we can respect it\n * if set but not put a default value in the package.json. In that case `getConfig` will fail if\n * the user has not set it, so we need to use the pattern in this function instead.\n */\nexport function getHiddenConfig(ctx: Context, key: ConfigKeyType, options: {default: T}): T {\n if (isDefaultSettingOverwritten(ctx, key)) {\n return getConfig(ctx, key);\n } else {\n return options.default;\n }\n}\n\nexport function dumpConfig(ctx: Context) {\n return ctx.get(ConfigProvider).dumpConfig();\n}\n\nexport function getLanguageConfig(ctx: Context, key: ConfigKeyType, language?: string): T | undefined {\n return ctx.get(ConfigProvider).getLanguageConfig(key, language);\n}\n\nexport function getEnabledConfig(ctx: Context, language?: string): boolean | undefined {\n return getLanguageConfig(ctx, ConfigKey.Enable, language);\n}\n\nexport class BuildInfo {\n // TODO for now this is just initialised from `packageJson` which is the same across agent/extension.\n // Consider reworking this.\n private packageJson = packageJson;\n constructor() {}\n\n /**\n * @returns true if this is a build for end users.\n * (for the VSCode extension this is currently either the normal extension or the nightly release)\n */\n isProduction(): boolean {\n return this.getBuildType() != 'dev';\n }\n\n getBuildType(): BuildType {\n return this.packageJson.buildType;\n }\n\n getVersion(): string {\n return this.packageJson.version;\n }\n\n getBuild(): string {\n return this.packageJson.build;\n }\n\n getName(): string {\n return this.packageJson.name;\n }\n}\n\nexport function isProduction(ctx: Context): boolean {\n return ctx.get(BuildInfo).isProduction();\n}\n\nexport function getBuildType(ctx: Context): BuildType {\n return ctx.get(BuildInfo).getBuildType();\n}\n\nexport function getBuild(ctx: Context): string {\n return ctx.get(BuildInfo).getBuild();\n}\n\nexport function getVersion(ctx: Context): string {\n return ctx.get(BuildInfo).getVersion();\n}\n\nexport class EditorSession {\n constructor(readonly sessionId: string, readonly machineId: string) {}\n}\n\nexport type NameAndVersion = {\n name: string;\n version: string;\n};\n\nexport function formatNameAndVersion({name, version}: NameAndVersion): string {\n return `${name}/${version}`;\n}\n\nexport abstract class EditorAndPluginInfo {\n /**\n * The name and version of the editor itself.\n * For example `{ name: 'JetBrains-IU', version: '213.6777.52' }`\n * or `{ name : 'vscode', version: '1.63.2' }`.\n */\n abstract getEditorInfo(): NameAndVersion;\n /**\n * The name and version of the Copilot editor plugin.\n * For example `{ name: 'copilot-intellij', version: '1.8.0' }`.\n * or `{ name: 'copilot', version: '1.7.21' }`.\n */\n abstract getEditorPluginInfo(): NameAndVersion;\n}\n\nexport function editorVersionHeaders(ctx: Context): {[key: string]: string} {\n const info = ctx.get(EditorAndPluginInfo);\n return {\n 'Editor-Version': formatNameAndVersion(info.getEditorInfo()),\n 'Editor-Plugin-Version': formatNameAndVersion(info.getEditorPluginInfo()),\n };\n}\n","export const CopilotConfigPrefix = 'github.copilot';\n","/**\n * The type of a constructor that can be passed to `.get()` in order to receive\n * a value of the instance type.\n */\nexport type Ctor = abstract new (...args: any[]) => T;\n\n/** The type of the instance associated with a constructor. */\nexport type Instance = T extends Ctor ? U : never;\n\n/**\n * Stores a set of singletons and provides type-safe access to them. Create an\n * instance and pass it through function calls.\n */\nexport class Context {\n private constructionStack: string[] = [];\n private instances = new Map, unknown>();\n\n constructor(private readonly baseContext?: Context) {\n const stack = new Error().stack?.split('\\n');\n if (stack) {\n // Remove the first line, which is the 'Error:' line.\n this.constructionStack.push(...stack.slice(1));\n }\n }\n\n /**\n * Returns the instance associated with the given constructor. Throws if there\n * is no binding for it.\n */\n get(ctor: Ctor): T {\n const value = this.tryGet(ctor);\n if (value) {\n return value;\n }\n throw new Error(`No instance of ${ctor.name} has been registered.\\n${this}`);\n }\n\n /**\n * Returns the instance associated with the given constructor.\n * Returns undefined if there is no binding for it.\n */\n private tryGet(ctor: Ctor): T | undefined {\n const value = this.instances.get(ctor);\n if (value) {\n return value as T;\n }\n if (this.baseContext) {\n return this.baseContext.tryGet(ctor);\n }\n return undefined;\n }\n\n /**\n * Associates the given constructor with the value (an instance of it). Throws\n * if there is an existing binding.\n */\n set>(ctor: C, instance: Instance): void {\n if (this.tryGet(ctor)) {\n throw new Error(\n `An instance of ${ctor.name} has already been registered. Use forceSet() if you're sure it's a good idea.`\n );\n }\n this.assertIsInstance(ctor, instance);\n this.instances.set(ctor, instance);\n }\n\n /**\n * Associates the given constructor with the value (an instance of it).\n * Overrides any existing binding.\n */\n forceSet>(ctor: C, instance: Instance): void {\n this.assertIsInstance(ctor, instance);\n this.instances.set(ctor, instance);\n }\n\n private assertIsInstance>(ctor: C, instance: Instance): void {\n if (!(instance instanceof ctor)) {\n // It's possible that `instance` isn't really an instance of ctor,\n // either because it was explicitly typed as `any` or because it's\n // just an object whose shape matches that of Instance. We don't\n // allow such usage because it can lead to surprising & subtle bugs.\n const inst = JSON.stringify(instance);\n throw new Error(\n `The instance you're trying to register for ${ctor.name} is not an instance of it (${inst}).`\n );\n }\n }\n\n toString(): string {\n let lines = ' Context created at:\\n';\n for (const stackEntry of this.constructionStack || []) {\n lines += ` ${stackEntry}\\n`;\n }\n lines += this.baseContext?.toString() ?? '';\n return lines;\n }\n\n /**\n * Getter to make it easier to inspect a value in the debug console via\n * autocomplete.\n */\n get debug(): {[key: string]: unknown} {\n const instances: {[key: string]: unknown} = {};\n for (const [ctor, value] of this.instances) {\n instances[ctor.name] = value;\n }\n return instances;\n }\n}\n","import ignore, {Ignore} from 'ignore';\nimport {dirname, normalize, relative, sep} from 'path';\nimport {URI} from 'vscode-uri';\nimport {Context} from '../context';\nimport {LogLevel, Logger} from '../logger';\nimport * as telemetry from '../telemetry';\n\nexport const copilotIgnoreLogger = new Logger(LogLevel.INFO, 'copilotIgnore');\n\nexport const COPILOT_IGNORE_FILE = '.copilotignore';\n\nexport class CopilotIgnore {\n #ignoreMap = new Map();\n\n constructor(private ctx: Context) {}\n\n /**\n * With a given source ignore file, create the ignore instance and add its contents\n */\n setPattern(ignoreFile: URI, pattern: string) {\n copilotIgnoreLogger.info(this.ctx, 'setting patterns', ignoreFile.fsPath);\n this.#ignoreMap.set(ignoreFile.fsPath, ignore().add(pattern));\n this.#telemetry('set');\n this.#searchRankCache = null;\n }\n\n /**\n * Remove the ignore instance for a given source ignore file\n */\n removePattern(ignoreFile: URI) {\n copilotIgnoreLogger.info(this.ctx, 'removing patterns', ignoreFile.fsPath);\n this.#telemetry('remove');\n this.#ignoreMap.delete(ignoreFile.fsPath);\n this.#searchRankCache = null;\n }\n\n /**\n * Remove all ignore instances for a given workspace\n */\n removeWorkspace(workspace: URI) {\n copilotIgnoreLogger.info(this.ctx, 'removing workspace', {workspace});\n let count = 0;\n for (const f of this.#ignoreMap.keys()) {\n if (isDescendant(workspace.fsPath, f)) {\n this.#ignoreMap.delete(f);\n count += 1;\n }\n }\n\n if (count > 0) {\n this.#telemetry('workspace.remove', undefined, {fileCount: count});\n }\n\n this.#searchRankCache = null;\n }\n\n /**\n * Check if a given file is ignored finding its ignore instance first\n */\n // TODO: memoize this\n isIgnored(file: URI) {\n // TODO: what about other schemes?\n if (file.scheme !== 'file') return false;\n if (this.#ignoreMap.size === 0) return false;\n\n const startTimeMs = Date.now();\n\n const target = file.fsPath;\n\n let ignoreIterations = 0;\n let result = {ignored: false, unignored: false};\n\n // We need to traverse up the tree using the first file we see, if it doesnt exist continue looking\n // see test case: \"nested ignore file should take precedence\"\n const searchRank = this.#searchRank;\n loop: for (const cur of searchRank) {\n ignoreIterations += 1;\n\n const dir = dirname(cur); // is like /Users/username/Project/\n const rel = relative(dir, target); // is like src/index.ts\n if (rel.startsWith('..')) continue; // is outside of the scope of this file\n\n // if the target is a descendant of the ignore location, check this ignore file\n if (isDescendant(dir, target)) {\n result = this.#ignoreMap.get(cur)!.test(rel);\n if (result.ignored) copilotIgnoreLogger.debug(this.ctx, 'ignoring file', {file: rel, root: cur});\n if (result.ignored || result.unignored) break loop;\n }\n }\n\n const endTimeMs = Date.now();\n this.#telemetry(\n 'isIgnored',\n {\n ignored: String(result.ignored),\n unignored: String(result.unignored),\n },\n {\n iterations: ignoreIterations,\n ignoreFileCount: searchRank.length,\n startTimeMs,\n endTimeMs,\n deltaMs: endTimeMs - startTimeMs,\n }\n );\n\n return result.ignored;\n }\n\n // sorts the ignore files by their depth, so we can traverse up the tree\n #searchRankCache: string[] | null = null;\n get #searchRank() {\n if (this.#searchRankCache !== null) return this.#searchRankCache;\n\n const cache: Record = {};\n const toRank = (value: string) => value.split(sep).length;\n return (this.#searchRankCache = [...this.#ignoreMap.keys()].sort(\n (a, b) => (cache[b] ||= toRank(b)) - (cache[a] ||= toRank(a))\n ));\n }\n\n // --\n\n #telemetry(label: string, data?: Record, measure?: Record, secure?: boolean) {\n telemetry.telemetry(\n this.ctx,\n `copilotIgnore.${label}`,\n telemetry.TelemetryData.createAndMarkAsIssued(data, measure),\n secure\n );\n }\n}\n\n// ---\n\nfunction isDescendant(parent: string, descendant: string) {\n if (parent === descendant) return true;\n if (parent.charAt(parent.length - 1) !== sep) parent += sep;\n return normalize(descendant).startsWith(normalize(parent));\n}\n","import {URI} from 'vscode-uri';\nimport {COPILOT_IGNORE_FILE, CopilotIgnore, copilotIgnoreLogger} from '.';\nimport {Context} from '../context';\nimport {StatusReporter} from '../progress';\n\nexport class CopilotIgnoreManager {\n #copilotIgnore: CopilotIgnore;\n\n #active = true;\n\n constructor(private ctx: Context) {\n this.#copilotIgnore = new CopilotIgnore(ctx);\n }\n\n enabled(state = true) {\n copilotIgnoreLogger.debug(this.ctx, state ? 'active' : 'inactive');\n this.#active = state;\n }\n\n onDidOpenTextDocument(file: URI | undefined) {\n this.setIgnoredStatus(file);\n }\n\n isIgnored(file: URI) {\n if (this.#active === false) return false;\n return this.#copilotIgnore.isIgnored(file);\n }\n\n onDidWorkspaceRemove(workspace: URI) {\n this.#copilotIgnore.removeWorkspace(workspace);\n }\n\n onDidIgnorePatternMove(oldPath: URI, newPath: URI, contents: string) {\n this.onDidIgnorePatternDelete(oldPath);\n this.onDidIgnorePatternCreate(newPath, contents);\n }\n\n onDidIgnorePatternDelete(file: URI) {\n if (!this.isCopilotIgnoreFile(file)) return;\n this.#copilotIgnore.removePattern(file);\n }\n\n onDidIgnorePatternCreate(file: URI, contents: string) {\n if (!this.isCopilotIgnoreFile(file)) return;\n this.#copilotIgnore.setPattern(file, contents);\n }\n\n setIgnoredStatus(file: URI | undefined) {\n if (!file || file?.scheme !== 'file') return;\n const statusReporter = this.ctx.get(StatusReporter);\n if (this.isIgnored(file)) {\n statusReporter.setInactive('Copilot is ignoring this file as per the .copilotignore settings');\n } else {\n statusReporter.forceNormal();\n }\n }\n\n isCopilotIgnoreFile(file: URI) {\n return file.fsPath.endsWith(COPILOT_IGNORE_FILE);\n }\n}\n\nexport class NoOPCopilotIgnoreManager extends CopilotIgnoreManager {\n override isIgnored() {\n return false;\n }\n}\n","import {URI} from 'vscode-uri';\nimport {Context} from '../../../lib/src/context';\nimport {IPosition, ITextDocument, LocationFactory} from '../../../lib/src/textDocument';\n\nexport const CopilotPanelScheme = 'copilot';\n\n// Declare enum for completion type\nexport enum CompletionType {\n OPEN_COPILOT = 2,\n}\n\nexport function completionTypeToString(type: CompletionType): string {\n switch (type) {\n case CompletionType.OPEN_COPILOT:\n return 'open copilot';\n default:\n return 'unknown';\n }\n}\n\nexport class CompletionContext {\n readonly insertPosition: IPosition;\n prependToCompletion = '';\n appendToCompletion = '';\n indentation: string | null = null;\n completionType: CompletionType = CompletionType.OPEN_COPILOT;\n\n // Simple constructor, all other properties have default values.\n constructor(ctx: Context, insertPosition: IPosition, completionType: CompletionType) {\n this.insertPosition = ctx.get(LocationFactory).position(insertPosition.line, insertPosition.character);\n this.completionType = completionType;\n }\n\n static fromJSONParse(ctx: Context, contextObj: any): CompletionContext {\n const insertPosition = ctx\n .get(LocationFactory)\n .position(contextObj.insertPosition.line, contextObj.insertPosition.character);\n const context = new CompletionContext(ctx, insertPosition, contextObj.completionType);\n context.prependToCompletion = contextObj.prependToCompletion;\n context.appendToCompletion = contextObj.appendToCompletion;\n context.indentation = contextObj.indentation;\n return context;\n }\n}\n\nexport function completionContextForDocument(\n ctx: Context,\n document: ITextDocument,\n insertPosition: IPosition\n): CompletionContext {\n let returnPosition = insertPosition;\n const line = document.lineAt(insertPosition.line);\n if (!line.isEmptyOrWhitespace) {\n returnPosition = line.range.end;\n }\n return new CompletionContext(ctx, returnPosition, CompletionType.OPEN_COPILOT);\n}\n\n// NOTE: Ensures that URIs are unique\nlet seq = 0;\n\nexport function encodeLocation(targetUri: URI, completionContext: CompletionContext): URI {\n const target = targetUri.toString().split('#');\n const remain = target.length > 1 ? target[1] : '';\n const query = JSON.stringify([target[0], completionContext, remain]);\n return URI.parse(`${CopilotPanelScheme}:GitHub%20Copilot?${query}#${seq++}`);\n}\n\nexport function decodeLocation(ctx: Context, uri: URI): [URI, CompletionContext] {\n const [target, completionContextPrimer, remain] = JSON.parse(uri.query);\n const targetUri = URI.parse(remain.length > 0 ? target + '#' + remain : target);\n const completionContext = CompletionContext.fromJSONParse(ctx, completionContextPrimer);\n return [targetUri, completionContext];\n}\n","import * as uuid from 'uuid';\nimport {ICancellationToken} from '../common/cancellation';\nimport {asyncIterableMapFilter} from '../common/iterableHelpers';\nimport {BlockMode, BlockModeConfig} from '../config';\nimport {Context} from '../context';\nimport {CompletionContext, CompletionType, completionTypeToString} from '../copilotPanel/common';\nimport {LogLevel, Logger} from '../logger';\nimport {getEngineURL} from '../openai/config';\nimport {PostOptions} from '../openai/fetch';\nimport {\n APIChoice,\n CopilotUiKind,\n FinishedCallback,\n OpenAIFetcher,\n RequestId,\n cleanupIndentChoices,\n} from '../openai/openai';\nimport {StatusReporter} from '../progress';\nimport {contextIndentation, getNodeStart, isBlockBodyFinished} from '../prompt/parseBlock';\nimport {extractPrompt, trimLastLine} from '../prompt/prompt';\nimport {isSupportedLanguageId} from '../prompt/promptLibProxy';\nimport {extractRepoInfoInBackground, getDogFood, getUserKind, tryGetGitHubNWO} from '../prompt/repository';\nimport {postProcessChoice} from '../suggestions/suggestions';\nimport {TelemetryData, telemetrizePromptLength, telemetry} from '../telemetry';\nimport {IPosition, ITextDocument, LocationFactory} from '../textDocument';\n\nconst solutionsLogger = new Logger(LogLevel.INFO, 'solutions');\n\nexport interface UnformattedSolution {\n displayText: string;\n meanProb: number;\n meanLogProb: number;\n completionText: string;\n requestId: RequestId;\n choiceIndex: number;\n prependToCompletion: string;\n docVersion: number;\n}\n\ntype CompletionParsingContext = CompletionType;\n\n/**\n * Determining the end of a completion when in parsing mode\n */\nfunction parsingBlockFinished(\n ctx: Context,\n document: ITextDocument,\n replaceStart: IPosition,\n completionType: CompletionParsingContext\n): (text: string) => Promise {\n return async (text: string) => {\n //If we executed content panel with command try to get until end of scope\n return isBlockBodyFinished(ctx, document, replaceStart, text);\n };\n}\n\n/**\n * Prepends the completion text with a given prefix.\n */\nasync function* prependChoices(choices: AsyncIterable, prefix: string): AsyncIterable {\n for await (const choice of choices) {\n const choiceCopy = {...choice};\n choiceCopy.completionText = prefix + choiceCopy.completionText.trimRight();\n yield choiceCopy;\n }\n}\n\nexport interface ISolutionManager {\n completionContext: CompletionContext;\n startPosition: IPosition;\n solutionCountTarget: number;\n savedTelemetryData: TelemetryData;\n\n getDocument(): Promise;\n reportCancelled(): void;\n getCancellationToken(): ICancellationToken;\n}\n\n/**\n * A stream of solutions, ending either with 'FinishedNormally' or 'FinishedWithError'.\n * This structure allows for errors to occur part way through the stream, as well as\n * at the beginning.\n *\n * The stream is similar to an async generator, but with more information when the stream\n * ends: instead of just `done` we can have `FinishedNormally` or `FinishedWithError`.\n */\nexport type SolutionsStream =\n | {status: 'FinishedNormally'}\n | {status: 'FinishedWithError'; error: string}\n | {status: 'Solution'; solution: UnformattedSolution; next: Promise};\n\nexport function normalizeCompletionText(text: string): string {\n return text.replace(/\\s+/g, '');\n}\n\n/**\n * Given an `ISolutionManager` with the context of a specific \"Open Copilot\" request,\n * initiate the generation of a stream of solutions for that request.\n */\nexport async function launchSolutions(ctx: Context, solutionManager: ISolutionManager): Promise {\n // Decode target-uri and target-range from the provided uri and fetch completions.\n // From the result create a virtual document which is in charge of loading,\n // printing, and formatting solutions.\n const insertPosition = solutionManager.completionContext.insertPosition;\n const prependToCompletion = solutionManager.completionContext.prependToCompletion;\n const indentation = solutionManager.completionContext.indentation;\n\n const locationFactory = ctx.get(LocationFactory);\n\n const document = await solutionManager.getDocument();\n\n const promptResponse = await extractPrompt(ctx, document, insertPosition);\n if (promptResponse.type === 'copilotNotAvailable') {\n solutionManager.reportCancelled();\n return {status: 'FinishedNormally'};\n }\n if (promptResponse.type === 'contextTooShort') {\n solutionManager.reportCancelled();\n return {status: 'FinishedWithError', error: 'Context too short'};\n }\n const prompt = promptResponse.prompt;\n const trailingWs = promptResponse.trailingWs;\n if (trailingWs.length > 0) {\n solutionManager.startPosition = locationFactory.position(\n solutionManager.startPosition.line,\n solutionManager.startPosition.character - trailingWs.length\n );\n }\n\n const cancellationToken = solutionManager.getCancellationToken();\n const ourRequestId = uuid.v4();\n\n // Telemetry\n solutionManager.savedTelemetryData = TelemetryData.createAndMarkAsIssued(\n {\n headerRequestId: ourRequestId,\n languageId: document.languageId,\n source: completionTypeToString(solutionManager.completionContext.completionType),\n },\n {\n ...telemetrizePromptLength(prompt),\n solutionCount: solutionManager.solutionCountTarget,\n promptEndPos: document.offsetAt(insertPosition),\n }\n );\n\n solutionsLogger.info(ctx, `prompt: ${JSON.stringify(prompt)}`);\n solutionsLogger.debug(ctx, `prependToCompletion: ${prependToCompletion}`);\n\n telemetry(ctx, 'solution.requested', solutionManager.savedTelemetryData);\n // Compute this only once\n const blockMode = await ctx.get(BlockModeConfig).forLanguage(ctx, document.languageId);\n const isSupportedLanguage = isSupportedLanguageId(document.languageId);\n\n const contextIndent = contextIndentation(document, insertPosition);\n const postOptions: PostOptions = {\n stream: true,\n extra: {\n language: document.languageId,\n next_indent: contextIndent.next ?? 0,\n prompt_tokens: prompt.prefixTokens ?? 0,\n suffix_tokens: prompt.suffixTokens ?? 0,\n },\n };\n if (blockMode === 'parsing' && !isSupportedLanguage) {\n postOptions['stop'] = ['\\n\\n', '\\r\\n\\r\\n'];\n }\n\n const repoInfo = extractRepoInfoInBackground(ctx, document.fileName);\n const completionParams = {\n prompt,\n languageId: document.languageId,\n repoInfo,\n ourRequestId,\n engineUrl: await getEngineURL(\n ctx,\n tryGetGitHubNWO(repoInfo),\n document.languageId,\n getDogFood(repoInfo),\n await getUserKind(ctx),\n solutionManager.savedTelemetryData\n ),\n count: solutionManager.solutionCountTarget,\n uiKind: CopilotUiKind.Panel,\n postOptions,\n requestLogProbs: true,\n };\n\n let finishedCb: FinishedCallback;\n\n // This is used only by the tree-sitter based parsing,\n // in case of a completion type which requires prepending a suggestion.\n // Since the typescript plugin always decides to put the\n // function it implements at the beginning of the empty line\n // indentation mode just works fine out-of-the-box without any additional context.\n const completionParsingCtx: CompletionParsingContext = solutionManager.completionContext.completionType;\n\n switch (blockMode) {\n case BlockMode.Server:\n // Client knows the block is done when the completion is.\n finishedCb = async text => undefined;\n // If requested at the top-level, don't trim at all.\n postOptions.extra!.force_indent = contextIndent.prev ?? -1;\n postOptions.extra!.trim_by_indentation = true;\n break;\n case BlockMode.ParsingAndServer:\n finishedCb = isSupportedLanguage\n ? parsingBlockFinished(ctx, document, solutionManager.startPosition, completionParsingCtx)\n : async text => undefined;\n // If requested at the top-level, don't trim at all.\n postOptions.extra!.force_indent = contextIndent.prev ?? -1;\n postOptions.extra!.trim_by_indentation = true;\n break;\n case BlockMode.Parsing:\n default:\n finishedCb = isSupportedLanguage\n ? parsingBlockFinished(ctx, document, solutionManager.startPosition, completionParsingCtx)\n : async text => undefined;\n break;\n }\n\n ctx.get(StatusReporter).setProgress();\n\n const res = await ctx\n .get(OpenAIFetcher)\n .fetchAndStreamCompletions(\n ctx,\n completionParams,\n TelemetryData.createAndMarkAsIssued(),\n finishedCb,\n cancellationToken\n );\n\n if (res.type === 'failed' || res.type === 'canceled') {\n solutionManager.reportCancelled();\n ctx.get(StatusReporter).removeProgress();\n return {status: 'FinishedWithError', error: `${res.type}: ${res.reason}`};\n }\n\n let choices: AsyncIterable = res.choices;\n // NOTE: Even without prepend strings this will clean up the ending of the completion text\n choices = prependChoices(choices, prependToCompletion);\n if (indentation !== null) {\n choices = cleanupIndentChoices(choices, indentation);\n }\n choices = asyncIterableMapFilter(choices, async choice =>\n postProcessChoice(\n ctx,\n 'solution',\n document,\n insertPosition,\n choice,\n /*isMiddleOfTheLineSuggestion=*/ false,\n solutionsLogger\n )\n );\n\n const solutions = asyncIterableMapFilter(choices, async (apiChoice: APIChoice) => {\n let display = apiChoice.completionText;\n solutionsLogger.info(ctx, `Open Copilot completion: [${apiChoice.completionText}]`);\n\n // For completions that can happen in any location in the middle of the code we try to find the existing code\n // that should be displayed in the OpenCopilot panel so the code is nicely formatted/highlighted.\n // This is not needed for implement unknown function quick fix, as it will be\n // always \"complete\" standalone function in the location suggested by TS' extension.\n if (solutionManager.completionContext.completionType === CompletionType.OPEN_COPILOT) {\n let displayBefore = '';\n const displayStartPos = await getNodeStart(ctx, document, insertPosition, apiChoice.completionText);\n\n //Try to get the range/text of the scope\n if (displayStartPos) {\n [displayBefore] = trimLastLine(\n document.getText(\n locationFactory.range(\n locationFactory.position(displayStartPos.line, displayStartPos.character),\n insertPosition\n )\n )\n );\n } else {\n //If we can't get the range/text of the scope, we use the text from current line before the replace range\n const displayStartPos = locationFactory.position(insertPosition.line, 0);\n displayBefore = document.getText(locationFactory.range(displayStartPos, insertPosition));\n }\n\n display = displayBefore + display;\n }\n let completionText = apiChoice.completionText;\n\n if (trailingWs.length > 0 && completionText.startsWith(trailingWs)) {\n completionText = completionText.substring(trailingWs.length);\n }\n\n const meanLogProb = apiChoice.meanLogProb;\n const meanProb: number = meanLogProb !== undefined ? Math.exp(meanLogProb) : 0;\n const docVersion = (await solutionManager.getDocument()).version;\n\n const solution: UnformattedSolution = {\n displayText: display,\n meanProb: meanProb,\n meanLogProb: meanLogProb || 0,\n completionText: completionText,\n requestId: apiChoice.requestId,\n choiceIndex: apiChoice.choiceIndex,\n prependToCompletion: prependToCompletion,\n docVersion: docVersion,\n };\n return solution;\n });\n // deliberately not awaiting so that we can return quickly\n const solutionsStream = generateSolutionsStream(\n ctx.get(StatusReporter),\n cancellationToken,\n solutions[Symbol.asyncIterator]()\n );\n return solutionsStream;\n}\n\nasync function generateSolutionsStream(\n statusReporter: StatusReporter,\n cancellationToken: ICancellationToken,\n solutions: AsyncIterator\n): Promise {\n if (cancellationToken.isCancellationRequested) {\n statusReporter.removeProgress();\n return {status: 'FinishedWithError', error: 'Cancelled'};\n }\n const nextResult = await solutions.next();\n if (nextResult.done === true) {\n statusReporter.removeProgress();\n return {status: 'FinishedNormally'};\n }\n return {\n status: 'Solution',\n solution: nextResult.value,\n next: generateSolutionsStream(statusReporter, cancellationToken, solutions),\n };\n}\n","import {LRUCacheMap} from './common/cache';\nimport {ITextDocument} from './textDocument';\n\nconst MAX_NUM_FILES = 100;\n\ninterface IDocHistory {\n uri: string;\n doc: ITextDocument;\n clickCount: number;\n lastClickTime: number;\n}\n/**\n * Used to maintain the cursor history. It has the following data structures:\n * `lineCursorHistory`: file uri -> line number -> number of times focused on this line number\n * `fileCursorHistory`: file uri -> uri, doc, number of clicks, last click time\n */\nexport class CursorHistoryManager {\n public lineCursorHistory: LRUCacheMap>;\n private fileCursorHistory: LRUCacheMap;\n\n public constructor() {\n this.lineCursorHistory = new LRUCacheMap>(MAX_NUM_FILES);\n this.fileCursorHistory = new LRUCacheMap(MAX_NUM_FILES);\n }\n\n /**\n * Add a cursor changed event, incrementing `lineCursorHistory` and `fileCursorClickCount` and updating the `fileCursorLastClickTime` to be this most recent time.\n * @param doc\n * @param line\n * @param timestamp\n */\n public add(doc: ITextDocument, line: number, timestamp: number) {\n const uri = doc.uri.toString();\n\n const singleFile = this.lineCursorHistory.get(uri) ?? new Map();\n const numFocused = singleFile.get(line) ?? 0;\n singleFile.set(line, numFocused + 1);\n this.lineCursorHistory.set(uri, singleFile);\n\n this.fileCursorHistory.set(uri, {\n uri: uri,\n doc: doc,\n clickCount: (this.fileCursorHistory.get(uri)?.clickCount ?? 0) + 1,\n lastClickTime: timestamp,\n });\n }\n\n private getDocs() {\n const docs: IDocHistory[] = [];\n for (const key of this.fileCursorHistory.keys()) {\n const docTime = this.fileCursorHistory.get(key);\n if (docTime !== undefined) {\n docs.push(docTime);\n }\n }\n return docs;\n }\n\n /**\n * Get the sorted docs by the last click time.\n * @returns\n */\n public sortedDocsByClickTime() {\n const docs: IDocHistory[] = this.getDocs();\n return docs.sort((a, b) => b.lastClickTime - a.lastClickTime).map(f => f.doc);\n }\n\n /**\n * Get the sorted docs by the number of clicks.\n * @returns\n */\n public sortedDocsByClickCount() {\n const docs: IDocHistory[] = this.getDocs();\n return docs\n .sort((a, b) =>\n b.clickCount === a.clickCount ? b.lastClickTime - a.lastClickTime : b.clickCount - a.clickCount\n )\n .map(f => f.doc);\n }\n}\n","import {Context} from './context';\nimport {isAbortError} from './networking';\nimport * as telemetry from './telemetry';\nimport {redactHomeDir} from './util/pathRedaction';\n\nexport function handleException(ctx: Context, err: Error, origin: string) {\n if (isAbortError(err)) {\n // ignore cancelled fetch requests\n return true;\n }\n console.error(origin, err);\n telemetry.telemetryException(ctx, err, origin);\n\n // Also log the exception as an error.\n\n // send a placeholder to standard (\"insecure\") telemetry\n telemetry.telemetryError(\n ctx,\n origin,\n telemetry.TelemetryData.createAndMarkAsIssued({\n origin: origin,\n reason: `${err.name ?? 'unknown'} logged to restricted telemetry`,\n }),\n false /* not secure */\n );\n // and the real error, which contain arbitrary data, e.g. by coming from another VSCode extension\n // or by including a stack trace or other user content, to restricted (\"secure\") telemetry\n telemetry.telemetryError(\n ctx,\n origin,\n telemetry.TelemetryData.createAndMarkAsIssued({\n origin: origin,\n reason: redactHomeDir(err.stack ?? err.toString()),\n }),\n true /* secure */\n );\n}\n\nexport function registerDefaultHandlers(ctx: Context) {\n // Log unhandled exceptions\n process.addListener('uncaughtException', err => {\n handleException(ctx, err, 'uncaughtException');\n });\n let isHandlingRejection = false;\n process.addListener('unhandledRejection', (reason: any) => {\n // avoid sending telemetry in avoid endless loop if telemetry is not working\n if (isHandlingRejection) {\n return;\n }\n try {\n isHandlingRejection = true;\n\n if (reason instanceof Error) {\n handleException(ctx, reason, 'unhandledRejection');\n return;\n }\n\n console.error('unhandledRejection', reason.toString());\n\n // send a placeholder to standard (\"insecure\") telemetry\n telemetry.telemetryError(\n ctx,\n 'unhandledRejection',\n telemetry.TelemetryData.createAndMarkAsIssued({\n origin: 'unhandledRejection',\n reason: 'Unhandled rejection logged to restricted telemetry',\n }),\n false /* not secure */\n );\n // and the real error, which contain arbitrary data, e.g. by coming from another VSCode extension\n // or by including a stack trace or other user content, to restricted (\"secure\") telemetry\n telemetry.telemetryError(\n ctx,\n 'unhandledRejection',\n telemetry.TelemetryData.createAndMarkAsIssued({\n origin: 'unhandledRejection',\n reason: reason.toString(),\n }),\n true /* secure */\n );\n } finally {\n isHandlingRejection = false;\n }\n });\n}\n","import {LRUCacheMap} from './common/cache';\nimport {Context} from './context';\nimport {CursorHistoryManager} from './cursorHistoryManager';\nimport {ITextDocument} from './textDocument';\nimport {TextDocumentManager} from './textDocumentManager';\n\n/**\n * A map from the string representation of a document URI to its last access time in ms since the\n * epoch.\n */\nexport const accessTimes: LRUCacheMap = new LRUCacheMap();\n\n/**\n * Returns a copy of `docs` sorted by access time, from most to least recent.\n */\nexport function sortByAccessTimes(docs: readonly ITextDocument[]): ITextDocument[] {\n return [...docs].sort((a, b) => {\n const aAccessTime = accessTimes.get(a.uri.toString()) ?? 0;\n const bAccessTime = accessTimes.get(b.uri.toString()) ?? 0;\n return bAccessTime - aAccessTime;\n });\n}\n\n/**\n * Registers a listener on the `window.onDidChangeActiveTextEditor` event that records/updates the\n * access time of the document.\n */\nexport const registerDocumentTracker = (ctx: Context) =>\n ctx.get(TextDocumentManager).onDidFocusTextDocument(e => {\n if (e) {\n accessTimes.set(e.document.uri.toString(), Date.now());\n }\n });\n\nexport const cursorHistoryManager = new CursorHistoryManager();\n\n/**\n * Registers a listener on the `window.onDidChangeTextEditorSelection` event that records the\n * cursor position of each document.\n */\nexport const registerCursorTracker = (ctx: Context) =>\n ctx.get(TextDocumentManager).onDidChangeCursor(e => {\n if (e && e.selections) {\n for (const selection of e.selections) {\n cursorHistoryManager.add(e.textEditor.document, selection.anchor.line, Date.now());\n cursorHistoryManager.add(e.textEditor.document, selection.active.line, Date.now());\n }\n }\n });\n","import {CopilotTokenNotifier} from '../auth/copilotTokenNotifier';\nimport {Context} from '../context';\nimport {Logger, LogLevel} from '../logger';\nimport {NotificationSender} from '../notificationSender';\nimport {UrlOpener} from '../util/opener';\n\nconst CERTIFICATE_ERRORS = ['UNABLE_TO_VERIFY_LEAF_SIGNATURE', 'CERT_SIGNATURE_FAILURE'];\n\nexport class UserErrorNotifier {\n private readonly notifiedErrorCodes: string[] = [];\n private supportsSSC: boolean | undefined;\n\n constructor(ctx: Context) {\n ctx.get(CopilotTokenNotifier).on('onCopilotToken', token => {\n this.supportsSSC = token.getTokenValue('ssc') === '1';\n });\n }\n\n async notifyUser(ctx: Context, error: any) {\n if (CERTIFICATE_ERRORS.includes(error.code) && !this.didNotifyBefore(error.code)) {\n this.displayCertificateErrorNotification(ctx, error);\n this.notifiedErrorCodes.push(error.code);\n }\n }\n\n private displayCertificateErrorNotification(ctx: Context, err: any) {\n const learnMoreLink = 'https://aka.ms/copilot-ssc';\n const errorMsg = this.certificateErrorMessage();\n new Logger(LogLevel.ERROR, 'certificates').error(\n ctx,\n `${errorMsg} Please visit ${learnMoreLink} to learn more. Original cause: ${JSON.stringify(err)}`\n );\n this.showCertificateWarningMessage(ctx, errorMsg, learnMoreLink);\n }\n\n private certificateErrorMessage(): string {\n if (this.supportsSSC === undefined) {\n return `The proxy connection couldn't be established due to an untrusted self-signed certificate, or your Copilot license might not support their use.`;\n } else if (this.supportsSSC) {\n return `Your proxy connection requires a trusted certificate. Please make sure the proxy certificate and any issuers are configured correctly to support self-signed certificates.`;\n } else {\n return `Your current Copilot license doesn't support proxy connections with self-signed certificates.`;\n }\n }\n\n private showCertificateWarningMessage(ctx: Context, errorMsg: string, learnMoreLink: string) {\n const learnMoreAction = {title: 'Learn more'};\n // intentionally avoid 'await' because showWarningMessage is blocking\n ctx.get(NotificationSender)\n .showWarningMessage(errorMsg, learnMoreAction)\n .then(userResponse => {\n if (userResponse?.title === learnMoreAction.title) {\n ctx.get(UrlOpener).open(learnMoreLink);\n }\n });\n }\n\n private didNotifyBefore(code: any) {\n return this.notifiedErrorCodes.indexOf(code) !== -1;\n }\n}\n","import {BuildInfo, ConfigKey, EditorAndPluginInfo, EditorSession, getConfig} from '../config';\nimport {Context} from '../context';\nimport {LogLevel, Logger} from '../logger';\nimport {Features} from './features';\nimport {Filter, TargetPopulation} from './filters';\n\nexport const logger = new Logger(LogLevel.INFO, 'Exp');\n\nexport abstract class EditorExperimentFilters {\n abstract addEditorSpecificFilters(): Partial>;\n}\n\nexport function setupExperimentationService(ctx: Context) {\n const features = ctx.get(Features);\n features.registerStaticFilters(createAllFilters(ctx));\n features.registerDynamicFilter(Filter.CopilotOverrideEngine, () => getConfig(ctx, ConfigKey.DebugOverrideEngine));\n}\n\nfunction createAllFilters(ctx: Context): Partial> {\n const defaultFilters = createDefaultFilters(ctx);\n const specificFilters = ctx.get(EditorExperimentFilters).addEditorSpecificFilters();\n return {...defaultFilters, ...specificFilters};\n}\n\nfunction createDefaultFilters(ctx: Context): Partial> {\n const buildInfo = ctx.get(BuildInfo);\n const editorInfo = ctx.get(EditorAndPluginInfo).getEditorInfo();\n const editorSession = ctx.get(EditorSession);\n return {\n [Filter.ApplicationVersion]: trimVersionSuffix(editorInfo.version),\n [Filter.ClientId]: editorSession.machineId,\n [Filter.ExtensionName]: buildInfo.getName(),\n [Filter.ExtensionVersion]: trimVersionSuffix(buildInfo.getVersion()),\n [Filter.TargetPopulation]: TargetPopulation.Public,\n };\n}\n\nfunction trimVersionSuffix(version: string): string {\n return version.split('-')[0];\n}\n","import {Context} from '../context';\nimport {TelemetryData, telemetryExpProblem} from '../telemetry';\nimport {ExpServiceTelemetryNames} from './telemetryNames';\n\n// All variables we pull from Exp and might want to use\n// Note that the Exp flags are theoretically visible to the user.\n// ?? Should these be alphabetized?\n// ?? Should options for completed experiments be removed?\nexport enum ExpTreatmentVariables {\n AA = 'copilotaa', // test experiment\n CustomEngine = 'copilotcustomengine', // the engine we want to request, used in actual experiment(s)\n Fetcher = 'copilotfetcher',\n OverrideBlockMode = 'copilotoverrideblockmode',\n FastCancellation = 'copilotoverridefastcancellation', // whether to cancel request when all choices are trimmed\n OverrideNumGhostCompletions = 'copilotoverridednumghostcompletions',\n SuffixPercent = 'CopilotSuffixPercent', // the percentage of the prompt tokens to allocate to the suffix\n BeforeRequestWaitMs = 'copilotlms', // the amount of time to wait before requesting a completion\n NeighboringTabsOption = 'copilotneighboringtabs', // the option for the neighboring tabs experiment\n NumberOfSnippets = 'copilotnumberofsnippets', // the number of snippets of all the snippets from different sources\n NeighboringSnippetTypes = 'copilotneighboringsnippettypes', // the option of using code snippets or functions for neighboring tabs.\n DebounceMs = 'copilotdebouncems', // the amount of time to debounce, this is different than waiting before a request\n DebouncePredict = 'copilotdebouncepredict', // whether to use predicted value for debounce limit\n ContextualFilterEnable = 'copilotcontextualfilterenable', // whether to use contextual filter\n ContextualFilterEnableTree = 'copilotcontextualfilterenabletree', // whether to use tree model for contextual filter\n ContextualFilterAcceptThreshold = 'copilotcontextualfilteracceptthreshold', // cancel requests below this threshold\n ContextualFilterExplorationTraffic = 'copilotcontextualfilterexplorationtraffic', // percentage of exploration traffic\n RequestMultilineExploration = 'copilotrequestmultilineexploration', // whether to explore over multiline request\n disableLogProb = 'copilotdisablelogprob', // disable logprobs\n DropCompletionReasons = 'copilotdropcompletionreasons', // comma-separated list of finish_reason values that make us drop the whole completion\n SymbolDefinitionStrategy = 'copilotsymboldefinitionstrategy', // whether to use symbol definitions in the prompt\n CursorContextFix = 'copilotcursorcontextfix', // choose getCursorContext implementation, fix for neighbouring tabs incorrect context\n\n // granularity specification\n GranularityTimePeriodSizeInH = 'copilottimeperiodsizeinh', // number of hours after which assignments should change (can be fractional, 0 for no change)\n GranularityByCallBuckets = 'copilotbycallbuckets', // number of buckets for simulating by call, 0 for not simulating by call\n SuffixStartMode = 'copilotsuffixstartmode', // the mode where should suffix start\n SuffixMatchThreshold = 'copilotsuffixmatchthreshold', // the threshold that new suffix should match with old suffix\n FimSuffixLengthThreshold = 'copilotfimsuffixlenthreshold', // the suffix length threshold beyond which we will construct FIM requests\n MultiLogitBias = 'copilotlbeot', // whether EOT tokens should be suppressed for multiline completions\n TokenizerName = 'copilottokenizername', // the name of tokenizer used in prompt\n IndentationMinLength = 'copilotindentationminlength', // the minimum length of matching snippet in IndentationBasedJaccardMatcher\n IndentationMaxLength = 'copilotindentationmaxlength', // the maximum length of matching snippet in IndentationBasedJaccardMatcher\n\n /** Percent of prompt space reserved to snippets, e.g. neighbouring tabs.\n * Integer */\n SnippetPercent = 'snippetpercent',\n\n NeighboringFileType = 'copilotneighboringfiletype', // if add open files to the cursor focused files list\n CursorSnippetsPickingStrategy = 'cursorsnippetspickingstrategy', // how to pick snippets for CursorHistoryMatcher\n WorkspaceStrategy = 'copilotworkspacestrategy', // if add workspace files to the prompt crafting candidate pool\n\n // Retrieval\n /** Whether to use retrieval or not, boolean */\n RetrievalStrategy = 'retrieval',\n RetrievalServerRoute = 'retrievalserverroute', // chooses which retrieval implementation route to use\n\n MaxPromptCompletionTokens = 'maxpromptcompletionTokens', // the maximum tokens of the prompt and completion\n\n // Hybrid inference\n HybridInference = 'hybridinference', // hybrid inference experiment\n HybridInferenceThreshold = 'hybridinferencethreshold', // optional confidence threshold for the routing model (below threshold: use Copilot, above: use GPT-C). If the threshold is -1.0, use the default threshold that comes with the routing model package.\n}\n\nexport type ExpTreatmentVariableValue = boolean | string | number;\n\nexport class ExpConfig {\n variables: Partial>; // for the 'vscode' config\n assignmentContext: string; // semicolon-separated list of flights\n features: string; // semicolon-separated feature IDs\n\n constructor(\n variables: Partial>,\n assignmentContext: string,\n features: string\n ) {\n this.variables = variables;\n this.assignmentContext = assignmentContext;\n this.features = features;\n }\n\n static createFallbackConfig(ctx: Context, reason: string): ExpConfig {\n telemetryExpProblem(ctx, {reason});\n return this.createEmptyConfig();\n }\n\n static createEmptyConfig() {\n return new ExpConfig({}, '', '');\n }\n\n /**\n * Adds (or overwrites) the given experiment config to the telemetry data.\n * @param telemetryData telemetryData object. If previous ExpConfigs are already present, they will be overwritten.\n */\n addToTelemetry(telemetryData: TelemetryData): void {\n telemetryData.properties[ExpServiceTelemetryNames.featuresTelemetryPropertyName] = this.features;\n telemetryData.properties[ExpServiceTelemetryNames.assignmentContextTelemetryPropertyName] =\n this.assignmentContext;\n }\n}\n","import {\n CursorSnippetsPickingStrategy,\n DEFAULT_NUM_OF_SNIPPETS,\n NeighboringSnippetType,\n NeighboringTabsOption,\n SuffixStartMode,\n TokenizerName,\n} from '@github/copilot-promptlib';\nimport {Clock} from '../clock';\nimport {LRUCacheMap} from '../common/cache';\nimport {BlockMode, ConfigKey, EditorSession, getConfig} from '../config';\nimport {Context} from '../context';\nimport {\n contextualFilterAcceptThreshold,\n contextualFilterExplorationTraffic,\n} from '../ghostText/contextualFilterConstants';\nimport {NeighboringFileType} from '../prompt/neighborFiles/neighborFiles';\nimport {TelemetryData} from '../telemetry';\nimport {ExpConfig, ExpTreatmentVariableValue, ExpTreatmentVariables} from './expConfig';\nimport {ExpConfigMaker} from './fetchExperiments';\nimport {Filter, FilterSettings} from './filters';\nimport {GranularityDirectory} from './granularityDirectory';\n\n/** Cache of ExpConfigs by FilterSettings. When asked for a combination of\n * filters not in the cache it will fetch the values from the treatment\n * assignment service. If calling TAS errors out, future fetches will try again.\n */\nclass FilterSettingsToExpConfigs {\n private readonly cache = new LRUCacheMap>(200);\n\n constructor(private readonly ctx: Context) {}\n\n async fetchExpConfig(settings: FilterSettings): Promise {\n let task = this.cache.get(settings.stringify());\n if (!task) {\n task = new Task(\n () => this.ctx.get(ExpConfigMaker).fetchExperiments(this.ctx, settings.toHeaders()),\n 1000 * 60 * 60 // keep cached result only for 1 hour\n );\n this.cache.set(settings.stringify(), task);\n }\n return task.run();\n }\n\n getCachedExpConfig(settings: FilterSettings): ExpConfig | undefined {\n const task = this.cache.get(settings.stringify());\n return task?.value();\n }\n}\n\n/**\n * This helper allows you to perform some async operation and keep track of\n * whether it's still ongoing, so in case someone wants to perform it again (and\n * get a Promise for its completion) the same ongoing promise can be reused.\n *\n * If fetching fails, the next call to `run()` will try again. But a single\n * successful fetch will be cached for as long as specified by expirationMs\n * (default: forever).\n */\nexport class Task {\n private promise: Promise | undefined;\n private result: T | undefined;\n\n constructor(private readonly producer: () => Promise, private readonly expirationMs: number = Infinity) {}\n\n /**\n * Perform the operation if there's no ongoing one, otherwise return the\n * ongoing one.\n */\n async run(): Promise {\n if (this.promise === undefined) {\n this.promise = this.producer();\n // Not awaiting the promise so it doesn't block.\n this.storeResult(this.promise)\n // then wait expirationMs before removing the result from the cache again\n .then(() => {\n if (this.expirationMs < Infinity && this.promise !== undefined) {\n setTimeout(() => (this.promise = undefined), this.expirationMs);\n }\n });\n }\n return this.promise;\n }\n\n private async storeResult(promise: Promise) {\n try {\n this.result = await promise;\n } finally {\n if (this.result === undefined) {\n this.promise = undefined; // So this task can be tried again.\n }\n }\n }\n\n value(): T | undefined {\n return this.result;\n }\n}\n\nexport type FeaturesFilterArgs = {\n repoNwo: string;\n fileType: string;\n userKind: string;\n dogFood?: string;\n telemetryData?: TelemetryData;\n};\n\n/** General-purpose API for accessing ExP variable values. */\nexport class Features {\n private staticFilters: Partial> = {};\n private dynamicFilters: Partial string>> = {};\n private upcomingDynamicFilters: Partial string>> = {};\n private assignments: FilterSettingsToExpConfigs = new FilterSettingsToExpConfigs(this.ctx);\n\n /** when peeking e.g. upcoming time buckets, delay so the real request still comes first\n */\n private static upcomingDynamicFilterCheckDelayMs = 20;\n\n /** Fetch upcoming time buckets at or after X minutes before the hour\n * Spread the requests out over a few seconds to avoid TAS rate limiting.\n */\n private static upcomingTimeBucketMinutes = 5 + Math.floor(Math.random() * 11);\n\n /**\n * A directoy of granularities for given filter values.\n * The Granularity Directory will expect to prefix time based values\n * (by call or by time bucket) with the user name.\n */\n granularityDirectory: GranularityDirectory | undefined;\n\n constructor(private readonly ctx: Context) {}\n\n /**\n * The given filter values will be included in all TAS requests unless\n * overridden.\n */\n registerStaticFilters(filters: Partial>) {\n Object.assign(this.staticFilters, filters);\n }\n\n /**\n * The given generator will populate the given filter value for all TAS\n * requests unless overridden.\n */\n registerDynamicFilter(filter: Filter, generator: () => string) {\n this.dynamicFilters[filter] = generator;\n }\n\n private getDynamicFilterValues(): Partial> {\n const values: Partial> = {};\n for (const [filter, generator] of Object.entries(this.dynamicFilters)) {\n values[filter as Filter] = generator();\n }\n return values;\n }\n\n /**\n * When populating for given filter values, will also populate for the\n * same filter values with this one changed to the value of the generator.\n * Allows e.g. pre-fetching for the next time bucket.\n *\n * All upcoming overwrites are independent and will not be combined,\n * i.e. if current filter values are {A: 1, B: 2},\n * and the upcoming values are A: 3, A: 4, and B: 5,\n * then the upcoming fetches are {A: 3, B: 2}, {A: 4, B: 2}, and {A: 3, B: 5}.\n */\n registerUpcomingDynamicFilter(filter: Filter, generator: () => string) {\n this.upcomingDynamicFilters[filter] = generator;\n }\n\n /**\n * Central logic for obtaining the assignments of treatment groups\n * for a given set of filters (i.e. descriptors of who is getting the treatment).\n *\n * It is called with a stub set of filters, e.g. \"repo: github/github, language: ruby\".\n * But it adds many of its own.\n * At first the general background filters like extension version.\n * Then it will check ExP assignments for the first time, to find out\n * whether there are any assignments of a special granularity\n * (i.e. the concept that we want to redraw assignments based on\n * time bucket, or checksum of time, etc).\n *\n * It will use the granularity directory to extend filters,\n * and get assignments again.\n *\n * If the granularity directory specifies further assignments to be imminent,\n * these will be pre-fetched in the background.\n *\n * On most calls to this function, the assignment fetches will be the\n * assignments from previously used filters, so they will be cached and return fast.\n *\n * @param feature: The name of the treatment to fetch. E.g. could be \"background colour\",\n * to which a possible assignment could be \"red\".\n * @param requestFilters: The core filters to use for the request. E.g. could be \"language: Java\".\n * Additional filters pertaining to the client (e.g. extension version) and grauliarty\n * will be added by the function.\n * @param telemetryData If provided, the filter values and treatment assignments\n * (all, not just the requested variable) will be frozen to telemetry. If any\n * previous assignments are there, they will be overwritten.\n * Every telemetry data that gets sent and corresponds to an experiment\n * should be included in a call to getAssignment so that it can be interpreted\n * as part of the experiment by ExP.\n * A different call to getAssignment is safe only if treatment assignments\n * are not anticipated to change. E.g. if you have an experiment assigning\n * model engine which has a granularity of by-call, and an experiment assigning\n * temperature which has a granularity of by-user, include the telemetryData\n * in the call to get the model engine.\n * */\n private async getAssignment(\n feature: ExpTreatmentVariables,\n requestFilters: Partial> = {},\n telemetryData?: TelemetryData\n ): Promise {\n const granularityDirectory = this.getGranularityDirectory();\n const preGranularityFilters = this.makeFilterSettings(requestFilters);\n const rememberedGranularityExtension = granularityDirectory.extendFilters(preGranularityFilters);\n const expAccordingToRememberedExtension = await this.getExpConfig(\n rememberedGranularityExtension.newFilterSettings\n );\n granularityDirectory.update(\n preGranularityFilters,\n +(expAccordingToRememberedExtension.variables[ExpTreatmentVariables.GranularityByCallBuckets] ?? NaN),\n +(expAccordingToRememberedExtension.variables[ExpTreatmentVariables.GranularityTimePeriodSizeInH] ?? NaN)\n );\n\n // if this was the first call with these filter settings,\n // the granularity directory may not yet have known that a higher granularity is needed\n // if so, fetch again. if not, current == remembered, and these calls will just recall the same\n const currentGranularityExtension = granularityDirectory.extendFilters(preGranularityFilters);\n const filters = currentGranularityExtension.newFilterSettings;\n const exp = await this.getExpConfig(filters);\n\n // pre-fetch others in background\n let backgroundQueue = new Promise(resolve => setTimeout(resolve, Features.upcomingDynamicFilterCheckDelayMs));\n for (const upcomingFilter of currentGranularityExtension.otherFilterSettingsToPrefetch) {\n backgroundQueue = backgroundQueue.then(async () => {\n await new Promise(resolve => setTimeout(resolve, Features.upcomingDynamicFilterCheckDelayMs));\n this.getExpConfig(upcomingFilter);\n });\n }\n\n // Prefetch assignments for filter sets we're likely to see in the future.\n // Explicitly not awaiting this so it's done asynchronously later.\n this.prepareForUpcomingFilters(filters);\n\n if (telemetryData) {\n telemetryData.filtersAndExp = {exp, filters};\n }\n return exp.variables[feature] as T | undefined;\n }\n\n getGranularityDirectory(): GranularityDirectory {\n if (!this.granularityDirectory) {\n const machineId = this.ctx.get(EditorSession).machineId;\n this.granularityDirectory = new GranularityDirectory(machineId, this.ctx.get(Clock));\n }\n return this.granularityDirectory;\n }\n\n private makeFilterSettings(requestFilters: Partial>): FilterSettings {\n return new FilterSettings({\n ...this.staticFilters,\n ...this.getDynamicFilterValues(),\n ...requestFilters,\n });\n }\n\n /** Get the entries from this.assignments corresponding to given settings. */\n private async getExpConfig(settings: FilterSettings): Promise {\n try {\n return this.assignments.fetchExpConfig(settings);\n } catch (e) {\n return ExpConfig.createFallbackConfig(this.ctx, `Error fetching ExP config: ${e}`);\n }\n }\n\n /**\n * Get assignments based on given filter settings, but with overrides based\n * on this.upcomingDynamicFilters applied separately with a delay in between\n * calls. Queried values are added to this.assignments.\n */\n private async prepareForUpcomingFilters(filters: FilterSettings) {\n // if it is greater than upcoming time bucket minutes before the hour, just return\n // to avoid prefetching treatments that might not be used\n if (new Date().getMinutes() < 60 - Features.upcomingTimeBucketMinutes) {\n return;\n }\n for (const [filter, generator] of Object.entries(this.upcomingDynamicFilters)) {\n await new Promise(resolve => setTimeout(resolve, Features.upcomingDynamicFilterCheckDelayMs));\n this.getExpConfig(filters.withChange(filter as Filter, generator()));\n }\n }\n\n /**\n * @returns stringified assignments for default / empty filters only\n */\n stringify(): string {\n const defaultExpConfig = this.assignments.getCachedExpConfig(new FilterSettings({}));\n return JSON.stringify(defaultExpConfig?.variables ?? {});\n }\n\n /** Get the entries from this.assignments corresponding to given settings. */\n async addExpAndFilterToTelemetry(telemetryData: TelemetryData): Promise {\n const filters = this.makeFilterSettings({});\n telemetryData.filtersAndExp = {filters, exp: await this.getExpConfig(filters)};\n }\n\n /**\n * Functions below this point use getAssignment to fetch feature flags from ExP.\n * We divide them into two sections based on whether they require parameters or not.\n * Due to the propensity of making mistakes in passing parameters, we pass them through\n * object destructuring, allowing for optional ones as well.\n *\n * ⚠️ No new experiments should be created without filters.\n */\n\n /** Functions without arguments */\n\n /** @returns the debounceMs, or 0 if none is set. */\n async debounceMs(): Promise {\n return (await this.getAssignment(ExpTreatmentVariables.DebounceMs)) ?? 0;\n }\n\n /** @returns true if we want to use predicted debounce limit, false otherwise */\n async debouncePredict(): Promise {\n return (await this.getAssignment(ExpTreatmentVariables.DebouncePredict)) ?? false;\n }\n\n /** @returns true if we want to enable contextual filter, false otherwise. default true */\n async contextualFilterEnable(): Promise {\n return (await this.getAssignment(ExpTreatmentVariables.ContextualFilterEnable)) ?? true;\n }\n\n /** @returns true if we want to enable tree model for contextual filter, false otherwise. default true */\n async contextualFilterEnableTree(): Promise {\n return (await this.getAssignment(ExpTreatmentVariables.ContextualFilterEnableTree)) ?? true;\n }\n\n /** @returns the threshold (in percent) to use for contextual filter, or 15 (default) if none is set.\n * ExP doesn't support float value assignments. Percentage values for treatment variables should be set as integers.\n */\n async contextualFilterAcceptThreshold(): Promise {\n return (\n (await this.getAssignment(ExpTreatmentVariables.ContextualFilterAcceptThreshold)) ??\n contextualFilterAcceptThreshold\n );\n }\n\n /** @the exploration traffic (in percent) to use for contextual filter.\n * ExP doesn't support float value assignments. Percentage values for treatment variables should be set as integers.\n */\n async contextualFilterExplorationTraffic(): Promise {\n return (\n (await this.getAssignment(ExpTreatmentVariables.ContextualFilterExplorationTraffic)) ??\n contextualFilterExplorationTraffic\n );\n }\n\n async disableLogProb(): Promise {\n return (await this.getAssignment(ExpTreatmentVariables.disableLogProb)) ?? true;\n }\n\n /** Override for BlockMode to send in the request. */\n async overrideBlockMode(): Promise {\n return ((await this.getAssignment(ExpTreatmentVariables.OverrideBlockMode)) as BlockMode) || undefined;\n }\n\n async fastCancellation(): Promise {\n return (await this.getAssignment(ExpTreatmentVariables.FastCancellation)) ?? true;\n }\n\n /** Override for completion count to send in ghost text request. */\n async overrideNumGhostCompletions(): Promise {\n return await this.getAssignment(ExpTreatmentVariables.OverrideNumGhostCompletions);\n }\n\n /**\n * @returns the list of `finish_reason` values that should result in\n * completely dropping the completion choice.\n */\n async dropCompletionReasons(): Promise {\n const reasons = await this.getAssignment(ExpTreatmentVariables.DropCompletionReasons);\n if (!reasons) {\n return undefined;\n }\n return reasons.split(',');\n }\n\n /** Functions with arguments, passed via object destructuring */\n\n /** @returns the string for copilotcustomengine, or \"\" if none is set. */\n async customEngine({repoNwo, fileType, userKind, dogFood, telemetryData}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.CustomEngine, filters, telemetryData)) ?? '';\n }\n\n /** @returns the wait time for copilotlms, or 0 if none is set. */\n async beforeRequestWaitMs({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n telemetryData,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (\n (await this.getAssignment(ExpTreatmentVariables.BeforeRequestWaitMs, filters, telemetryData)) ?? 0\n );\n }\n\n /** @returns the value for copilotlbeot, or true if none is set. */\n async multiLogitBias({repoNwo, fileType, userKind, dogFood, telemetryData}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (\n (await this.getAssignment(ExpTreatmentVariables.MultiLogitBias, filters, telemetryData)) ?? false\n );\n }\n\n /** @returns a boolean indicating whether to explore over multiline request. */\n async requestMultilineExploration({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n telemetryData,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (\n (await this.getAssignment(\n ExpTreatmentVariables.RequestMultilineExploration,\n filters,\n telemetryData\n )) ?? false\n );\n }\n\n /** @returns the indentationMinLength, or undefined if none is set. */\n async indentationMinLength({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.IndentationMinLength, filters)) ?? undefined;\n }\n\n /** @returns the indentationMaxLength, or undefined if none is set. */\n async indentationMaxLength({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.IndentationMaxLength, filters)) ?? undefined;\n }\n\n /** @returns the percent of prompt tokens to be allocated to the suffix, or 0 if none is set. */\n async suffixPercent({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n const engineOverride = getConfig(this.ctx, ConfigKey.DebugOverrideEngine);\n\n /** We branch on engineOverride; if override engine is set, then we take suffixPercent\n * as 0. Otherwise, we take the value from the experiment.\n * Note that this might not be the correct behavior in case the overriding engine happens\n * to be a FIM engine. But this is a temporary workaround for the experiment.\n *\n * Before 11/17/2022 this default (in case engine is not overridden) was set as 0.\n * However based on the experiments in https://github.com/github/copilot-planning/issues/1658\n * we are setting the default to 15.\n */\n return engineOverride\n ? 0\n : (await this.getAssignment(ExpTreatmentVariables.SuffixPercent, filters)) ?? 15;\n }\n\n /** @returns the percentage match threshold for using the cached suffix */\n /** Before 11/17/2022 this default was set as 0. However based on the experiments in https://github.com/github/copilot-planning/issues/1658\n * we are setting the default to 10.\n */\n async suffixMatchThreshold({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.SuffixMatchThreshold, filters)) ?? 10;\n }\n\n /** @returns the suffix length threshold beyond which we will consider constructing FIM requests */\n /**\n * Before 11/17/2022 this default was set to -1. However, according to the ship decision obtained\n * on https://github.com/github/copilot-planning/issues/1658#issuecomment-1309269980 we are\n * changing the default to 0.\n */\n async fimSuffixLengthThreshold({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.FimSuffixLengthThreshold, filters)) ?? 0;\n }\n\n /** @returns the suffix start mode, return Cursor if none is set. */\n /** Before 11/17/2022 this default was set as Cursor. However based on the experiments https://github.com/github/copilot-planning/issues/1658\n * we are setting the default to CursorTrimStart.\n */\n async suffixStartMode({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n switch (await this.getAssignment(ExpTreatmentVariables.SuffixStartMode, filters)) {\n case 'cursor':\n return SuffixStartMode.Cursor;\n case 'cursortrimstart':\n return SuffixStartMode.CursorTrimStart;\n case 'siblingblock':\n return SuffixStartMode.SiblingBlock;\n case 'siblingblocktrimstart':\n return SuffixStartMode.SiblingBlockTrimStart;\n default:\n return SuffixStartMode.CursorTrimStart;\n }\n }\n\n /** @returns the name of tokenizer used in prompt */\n async tokenizerName({repoNwo, userKind}: FeaturesFilterArgs): Promise {\n const filters = {[Filter.CopilotRepository]: repoNwo, [Filter.CopilotUserKind]: userKind};\n switch (await this.getAssignment(ExpTreatmentVariables.TokenizerName, filters)) {\n case 'cushman001':\n return TokenizerName.cushman001;\n case 'cushman002':\n return TokenizerName.cushman002;\n case 'mock':\n return TokenizerName.mock;\n default:\n return TokenizerName.cushman002;\n }\n }\n\n /** @return the num of snippets from different sources, e.g., neighboring tabs, retrieval.\n * `numberOfSnippets` serves a different purpose here than the `numberOfSnippets` that is a member of `NeighborSelection` (i.e., eager, eagerButLittle)\n * `NeighborSelection.numberOfSnippets` limits the number of snippets we retrieve from the neighbor tabs,\n * while this function's return value limits the number of snippets we add to the wishlist.\n */\n async numberOfSnippets({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (\n (await this.getAssignment(ExpTreatmentVariables.NumberOfSnippets, filters)) ??\n DEFAULT_NUM_OF_SNIPPETS\n );\n }\n\n /** @returns the percent of prompt tokens to be allocated to the snippet, or 0 if none is set. */\n async snippetPercent({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.SnippetPercent, filters)) ?? 0;\n }\n\n /** @returns the percent of prompt tokens to be allocated to the suffix, or 0 if none is set. */\n async neighboringTabsOption({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n switch (await this.getAssignment(ExpTreatmentVariables.NeighboringTabsOption, filters)) {\n case 'none':\n return NeighboringTabsOption.None;\n case 'conservative':\n return NeighboringTabsOption.Conservative;\n case 'medium':\n return NeighboringTabsOption.Medium;\n case 'eager':\n return NeighboringTabsOption.Eager;\n case 'eagerbutlittle':\n return NeighboringTabsOption.EagerButLittle;\n case 'eagerbutmedium':\n return NeighboringTabsOption.EagerButMedium;\n case 'eagerbutmuch':\n return NeighboringTabsOption.EagerButMuch;\n case 'retrievalcomparable':\n return NeighboringTabsOption.RetrievalComparable;\n default:\n return NeighboringTabsOption.Eager;\n }\n }\n\n async neighboringSnippetTypes({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n switch (await this.getAssignment(ExpTreatmentVariables.NeighboringSnippetTypes, filters)) {\n case 'function':\n return NeighboringSnippetType.NeighboringFunctions;\n case 'snippet':\n return NeighboringSnippetType.NeighboringSnippets;\n case 'cursor':\n return NeighboringSnippetType.CursorHistoryMatcher;\n default:\n return NeighboringSnippetType.NeighboringSnippets;\n }\n }\n\n /** @returns the strategy of how to pick up the related files for prompt crafting. */\n async neighboringFileType({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotDogfood]: dogFood,\n };\n switch (await this.getAssignment(ExpTreatmentVariables.NeighboringFileType, filters)) {\n case 'none':\n return NeighboringFileType.None;\n case 'cursormostrecent':\n return NeighboringFileType.CursorMostRecent;\n case 'cursormostcount':\n return NeighboringFileType.CursorMostCount;\n case 'workspacesharingsamefolder':\n return NeighboringFileType.WorkspaceSharingSameFolder;\n case 'workspacesmallestpathdist':\n return NeighboringFileType.WorkspaceSmallestPathDist;\n case 'cocommitted':\n return NeighboringFileType.OpenTabsAndCocommitted;\n case 'opentabs':\n default:\n return NeighboringFileType.OpenTabs;\n }\n }\n\n /** @return the strategy of how to pick snippets for CursorHistoryMatcher. */\n async cursorSnippetsPickingStrategy({\n repoNwo,\n fileType,\n userKind,\n dogFood,\n }: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotDogfood]: dogFood,\n };\n switch (await this.getAssignment(ExpTreatmentVariables.CursorSnippetsPickingStrategy, filters)) {\n case 'cursoronly':\n return CursorSnippetsPickingStrategy.CursorOnly;\n case 'jaccardcursor':\n return CursorSnippetsPickingStrategy.JaccardCursor;\n case 'cursorjaccard':\n default:\n return CursorSnippetsPickingStrategy.CursorJaccard;\n }\n }\n\n /** @returns whether to use retrieval for prompt crafting. If true, the\n * retrieval server will be queried for retrieval snippets, given the user\n * and repo information to decide which retrieval index to use. */\n async retrievalStrategy({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.RetrievalStrategy, filters)) ?? false;\n }\n\n /** @returns the name of the retrieval server implementation to use. Current, only\n * the following values are selectable: githubnext (default), devdiv and aims.\n * For more details see:\n * - https://github.com/github/copilot/issues/3176\n * - https://github.com/github/copilot/issues/3539\n * - https://github.com/github/copilot/issues/3066\n */\n async retrievalServerRoute({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotDogfood]: dogFood,\n };\n // Return the identifier of the server route directly, as defined by the proxy.\n // See https://github.com/github/copilot-proxy/pull/1397\n switch (await this.getAssignment(ExpTreatmentVariables.RetrievalServerRoute, filters)) {\n case 'aims':\n return 'a';\n case 'devdiv':\n return 'd';\n case 'githubnext':\n default:\n return 'n';\n }\n }\n\n /** @returns whether to use symbol definitions for promptcrafting */\n async symbolDefinitionStrategy({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotDogfood]: dogFood,\n };\n\n return (await this.getAssignment(ExpTreatmentVariables.SymbolDefinitionStrategy, filters)) ?? false;\n }\n\n /** @returns the maximal number of tokens of prompt and completion. */\n async maxPromptCompletionTokens({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.MaxPromptCompletionTokens, filters)) ?? 2048;\n }\n\n /** @returns whether the fix for neighbouring tabs incorrect context is active. */\n async cursorContextFix({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.CursorContextFix, filters)) ?? false;\n }\n\n /** @returns Whether to use hybrid inference or not. */\n async hybridInference({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n return (await this.getAssignment(ExpTreatmentVariables.HybridInference, filters)) ?? false;\n }\n\n /**\n * @returns The threshold to use for the routing model used as part of hybrid inference.\n * When using the threshold value, if the confidence value returned by the routing model is < threshold,\n * use Azure-hosted models, otherwise use GPT-C. */\n async hybridInferenceThreshold({repoNwo, fileType, userKind, dogFood}: FeaturesFilterArgs): Promise {\n const filters = {\n [Filter.CopilotRepository]: repoNwo,\n [Filter.CopilotFileType]: fileType,\n [Filter.CopilotUserKind]: userKind,\n [Filter.CopilotDogfood]: dogFood,\n };\n // ExP only allows integers (not floats), so the value returned needs to be divided by 100.\n return (\n ((await this.getAssignment(ExpTreatmentVariables.HybridInferenceThreshold, filters)) ?? -100) / 100\n );\n }\n}\n","import {Context} from '../context';\nimport {Fetcher} from '../networking';\nimport {ExpConfig, ExpTreatmentVariables, ExpTreatmentVariableValue} from './expConfig';\n\nexport abstract class ExpConfigMaker {\n abstract fetchExperiments(ctx: Context, filterHeaders: Record): Promise;\n}\n\n/**\n * The ExP service is used to get the treatment variables for experiments.\n * \n * This implementation is based on the VSCode TAS module:\n * https://github.com/microsoft/tas-client/tree/main/vscode-tas-client\n * \n * Ultimately the client makes a GET against the service and it returns the assignments and other metadata. E.g.\n\n$ curl --location --request GET 'https://default.exp-tas.com/vscode/ab' \\\n> --header 'X-VSCode-ExtensionName: copilot' \\\n> --header 'X-MSEdge-ClientId: 1234567890' \\\n| jq .\n{\n \"Features\": [\n \"vsliv368\",\n \"vsreu685\",\n \"bridge0708\",\n \"bridge0723\",\n \"vsaa593\",\n \"vscop804cf\",\n \"vs360\"\n ],\n \"Flights\": {\n \"1j36\": \"vsliv368\",\n \"1j6r\": \"vsreu685\",\n \"2spg\": \"bridge0708\",\n \"2v3u\": \"bridge0723\",\n \"30jm\": \"vsaa593\",\n \"3dgo\": \"vscop804cf\",\n \"3dih\": \"vs360\"\n },\n \"Configs\": [\n {\n \"Id\": \"vscode\",\n \"Parameters\": {\n \"livesharecontinuousaa\": true,\n \"reusableLinks\": true,\n \"mindaroBinariesVersion-1.0.20210702\": \"1.0.20210708.15\",\n \"mindaroBinariesVersion-1.0.20210723\": \"1.0.20210723.6\",\n \"account-aa\": true,\n \"copilotaa\": true,\n \"copilotincludeprompt\": \"conservatively\"\n }\n }\n ],\n \"ParameterGroups\": [],\n \"FlightingVersion\": 1928,\n \"ImpressionId\": \"10C0827219194078800B2EF64326B13E\",\n \"AssignmentContext\": \"vsliv368:30146709;vsreu685:30147344;bridge0708:30335490;bridge0723:30353136;vsaa593:30376534;vscop804cf:30404767;vs360:30404995;\"\n}\n * \n * There are two additional filters, TimeBucket and Engine. TimeBucket is set to the current hour. Engine is set to the value of the DebugOverrideEngine config.\n */\n\n/**\n * Fetches the ExP experiment variable configuration corresponding to the given\n * headers. Returned promise rejects if ExP is unreachable, provides a non-2XX\n * response, or sends back JSON with an unexpected structure.\n */\nexport class ExpConfigFromTAS extends ExpConfigMaker {\n async fetchExperiments(ctx: Context, filterHeaders: Record): Promise {\n const fetcher = ctx.get(Fetcher);\n let resp;\n try {\n resp = await fetcher.fetch('https://default.exp-tas.com/vscode/ab', {\n method: 'GET',\n headers: filterHeaders,\n });\n } catch (e) {\n return ExpConfig.createFallbackConfig(ctx, `Error fetching ExP config: ${e}`);\n }\n if (!resp.ok) {\n return ExpConfig.createFallbackConfig(ctx, `ExP responded with ${resp.status}`);\n }\n const json = (await resp.json()) as ExpResponseJson;\n const vscodeConfig = json.Configs.find(c => c.Id === 'vscode') ?? {Id: 'vscode', Parameters: {}};\n const features = Object.entries(vscodeConfig.Parameters).map(([name, value]) => {\n // Based on what tas-client does in https://github.com/microsoft/tas-client/blob/2bd24c976273b671892aad99139af2c7c7dc3b26/tas-client/src/tas-client/FeatureProvider/TasApiFeatureProvider.ts#L59\n return name + (value ? '' : 'cf');\n });\n return new ExpConfig(vscodeConfig.Parameters, json.AssignmentContext, features.join(';'));\n }\n}\n\nexport class ExpConfigNone extends ExpConfigMaker {\n async fetchExperiments(ctx: Context, filterHeaders: Record): Promise {\n return ExpConfig.createEmptyConfig();\n }\n}\n\ninterface ExpResponseJson {\n Features: string[];\n Flights: Record;\n Configs: ExpConfigJson[];\n ParameterGroups: never[];\n AssignmentContext: string;\n}\n\ninterface ExpConfigJson {\n Id: string;\n Parameters: Partial>;\n}\n","import {TelemetryData} from '../telemetry';\n\n/** The filter headers that ExP knows about. */\nexport enum Filter {\n // Default VSCode filters\n\n /** The market in which the extension is distributed. */\n Market = 'X-MSEdge-Market',\n /** The corporation network. */\n CorpNet = 'X-FD-Corpnet',\n ApplicationVersion = 'X-VSCode-AppVersion',\n /** Insiders vs Stable. */\n Build = 'X-VSCode-Build',\n /** Client Id which is used as primary unit for the experimentation. */\n ClientId = 'X-MSEdge-ClientId',\n ExtensionName = 'X-VSCode-ExtensionName',\n ExtensionVersion = 'X-VSCode-ExtensionVersion',\n /** The natural language in use by VS Code */\n Language = 'X-VSCode-Language',\n /** Various levels of beta-ness. */\n TargetPopulation = 'X-VSCode-TargetPopulation',\n\n // Copilot-specific filters\n\n /** The machine ID concatenated with a 1-hour bucket. */\n CopilotClientTimeBucket = 'X-Copilot-ClientTimeBucket',\n /** The engine override value from settings, if present. */\n CopilotOverrideEngine = 'X-Copilot-OverrideEngine',\n /** Git repo info. */\n CopilotRepository = 'X-Copilot-Repository',\n /** Language of the file on which a given request is being made. */\n CopilotFileType = 'X-Copilot-FileType', // Wired to languageId\n CopilotUserKind = 'X-Copilot-UserKind', // Set up on ExP but not used yet\n /** Declare experiment dogfood program if any. */\n CopilotDogfood = 'X-Copilot-Dogfood',\n}\n\nexport enum TargetPopulation {\n Team = 'team',\n Internal = 'internal',\n Insiders = 'insider',\n Public = 'public',\n}\n\nexport const telmetryNames: Partial> = {\n [Filter.CopilotClientTimeBucket]: 'timeBucket',\n [Filter.CopilotOverrideEngine]: 'engine',\n [Filter.CopilotRepository]: 'repo',\n [Filter.CopilotFileType]: 'fileType',\n [Filter.CopilotUserKind]: 'userKind',\n};\n\n/**\n * The class FilterSettings holds the variables that were used to filter\n * experiment groups.\n */\nexport class FilterSettings {\n public constructor(private readonly filters: Partial>) {\n // empyt string is equivalent to absent, so remove it\n for (const [filter, value] of Object.entries(this.filters)) {\n if (value === '') {\n delete this.filters[filter as Filter];\n }\n }\n }\n\n public extends(otherFilterSettings: FilterSettings) {\n for (const [filter, value] of Object.entries(otherFilterSettings.filters)) {\n if (this.filters[filter as Filter] !== value) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Extends the telemetry Data with the current filter variables.\n * @param telemetryData Extended in place.\n */\n public addToTelemetry(telemetryData: TelemetryData) {\n // add all values:\n for (const [filter, value] of Object.entries(this.filters)) {\n const telemetryName = telmetryNames[filter as Filter];\n if (telemetryName === undefined) {\n continue;\n }\n telemetryData.properties[telemetryName] = value;\n }\n }\n\n /**\n * Returns a string version of this object, suitable for use as a map key.\n */\n public stringify() {\n const keys = Object.keys(this.filters);\n keys.sort();\n return keys.map(key => `${key}:${this.filters[key as Filter]}`).join(';');\n }\n\n /** Returns a copy of the filters. */\n public toHeaders(): Partial> {\n return {...this.filters};\n }\n\n public withChange(filter: Filter, value: string): FilterSettings {\n return new FilterSettings({...this.filters, [filter]: value});\n }\n}\n","/**\n * This file deals with \"granularity\", the idea that some experiments\n * should have a stable set of assignments for each user,\n * while others should switch more often to increase statistical power\n * at the expense of a stable user experience and optimal cache use.\n */\n\nimport {Clock} from '../clock';\nimport {Filter, FilterSettings} from './filters';\nimport {DEFAULT_GRANULARITY, GranularityImplementation, TimeBucketGranularity} from './granularityImplementation';\n\nconst BUCKETFILTER = Filter.CopilotClientTimeBucket;\n\ninterface ExtendedFiltersWithPrefetchSuggestions {\n newFilterSettings: FilterSettings;\n otherFilterSettingsToPrefetch: FilterSettings[];\n}\n\n/**\n * A GranularityDirectory keeps track of several\n * GranularityImplementations,\n * and decides which one to apply depending on filter settings.\n */\nexport class GranularityDirectory {\n // specs are pairs of (filter settings, value)\n private readonly specs: Map = new Map<\n FilterSettings,\n GranularityImplementation\n >();\n private readonly defaultGranularity: GranularityImplementation;\n private readonly prefix: string;\n private clock: Clock;\n\n /**\n * Initialize a GranularityDirectory\n * @param prefix Several GranularityImplementations require \"prefixes\",\n * which they will prepend to bucket values. E.g. a user-time-bucket granularity\n * prepends the user ID to the current time bucket.\n * It is anticipated that the prefix will usually be an identifier for the user, if known.\n */\n constructor(prefix: string, clock: Clock) {\n this.prefix = prefix;\n this.clock = clock;\n this.defaultGranularity = DEFAULT_GRANULARITY(prefix);\n }\n\n private selectGranularity(filters: FilterSettings): GranularityImplementation {\n for (const [rememberedFilters, granularity] of this.specs.entries()) {\n if (filters.extends(rememberedFilters)) {\n return granularity;\n }\n }\n return this.defaultGranularity;\n }\n\n /**\n * Specifies that a certain set of filters should have a certain granularity\n * Invalid or NaN granularities mean the filter set is removed from the directory\n * @param filters\n * @param byCallBuckets Draw this number of buckets and switch between them -- NaN or <= 1 means no switching\n * @param timePeriodSizeInH Assignments switch every timePeriodSizeInH hours -- NaN or <= 0 means no switching\n */\n update(filters: FilterSettings, byCallBuckets: number, timePeriodSizeInH: number) {\n // 0 or invalid values are the same as NaN\n byCallBuckets = byCallBuckets > 1 ? byCallBuckets : NaN;\n timePeriodSizeInH = timePeriodSizeInH > 0 ? timePeriodSizeInH : NaN;\n\n if (isNaN(byCallBuckets) && isNaN(timePeriodSizeInH)) {\n this.specs.delete(filters);\n } else {\n const newGranularity = new TimeBucketGranularity(this.prefix);\n if (!isNaN(byCallBuckets)) {\n newGranularity.setByCallBuckets(byCallBuckets);\n }\n if (!isNaN(timePeriodSizeInH)) {\n newGranularity.setTimePeriod(timePeriodSizeInH * 3600 * 1000);\n }\n this.specs.set(filters, newGranularity);\n }\n }\n\n /**\n * For a certain set of filters,\n * add the bucket value based on the remembered granularity,\n * and give a list of upcoming values to prepare for.\n */\n extendFilters(filters: FilterSettings): ExtendedFiltersWithPrefetchSuggestions {\n const implementation = this.selectGranularity(filters);\n const [value, upcomingValues] = implementation.getCurrentAndUpComingValues(this.clock.now());\n return {\n newFilterSettings: filters.withChange(BUCKETFILTER, value),\n otherFilterSettingsToPrefetch: upcomingValues.map((value: string) =>\n filters.withChange(BUCKETFILTER, value)\n ),\n };\n }\n}\n","/**\n * This file implements the granularity regimes kept track of in granularityDirectory.ts\n */\n\nexport abstract class GranularityImplementation {\n /**\n * Returns both the current and the upcoming bucket values\n */\n getCurrentAndUpComingValues(now: Date): [string, string[]] {\n const currentValue = this.getValue(now);\n const upcomingValues = this.getUpcomingValues(now);\n return [currentValue, upcomingValues];\n }\n\n constructor(protected readonly prefix: string) {}\n\n /** Get the current value */\n protected abstract getValue(now: Date): string;\n /** Get values that might well follow the current value, including that value itself */\n protected abstract getUpcomingValues(now: Date): string[];\n}\n\nclass ConstantGranularity extends GranularityImplementation {\n protected getValue(now: Date): string {\n return this.prefix;\n }\n\n protected getUpcomingValues(now: Date): string[] {\n return [];\n }\n}\n\nexport const DEFAULT_GRANULARITY = (prefix: string) => new ConstantGranularity(prefix);\n\nexport class TimeBucketGranularity extends GranularityImplementation {\n private numByCallBuckets: number | undefined;\n private timePeriodLengthMs: number | undefined;\n\n /**\n * A granularity implementation that combines ByTimePeriod (e.g. ByHour) and ByCall functionality\n * @param fetchBeforeFactor if the bucket has left than this factor left, fetch the next one\n * @param anchor time bucket values are counted from this point\n */\n constructor(\n protected override readonly prefix: string,\n private readonly fetchBeforeFactor = 0.5,\n private readonly anchor = new Date().setUTCHours(0, 0, 0, 0)\n ) {\n super(prefix);\n }\n\n setTimePeriod(lengthMs: number) {\n if (isNaN(lengthMs)) {\n this.timePeriodLengthMs = undefined;\n } else {\n this.timePeriodLengthMs = lengthMs;\n }\n }\n\n setByCallBuckets(numBuckets: number) {\n if (isNaN(numBuckets)) {\n this.numByCallBuckets = undefined;\n } else {\n this.numByCallBuckets = numBuckets;\n }\n }\n\n getValue(now: Date): string {\n return this.prefix + this.getTimePeriodBucketString(now) + (this.numByCallBuckets ? this.timeHash(now) : '');\n }\n\n private getTimePeriodBucketString(now: Date): string {\n return this.timePeriodLengthMs ? this.dateToTimePartString(now) : '';\n }\n\n getUpcomingValues(now: Date): string[] {\n const upcomingValues: string[] = [];\n\n const upcomingTimePeriodBucketStrings = this.getUpcomingTimePeriodBucketStrings(now);\n const upcomingByCallBucketStrings = this.getUpcomingByCallBucketStrings();\n\n for (const upcomingTimePeriodBucketString of upcomingTimePeriodBucketStrings) {\n for (const upcomingByCallBucketString of upcomingByCallBucketStrings) {\n upcomingValues.push(this.prefix + upcomingTimePeriodBucketString + upcomingByCallBucketString);\n }\n }\n return upcomingValues;\n }\n\n /** returns the current and all upcoming strings relating to time period */\n private getUpcomingTimePeriodBucketStrings(now: Date): string[] {\n if (undefined === this.timePeriodLengthMs) {\n return [''];\n }\n if (\n (now.getTime() - this.anchor) % this.timePeriodLengthMs <\n this.fetchBeforeFactor * this.timePeriodLengthMs\n ) {\n return [this.getTimePeriodBucketString(now)];\n } else {\n const inABit = new Date(now.getTime() + this.timePeriodLengthMs);\n return [this.getTimePeriodBucketString(now), this.getTimePeriodBucketString(inABit)];\n }\n }\n\n /** returns the current and all other strings related to bucket */\n private getUpcomingByCallBucketStrings(): string[] {\n if (undefined === this.numByCallBuckets) {\n return [''];\n } else {\n // return all values between 0 and this.samples\n // including the current one (which may combine with the time period to something new)\n return Array.from(Array(this.numByCallBuckets).keys()).map(x => x.toString());\n }\n }\n\n /** Compute a hash of the current time, to be used as a suffix */\n private timeHash(time: Date): number {\n if (this.numByCallBuckets == undefined) {\n return 0;\n }\n // 7883 is a prime chosen to be larger than any likely setting for\n // `numByCallBuckets`, as well as being a prime modulo 10, 50 and 100.\n return (7883 * (time.getTime() % this.numByCallBuckets)) % this.numByCallBuckets;\n }\n\n private dateToTimePartString(date: Date): string {\n if (this.timePeriodLengthMs == undefined) {\n return '';\n }\n return Math.floor((date.getTime() - this.anchor) / this.timePeriodLengthMs).toString();\n }\n}\n","// This is in a separate file to make sure it gets initialized before\n// both `experiments/expConfig.ts` and `telemetry.ts`.\n/** how do we want to telemetrize values from the ExpConfig */\nexport enum ExpServiceTelemetryNames {\n // these are defined (but not exported) in the code for the tas client, currently here:\n // https://github.com/microsoft/tas-client/blob/75f8895b15ef5696653cbee134ccae24477b0b94/vscode-tas-client/src/vscode-tas-client/VSCodeTasClient.ts#L67\n featuresTelemetryPropertyName = 'VSCode.ABExp.Features',\n assignmentContextTelemetryPropertyName = 'abexp.assignmentcontext',\n}\n","import {LRUCacheMap} from '../common/cache';\nimport {APIChoice} from '../openai/openai';\n\nexport type CompletionCacheContents = {multiline: boolean; choices: APIChoice[]};\n\n// Given the same prompt, we show the same completion.\n// Note this is not per editor, but that should be ok since it's content based.\nexport class CompletionsCache {\n _cache: LRUCacheMap;\n\n constructor() {\n this._cache = new LRUCacheMap(100);\n }\n\n get(promptKey: string): CompletionCacheContents | undefined {\n return this._cache.get(promptKey);\n }\n\n set(promptKey: string, contents: CompletionCacheContents) {\n this._cache.set(promptKey, contents);\n }\n\n clear() {\n this._cache.clear();\n }\n}\n","import {Context} from '../context';\nimport {Prompt} from '../prompt/prompt';\nimport {TelemetryData} from '../telemetry';\nimport {\n contextualFilterCharacterMap,\n contextualFilterIntercept,\n contextualFilterLanguageMap,\n contextualFilterWeights,\n} from './contextualFilterConstants';\nimport {treeScore} from './contextualFilterTree';\n\nexport class ContextualFilterManager {\n previousLabel: number;\n previousLabelTimestamp: number;\n probabilityAccept: number;\n constructor() {\n this.previousLabel = 0;\n this.previousLabelTimestamp = Date.now() - 3600;\n this.probabilityAccept = 0;\n }\n}\n\n/** get length of last line */\nexport function getLastLineLength(source: string): number {\n const lines = source.split('\\n');\n const lastLine = lines[lines.length - 1];\n return lastLine.length;\n}\n\nexport function contextualFilterScore(\n ctx: Context,\n telemetryData: TelemetryData,\n prompt: Prompt,\n contextualFilterEnableTree: boolean\n): number {\n const cfManager = ctx.get(ContextualFilterManager);\n\n // yt_1: whether the last request was canceled (1) or not (0). If not defined (session just started) set it to 0.\n // use yt_1 as a numeric feature.\n const yt_1: number = cfManager.previousLabel;\n\n // acw : uses telemetryData.properties['afterCursorWhitespace']. set 1 if true, else 0.\n // use acw as a numeric feature.\n let acw = 0;\n if (\n 'afterCursorWhitespace' in telemetryData.properties &&\n telemetryData.properties['afterCursorWhitespace'] === 'true'\n ) {\n acw = 1;\n }\n\n // dt-1: time difference (in seconds) between now and the timing of the last label in the session. If not defined set it to 3600.\n // use ln_dt_1 as a numeric feature.\n const dt_1 = (Date.now() - cfManager.previousLabelTimestamp) / 1000;\n const ln_dt_1 = Math.log(1 + dt_1);\n\n // get length of last line in the prompt.\n // use ln_promptLastLineLength as a numeric feature.\n // use promptLastCharIndex as a categorical feature.\n let ln_promptLastLineLength = 0;\n let promptLastCharIndex = 0;\n\n const promptPrefix: string = prompt.prefix;\n if (promptPrefix) {\n ln_promptLastLineLength = Math.log(1 + getLastLineLength(promptPrefix));\n const promptLastChar = promptPrefix.slice(-1);\n if (contextualFilterCharacterMap[promptLastChar] !== undefined) {\n promptLastCharIndex = contextualFilterCharacterMap[promptLastChar];\n }\n }\n\n // get length of last line in the prompt, when prompt is trimmed on the right.\n // use ln_promptLastLineRstripLength as a numeric feature.\n // use promptLastRstripCharIndex as a categorical feature.\n let ln_promptLastLineRstripLength = 0;\n let promptLastRstripCharIndex = 0;\n\n const promptPrefixRstrip: string = promptPrefix.trimEnd();\n if (promptPrefixRstrip) {\n ln_promptLastLineRstripLength = Math.log(1 + getLastLineLength(promptPrefixRstrip));\n const promptLastRstripChar = promptPrefixRstrip.slice(-1);\n if (contextualFilterCharacterMap[promptLastRstripChar] !== undefined) {\n promptLastRstripCharIndex = contextualFilterCharacterMap[promptLastRstripChar];\n }\n }\n\n // get telemetryData.measurements['documentLength'] if available.\n // use ln_documentLength as a numeric feature.\n let ln_documentLength = 0;\n if ('documentLength' in telemetryData.measurements) {\n const documentLength = telemetryData.measurements['documentLength'];\n ln_documentLength = Math.log(1 + documentLength);\n }\n\n // get telemetryData.measurements['promptEndPos'] if available\n // use ln_promptEndPos as a numeric feature.\n let ln_promptEndPos = 0;\n if ('promptEndPos' in telemetryData.measurements) {\n const promptEndPos = telemetryData.measurements['promptEndPos'];\n ln_promptEndPos = Math.log(1 + promptEndPos);\n }\n\n // get telemetryData.measurements['documentLength'] and telemetryData.measurements['promptEndPos'] if available.\n // use relativeEndPos as a numeric feature.\n let relativeEndPos = 0;\n if ('promptEndPos' in telemetryData.measurements && 'documentLength' in telemetryData.measurements) {\n const documentLength = telemetryData.measurements['documentLength'];\n const promptEndPos = telemetryData.measurements['promptEndPos'];\n relativeEndPos = (promptEndPos + 0.5) / (1 + documentLength);\n }\n\n // use telemetryData.properties['languageId']\n // use languageIndex as a categorical feature.\n let languageIndex = 0;\n if (contextualFilterLanguageMap[telemetryData.properties['languageId']] !== undefined) {\n languageIndex = contextualFilterLanguageMap[telemetryData.properties['languageId']];\n }\n\n // current model\n // [0, 7] : numeric features\n // [8 - 28] : categorical , language\n // [29 - 124] : categorical, promptLastCharIndex\n // [125 - 220] : categorical, promptLastRstripCharIndex\n\n let probabilityAccept = 0;\n if (contextualFilterEnableTree) {\n const features: number[] = new Array(221).fill(0);\n features[0] = yt_1;\n features[1] = acw;\n features[2] = ln_dt_1;\n features[3] = ln_promptLastLineLength;\n features[4] = ln_promptLastLineRstripLength;\n features[5] = ln_documentLength;\n features[6] = ln_promptEndPos;\n features[7] = relativeEndPos;\n features[8 + languageIndex] = 1;\n features[29 + promptLastCharIndex] = 1;\n features[125 + promptLastRstripCharIndex] = 1;\n probabilityAccept = treeScore(features)[1];\n } else {\n let sum = contextualFilterIntercept;\n sum += contextualFilterWeights[0] * yt_1;\n sum += contextualFilterWeights[1] * acw;\n sum += contextualFilterWeights[2] * ln_dt_1;\n sum += contextualFilterWeights[3] * ln_promptLastLineLength;\n sum += contextualFilterWeights[4] * ln_promptLastLineRstripLength;\n sum += contextualFilterWeights[5] * ln_documentLength;\n sum += contextualFilterWeights[6] * ln_promptEndPos;\n sum += contextualFilterWeights[7] * relativeEndPos;\n sum += contextualFilterWeights[8 + languageIndex];\n sum += contextualFilterWeights[29 + promptLastCharIndex];\n sum += contextualFilterWeights[125 + promptLastRstripCharIndex];\n probabilityAccept = 1 / (1 + Math.exp(-sum));\n }\n\n ctx.get(ContextualFilterManager).probabilityAccept = probabilityAccept;\n return probabilityAccept;\n}\n","export const contextualFilterAcceptThreshold = 35;\nexport const contextualFilterExplorationTraffic = 1;\n\n// ContextualFilter model parameters\nexport const contextualFilterIntercept = -0.3043572714994554;\nexport const contextualFilterWeights = [\n 0.9978708359643611, 0.7001905605239328, -0.1736749244124868, -0.22994157947320112, 0.13406692641682572,\n -0.007751370662011853, 0.0057783222035240715, 0.41910878254476003, -0.1621657125711092, 0.13770814958908187,\n -0.06036011308184006, -0.07351180985800129, 0.0, -0.05584878151248109, 0.30618794079412015, -0.1282197982598485,\n 0.10951859303997555, 0.1700461782788777, -0.3346057842644757, 0.22497985923128136, 0.0, -0.44038101825774356,\n -0.6540115939236782, 0.16595600081341702, 0.20733910722385135, -0.1337033766105696, -0.06923072125290894,\n -0.05806684191976292, 0.3583334671633344, -0.47357732824944315, 0.17810871365594377, 0.42268219963946685, 0.0, 0.0,\n -0.16379620467004602, -0.43893868831061167, 0.0, 0.11570094006709251, 0.9326431262654882, -0.9990110509203912,\n -0.44125275652726503, -0.15840786997162004, -0.4600396256644451, -0.018814811994044403, 0.09230944537175266,\n 0.025814790934742798, -1.0940162204190154, -0.9407503631235489, -0.9854303778694269, -1.1045822488262245,\n -1.1417299456573262, -1.5623704405345513, -0.4157473855795939, -1.0244257735561713, -0.7477401944601753,\n -1.1275109699068402, -0.0714715633552533, -1.1408628006786907, -1.0409898655074672, -0.2288889836518878,\n -0.5469549893760344, -0.181946611106845, 0.1264329316374918, 0.0, 0.0, 0.312206968554707, -0.3656436392517924,\n 0.23655650686038968, 0.1014912419901576, 0.0, 0.06287549221765308, 0.0, 0.0, 0.19027065218932154,\n -0.8519502045974378, 0.0, 0.23753599905971923, 0.2488809322489166, 0.019969251907983224, 0.0, 0.06916505526229488,\n 0.29053356359188204, -0.14484456555431657, 0.014768129429370188, -0.15051464926341374, 0.07614835502776021,\n -0.3317489901313935, 0.0, 0.0, 0.04921938684669103, -0.28248576768353445, -0.9708816204525345, -1.3560464522265527,\n 0.014165375212383239, -0.23924166472544983, 0.10006595730248855, 0.09867233147279562, 0.32330430333220644,\n -0.058625706114180595, 0.17149853105783947, 0.4436484054395367, 0.047189049576707255, 0.16832520944790552,\n 0.1117259900942179, -0.35469010329927253, 0.0, -0.1528189124465582, -0.3804848349564939, 0.07278077320753953,\n 0.13263786480064088, 0.22920682659292527, 1.1512955314336537, 0.0, 0.016939862282340023, 0.4242994650403408,\n 0.12759835577444986, -0.5577261135825583, -0.19764560943067672, -0.4042102444736004, 0.12063461617733708,\n -0.2933966817484834, 0.2715683893968593, 0.0, -0.7138548251238751, 0.0, -0.023066228703035277, 0.0,\n -0.06383043976746139, 0.09683723720709651, -0.7337151424080791, 0.0, -0.27191370124625525, 0.2819781269656171,\n -0.08711496549050252, 0.11048604909969338, -0.0934849550450534, 0.0721001250772912, 0.2589126797890794,\n 0.6729582659532254, -0.21921032738244908, -0.21535277468651456, -0.45474006124091354, -0.05861820126419139,\n -0.007875306207720204, -0.056661261678809284, 0.17727881404222662, 0.23603713348534658, 0.17485861412377932,\n -0.5737483768696752, -0.38220029570342745, -0.5202722985519168, -0.37187947527657256, 0.47155277792990113,\n -0.12077912346691123, 0.47825628981545326, 0.4736704404000214, -0.1615218651546898, 0.18362447973513005, 0.0, 0.0,\n -0.18183417425866824, 0.0, 0.0, -0.2538532305733833, -0.1303692690676528, -0.4073577969188216, 0.04172985870928789,\n -0.1704527388573901, 0.0, 0.0, 0.7536858953385828, -0.44703159588787644, 0.0, -0.7246484085580873,\n -0.21378128540782063, 0.0, 0.037461090552656146, -0.16205852364367032, -0.10973952064404884, 0.017468043407647377,\n -0.1288980387397392, 0.0, 0.0, 0.0, -1.218692715379445, 0.05536949662193305, -0.3763799844799116,\n -0.1845001725624579, -0.1615576298149558, 0.0, -0.15373262203249874, -0.04603412604270418, 0.0, -0.3068149681460828,\n 0.09412352468269412, 0.0, 0.09116543650609721, 0.06065865264082559, 0.05688267379386188, -0.05873945477722306, 0.0,\n 0.14532465133322153, 0.1870857769705463, 0.36304258043185555, 0.1411392422180405, 0.0630388629716367, 0.0,\n -1.1170522012450395, 0.16133697772771127, 0.15908534390781448, -0.23485453704002232, -0.1419980841417892,\n 0.21909510179526218, 0.39948420260153766, 0.40802294284289187, 0.15403767653746853, 0.0, 0.19764784115096676,\n 0.584914157527457, 0.0, -0.4573883817015294,\n];\n\nexport const contextualFilterLanguageMap: {[key: string]: number} = {\n javascript: 1,\n typescript: 2,\n typescriptreact: 3,\n python: 4,\n vue: 5,\n php: 6,\n dart: 7,\n javascriptreact: 8,\n go: 9,\n css: 10,\n cpp: 11,\n html: 12,\n scss: 13,\n markdown: 14,\n csharp: 15,\n java: 16,\n json: 17,\n rust: 18,\n ruby: 19,\n c: 20,\n};\n\nexport const contextualFilterCharacterMap: {[key: string]: number} = {\n ' ': 1,\n '!': 2,\n '\"': 3,\n '#': 4,\n $: 5,\n '%': 6,\n '&': 7,\n \"'\": 8,\n '(': 9,\n ')': 10,\n '*': 11,\n '+': 12,\n ',': 13,\n '-': 14,\n '.': 15,\n '/': 16,\n '0': 17,\n '1': 18,\n '2': 19,\n '3': 20,\n '4': 21,\n '5': 22,\n '6': 23,\n '7': 24,\n '8': 25,\n '9': 26,\n ':': 27,\n ';': 28,\n '<': 29,\n '=': 30,\n '>': 31,\n '?': 32,\n '@': 33,\n A: 34,\n B: 35,\n C: 36,\n D: 37,\n E: 38,\n F: 39,\n G: 40,\n H: 41,\n I: 42,\n J: 43,\n K: 44,\n L: 45,\n M: 46,\n N: 47,\n O: 48,\n P: 49,\n Q: 50,\n R: 51,\n S: 52,\n T: 53,\n U: 54,\n V: 55,\n W: 56,\n X: 57,\n Y: 58,\n Z: 59,\n '[': 60,\n '\\\\': 61,\n ']': 62,\n '^': 63,\n _: 64,\n '`': 65,\n a: 66,\n b: 67,\n c: 68,\n d: 69,\n e: 70,\n f: 71,\n g: 72,\n h: 73,\n i: 74,\n j: 75,\n k: 76,\n l: 77,\n m: 78,\n n: 79,\n o: 80,\n p: 81,\n q: 82,\n r: 83,\n s: 84,\n t: 85,\n u: 86,\n v: 87,\n w: 88,\n x: 89,\n y: 90,\n z: 91,\n '{': 92,\n '|': 93,\n '}': 94,\n '~': 95,\n};\n","export function treeScore(input: number[]): number[] {\n let var0: number;\n if (input[0] > 1e-35) {\n if (input[29] > 1e-35) {\n if (input[138] > 1e-35) {\n var0 = 0.49496579646815353;\n } else {\n var0 = 0.47546580490346646;\n }\n } else {\n if (input[30] > 1e-35) {\n var0 = 0.4456371992737078;\n } else {\n if (input[4] > 3.238486181444842) {\n if (input[135] > 1e-35) {\n var0 = 0.2645576817782658;\n } else {\n if (input[46] > 1e-35) {\n var0 = 0.20251922126765812;\n } else {\n var0 = 0.37359143313367105;\n }\n }\n } else {\n if (input[7] > 0.9662372103242399) {\n var0 = 0.44975631109230374;\n } else {\n var0 = 0.4067133376207218;\n }\n }\n }\n }\n } else {\n if (input[7] > 0.960816451500545) {\n if (input[29] > 1e-35) {\n if (input[4] > 1.7005986908310777) {\n var0 = 0.4240336839258693;\n } else {\n var0 = 0.35414085998710754;\n }\n } else {\n if (input[4] > 3.238486181444842) {\n var0 = 0.353882328354817;\n } else {\n if (input[100] > 1e-35) {\n var0 = 0.48783079865293355;\n } else {\n if (input[30] > 1e-35) {\n var0 = 0.419904106522537;\n } else {\n var0 = 0.38599249795612806;\n }\n }\n }\n }\n } else {\n if (input[4] > 3.6242520361853052) {\n if (input[29] > 1e-35) {\n if (input[7] > 0.5086748127709895) {\n var0 = 0.37522628419389664;\n } else {\n var0 = 0.3359393805000766;\n }\n } else {\n if (input[30] > 1e-35) {\n var0 = 0.3685210833144829;\n } else {\n if (input[135] > 1e-35) {\n var0 = 0.22140958666091123;\n } else {\n if (input[134] > 1e-35) {\n var0 = 0.38379851487275685;\n } else {\n if (input[46] > 1e-35) {\n var0 = 0.1926283522107934;\n } else {\n var0 = 0.3098162447812857;\n }\n }\n }\n }\n }\n } else {\n if (input[46] > 1e-35) {\n var0 = 0.22698331991181095;\n } else {\n if (input[4] > 1.4978661367769956) {\n if (input[30] > 1e-35) {\n if (input[4] > 2.138333059508028) {\n var0 = 0.39709448374768985;\n } else {\n var0 = 0.34711865383837703;\n }\n } else {\n if (input[134] > 1e-35) {\n var0 = 0.40608455346469957;\n } else {\n if (input[135] > 1e-35) {\n var0 = 0.3084120164848763;\n } else {\n if (input[48] > 1e-35) {\n var0 = 0.24193590696691425;\n } else {\n if (input[51] > 1e-35) {\n var0 = 0.2087938690163009;\n } else {\n if (input[4] > 3.1984648276080736) {\n var0 = 0.3529508564858481;\n } else {\n var0 = 0.3698795818909763;\n }\n }\n }\n }\n }\n }\n } else {\n var0 = 0.30210240039979064;\n }\n }\n }\n }\n }\n let var1: number;\n if (input[0] > 1e-35) {\n if (input[2] > 2.4414009612931857) {\n if (input[2] > 3.676220550121792) {\n if (input[7] > 0.9246495578512688) {\n var1 = 0.0570428673081833;\n } else {\n var1 = 0.019779482100154476;\n }\n } else {\n if (input[7] > 0.9705672697050661) {\n var1 = 0.1023948532887641;\n } else {\n var1 = 0.06265430080550045;\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[5] > 4.658699722134796) {\n if (input[2] > 1.2424533248940002) {\n var1 = 0.12784241430585772;\n } else {\n var1 = 0.15126156743993927;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var1 = 0.10624230855386699;\n } else {\n var1 = -0.1699142543394302;\n }\n } else {\n var1 = 0.10290106276456985;\n }\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n var1 = 0.09368877801612557;\n } else {\n var1 = 0.1552615744687782;\n }\n }\n }\n } else {\n if (input[2] > 3.3842466058243152) {\n if (input[4] > 3.5694334999727624) {\n if (input[29] > 1e-35) {\n if (input[7] > 0.7022798213723723) {\n var1 = 0.02282408308012389;\n } else {\n var1 = -0.032610792718175546;\n }\n } else {\n var1 = -0.04405498437523181;\n }\n } else {\n if (input[46] > 1e-35) {\n var1 = -0.14475563528583885;\n } else {\n if (input[7] > 0.9159108669154322) {\n var1 = 0.02539215399728953;\n } else {\n if (input[134] > 1e-35) {\n var1 = 0.04720629593220485;\n } else {\n if (input[4] > 1.8688348091416842) {\n var1 = -0.00150052748656963;\n } else {\n var1 = -0.04528409340753242;\n }\n }\n }\n }\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n if (input[4] > 3.6505739029280164) {\n if (input[29] > 1e-35) {\n var1 = 0.050909089229765704;\n } else {\n if (input[39] > 1e-35) {\n var1 = -0.08747827386821926;\n } else {\n if (input[46] > 1e-35) {\n var1 = -0.11300671054986217;\n } else {\n var1 = -0.002669293928522137;\n }\n }\n }\n } else {\n if (input[46] > 1e-35) {\n var1 = -0.07873653229849684;\n } else {\n if (input[39] > 1e-35) {\n var1 = -0.06389470798465265;\n } else {\n if (input[2] > 0.8958797346140276) {\n if (input[47] > 1e-35) {\n var1 = -0.07102696386827136;\n } else {\n if (input[4] > 1.8688348091416842) {\n var1 = 0.04567768852273886;\n } else {\n var1 = 0.016429189359442275;\n }\n }\n } else {\n var1 = 0.024223384872688037;\n }\n }\n }\n }\n } else {\n if (input[7] > 0.9569480028661056) {\n var1 = 0.12458720561596202;\n } else {\n var1 = -0.006224718391409129;\n }\n }\n }\n }\n let var2: number;\n if (input[29] > 1e-35) {\n if (input[2] > 2.602003343538398) {\n if (input[2] > 4.166635176627655) {\n if (input[7] > 0.8375851232899904) {\n var2 = 0.027219239366992384;\n } else {\n var2 = -0.023288925509443156;\n }\n } else {\n if (input[7] > 0.5866799179067689) {\n var2 = 0.05780689652787357;\n } else {\n var2 = 0.019914206435185725;\n }\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n if (input[7] > 0.9246495578512688) {\n var2 = 0.1091540005913688;\n } else {\n var2 = 0.08430043254349175;\n }\n } else {\n if (input[6] > 4.832297822126891) {\n if (input[125] > 1e-35) {\n var2 = 0.029350728374412424;\n } else {\n var2 = 0.1327178977041336;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[7] > 0.9793410316570949) {\n var2 = -0.10742256752042179;\n } else {\n var2 = 0.10128035205992136;\n }\n } else {\n var2 = 0.08719230025231978;\n }\n }\n }\n }\n } else {\n if (input[5] > 3.772694874805912) {\n if (input[39] > 1e-35) {\n var2 = -0.07712063687837625;\n } else {\n if (input[46] > 1e-35) {\n var2 = -0.09987046122905541;\n } else {\n if (input[2] > 3.6242520361853052) {\n if (input[134] > 1e-35) {\n var2 = 0.0549278412468898;\n } else {\n if (input[155] > 1e-35) {\n var2 = 0.0628934857241284;\n } else {\n if (input[47] > 1e-35) {\n var2 = -0.14605662411148382;\n } else {\n if (input[48] > 1e-35) {\n var2 = -0.1460221669882455;\n } else {\n var2 = 0.002073957868392086;\n }\n }\n }\n }\n } else {\n if (input[2] > 1e-35) {\n if (input[47] > 1e-35) {\n var2 = -0.0769198367034467;\n } else {\n if (input[155] > 1e-35) {\n var2 = 0.0769122902449957;\n } else {\n if (input[134] > 1e-35) {\n var2 = 0.06856131328753592;\n } else {\n if (input[152] > 1e-35) {\n var2 = 0.07081107422282688;\n } else {\n if (input[51] > 1e-35) {\n var2 = -0.11095669360187602;\n } else {\n if (input[91] > 1e-35) {\n var2 = -0.08136006552659215;\n } else {\n if (input[48] > 1e-35) {\n var2 = -0.07180356044417698;\n } else {\n if (input[18] > 1e-35) {\n var2 = -0.029572927306223313;\n } else {\n if (input[50] > 1e-35) {\n var2 = -0.11419309779400831;\n } else {\n var2 = 0.03331652781327257;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var2 = 0.0015747823792064454;\n }\n }\n }\n }\n } else {\n if (input[7] > 0.9662372103242399) {\n var2 = 0.1203598683210537;\n } else {\n var2 = 0.011240838199712565;\n }\n }\n }\n let var3: number;\n if (input[0] > 1e-35) {\n if (input[2] > 2.4414009612931857) {\n if (input[1] > 1e-35) {\n if (input[2] > 4.03420147928485) {\n var3 = 0.03823654007072966;\n } else {\n if (input[7] > 0.9033253454895247) {\n var3 = 0.09329944316059466;\n } else {\n var3 = 0.06705865009439997;\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var3 = 0.06865805795066232;\n } else {\n if (input[30] > 1e-35) {\n var3 = 0.05189058132179502;\n } else {\n if (input[217] > 1e-35) {\n var3 = 0.044913757044379055;\n } else {\n var3 = -0.05078929160105722;\n }\n }\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[6] > 5.161920636569023) {\n if (input[2] > 1.4978661367769956) {\n var3 = 0.10652732380394028;\n } else {\n var3 = 0.13307829460294332;\n }\n } else {\n if (input[7] > 0.985694415330804) {\n var3 = 0.06936133858882627;\n } else {\n var3 = 0.11090193559908544;\n }\n }\n } else {\n if (input[30] > 1e-35) {\n var3 = 0.10406540623634791;\n } else {\n var3 = 0.03985408831881549;\n }\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[2] > 3.772694874805912) {\n if (input[29] > 1e-35) {\n if (input[7] > 0.7316379010844482) {\n var3 = 0.012897973304512032;\n } else {\n var3 = -0.028068579877067623;\n }\n } else {\n var3 = 0.024577017676752924;\n }\n } else {\n if (input[5] > 3.417592293073651) {\n if (input[22] > 1e-35) {\n var3 = -0.023871063947594612;\n } else {\n if (input[7] > 0.8255520169851381) {\n var3 = 0.0513970804870914;\n } else {\n if (input[153] > 1e-35) {\n var3 = 0.0032035784177419503;\n } else {\n var3 = 0.038713568639820416;\n }\n }\n }\n } else {\n if (input[7] > 0.9527510849235538) {\n var3 = 0.10975706910869304;\n } else {\n var3 = -0.009433959232316078;\n }\n }\n }\n } else {\n if (input[38] > 1e-35) {\n var3 = 0.05195298239886214;\n } else {\n if (input[30] > 1e-35) {\n var3 = 0.02476336300816124;\n } else {\n if (input[2] > 2.524928003624769) {\n if (input[217] > 1e-35) {\n var3 = 0.0135414448190362;\n } else {\n if (input[135] > 1e-35) {\n var3 = -0.14660288310803915;\n } else {\n var3 = -0.07298980826531443;\n }\n }\n } else {\n if (input[135] > 1e-35) {\n var3 = -0.11136111748165503;\n } else {\n if (input[123] > 1e-35) {\n var3 = -0.1489448617480049;\n } else {\n if (input[46] > 1e-35) {\n var3 = -0.0922792773195811;\n } else {\n var3 = -0.024587716086845016;\n }\n }\n }\n }\n }\n }\n }\n }\n let var4: number;\n if (input[0] > 1e-35) {\n if (input[2] > 2.249904835165133) {\n if (input[1] > 1e-35) {\n if (input[2] > 3.540854293052788) {\n if (input[3] > 2.249904835165133) {\n var4 = 0.0590142410559562;\n } else {\n if (input[7] > 0.6376007852429183) {\n var4 = 0.043799948513989724;\n } else {\n var4 = -0.00004018626768373957;\n }\n }\n } else {\n var4 = 0.0790082705503403;\n }\n } else {\n if (input[38] > 1e-35) {\n var4 = 0.06581244939148062;\n } else {\n if (input[30] > 1e-35) {\n var4 = 0.04874874335011108;\n } else {\n var4 = -0.03908081910821116;\n }\n }\n }\n } else {\n if (input[3] > 2.602003343538398) {\n if (input[1] > 1e-35) {\n var4 = 0.0902076086329385;\n } else {\n if (input[30] > 1e-35) {\n var4 = 0.10143876154366023;\n } else {\n var4 = 0.021304615514737626;\n }\n }\n } else {\n if (input[2] > 1.4978661367769956) {\n var4 = 0.10248710197602005;\n } else {\n if (input[8] > 1e-35) {\n if (input[125] > 1e-35) {\n var4 = -0.1652240484643952;\n } else {\n var4 = 0.09695355914385996;\n }\n } else {\n var4 = 0.12574960258243387;\n }\n }\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[2] > 3.8815106545092593) {\n if (input[3] > 2.249904835165133) {\n var4 = 0.030411053020370282;\n } else {\n if (input[7] > 0.8375851232899904) {\n var4 = 0.01347947217941036;\n } else {\n var4 = -0.02329004077119854;\n }\n }\n } else {\n if (input[7] > 0.9480659774309611) {\n if (input[22] > 1e-35) {\n var4 = -0.021734552060979462;\n } else {\n if (input[100] > 1e-35) {\n var4 = 0.12154672718218543;\n } else {\n if (input[3] > 1e-35) {\n var4 = 0.0467045097539336;\n } else {\n var4 = 0.07133232987671506;\n }\n }\n }\n } else {\n if (input[4] > 2.012675845367575) {\n if (input[4] > 3.9219243190762363) {\n var4 = 0.018631928508103857;\n } else {\n var4 = 0.04026129961424531;\n }\n } else {\n var4 = -0.0060403819170799225;\n }\n }\n }\n } else {\n if (input[38] > 1e-35) {\n var4 = 0.04740678443866351;\n } else {\n if (input[30] > 1e-35) {\n var4 = 0.022411595432555845;\n } else {\n if (input[2] > 2.970085626360216) {\n if (input[121] > 1e-35) {\n var4 = 0.016385457091892035;\n } else {\n var4 = -0.07115043890873148;\n }\n } else {\n if (input[4] > 3.417592293073651) {\n var4 = -0.04057726754591634;\n } else {\n if (input[29] > 1e-35) {\n var4 = -0.10601923621749415;\n } else {\n var4 = -0.013474385705240824;\n }\n }\n }\n }\n }\n }\n }\n let var5: number;\n if (input[3] > 1e-35) {\n if (input[3] > 3.481121732133104) {\n if (input[30] > 1e-35) {\n var5 = 0.03419190074885174;\n } else {\n if (input[39] > 1e-35) {\n var5 = -0.07596248521514803;\n } else {\n if (input[142] > 1e-35) {\n var5 = -0.09906305142951233;\n } else {\n if (input[143] > 1e-35) {\n var5 = -0.11544208927241095;\n } else {\n if (input[134] > 1e-35) {\n var5 = 0.03231677158309109;\n } else {\n if (input[217] > 1e-35) {\n var5 = 0.04584520241402839;\n } else {\n var5 = -0.014587374070287719;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[30] > 1e-35) {\n if (input[141] > 1e-35) {\n var5 = -0.05022127515891476;\n } else {\n if (input[6] > 3.540854293052788) {\n var5 = 0.046006786519929344;\n } else {\n if (input[3] > 2.3502401828962087) {\n var5 = 0.03746852485580482;\n } else {\n var5 = 0.11887634683908754;\n }\n }\n }\n } else {\n if (input[142] > 1e-35) {\n var5 = -0.0715680845257123;\n } else {\n if (input[134] > 1e-35) {\n var5 = 0.05310603374316432;\n } else {\n if (input[39] > 1e-35) {\n var5 = -0.05301061369502469;\n } else {\n if (input[143] > 1e-35) {\n var5 = -0.06806923450459589;\n } else {\n if (input[21] > 1e-35) {\n var5 = -0.054617004299251364;\n } else {\n if (input[113] > 1e-35) {\n if (input[6] > 3.795426061844291) {\n var5 = 0.03901365322581413;\n } else {\n var5 = 0.11833310693969545;\n }\n } else {\n if (input[141] > 1e-35) {\n var5 = -0.039041289505442084;\n } else {\n if (input[3] > 3.0677824455408698) {\n var5 = 0.010823236602311471;\n } else {\n if (input[29] > 1e-35) {\n var5 = -0.062100944449970996;\n } else {\n if (input[58] > 1e-35) {\n var5 = -0.04585181543113668;\n } else {\n if (input[99] > 1e-35) {\n var5 = 0.053796582993543764;\n } else {\n if (input[100] > 1e-35) {\n if (input[6] > 3.676220550121792) {\n var5 = 0.02800134029424525;\n } else {\n var5 = 0.12622387863644666;\n }\n } else {\n if (input[98] > 1e-35) {\n var5 = 0.06289940430905602;\n } else {\n var5 = 0.023655750883710656;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var5 = 0.09902929683374195;\n } else {\n if (input[6] > 5.161920636569023) {\n var5 = 0.07160940969782595;\n } else {\n if (input[141] > 1e-35) {\n var5 = 0.11975693334861698;\n } else {\n var5 = 0.03480602671098732;\n }\n }\n }\n }\n let var6: number;\n if (input[0] > 1e-35) {\n if (input[2] > 2.4414009612931857) {\n if (input[1] > 1e-35) {\n if (input[2] > 4.600145018061341) {\n var6 = 0.02024868069387139;\n } else {\n if (input[2] > 3.1984648276080736) {\n var6 = 0.048682024362267456;\n } else {\n var6 = 0.07158946327961134;\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var6 = 0.05360858064017479;\n } else {\n if (input[30] > 1e-35) {\n var6 = 0.03969788038954029;\n } else {\n if (input[39] > 1e-35) {\n var6 = -0.1339275468398512;\n } else {\n var6 = -0.03340699462411555;\n }\n }\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[2] > 1.2424533248940002) {\n var6 = 0.09338368602561321;\n } else {\n if (input[5] > 4.5379471377116305) {\n var6 = 0.11818377094705468;\n } else {\n var6 = 0.02406138301472482;\n }\n }\n } else {\n if (input[30] > 1e-35) {\n var6 = 0.08786833398626331;\n } else {\n var6 = 0.031294938606502315;\n }\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[2] > 2.970085626360216) {\n if (input[29] > 1e-35) {\n if (input[2] > 4.923617305492666) {\n var6 = -0.0247806554659429;\n } else {\n var6 = 0.00415615978158072;\n }\n } else {\n if (input[4] > 2.138333059508028) {\n if (input[4] > 3.6505739029280164) {\n var6 = -0.0025888569756007704;\n } else {\n var6 = 0.033556460788819964;\n }\n } else {\n var6 = -0.011238496891848667;\n }\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n if (input[4] > 2.012675845367575) {\n if (input[2] > 0.8958797346140276) {\n var6 = 0.03964701920383755;\n } else {\n var6 = 0.024902380380505313;\n }\n } else {\n if (input[141] > 1e-35) {\n var6 = -0.07221122170573789;\n } else {\n var6 = 0.009221806859728395;\n }\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n var6 = 0.09633850035166669;\n } else {\n var6 = 0.007323280248710229;\n }\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var6 = 0.038330704525669945;\n } else {\n if (input[30] > 1e-35) {\n var6 = 0.01660549386778516;\n } else {\n if (input[2] > 2.524928003624769) {\n if (input[217] > 1e-35) {\n var6 = 0.008967266036665084;\n } else {\n if (input[29] > 1e-35) {\n var6 = -0.12693911437262784;\n } else {\n var6 = -0.05779560753585583;\n }\n }\n } else {\n if (input[29] > 1e-35) {\n var6 = -0.0908743155940788;\n } else {\n if (input[4] > 3.314020688089767) {\n var6 = -0.030882471980034343;\n } else {\n var6 = -0.010429019903489632;\n }\n }\n }\n }\n }\n }\n }\n let var7: number;\n if (input[0] > 1e-35) {\n if (input[2] > 2.138333059508028) {\n if (input[1] > 1e-35) {\n if (input[2] > 3.4498615536424366) {\n if (input[3] > 2.249904835165133) {\n var7 = 0.04956831432894648;\n } else {\n if (input[2] > 5.223051249395764) {\n var7 = -0.010305811579773205;\n } else {\n var7 = 0.027491320728082233;\n }\n }\n } else {\n var7 = 0.06656735137915168;\n }\n } else {\n if (input[38] > 1e-35) {\n var7 = 0.05309749470598965;\n } else {\n if (input[30] > 1e-35) {\n var7 = 0.03843762763805799;\n } else {\n var7 = -0.030980078724697425;\n }\n }\n }\n } else {\n if (input[3] > 1e-35) {\n if (input[1] > 1e-35) {\n var7 = 0.08089335516186445;\n } else {\n var7 = 0.04120452858949669;\n }\n } else {\n if (input[6] > 4.832297822126891) {\n if (input[2] > 0.8958797346140276) {\n var7 = 0.10006865536846919;\n } else {\n var7 = 0.11917243570572485;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var7 = 0.06704577104028654;\n } else {\n var7 = -0.1454046740476985;\n }\n } else {\n if (input[219] > 1e-35) {\n var7 = -0.13678871665753098;\n } else {\n var7 = 0.07859247859374968;\n }\n }\n }\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[2] > 3.314020688089767) {\n if (input[3] > 2.249904835165133) {\n var7 = 0.024623237775190106;\n } else {\n if (input[2] > 4.73179313355342) {\n var7 = -0.02080435685185878;\n } else {\n var7 = 0.0026175118278487855;\n }\n }\n } else {\n if (input[6] > 3.417592293073651) {\n if (input[22] > 1e-35) {\n var7 = -0.025465692791530083;\n } else {\n if (input[45] > 1e-35) {\n var7 = -0.044807460105408044;\n } else {\n if (input[8] > 1e-35) {\n var7 = 0.008766235663186964;\n } else {\n var7 = 0.032712521408248645;\n }\n }\n }\n } else {\n if (input[3] > 2.602003343538398) {\n var7 = -0.0056332432294706036;\n } else {\n if (input[6] > 2.524928003624769) {\n var7 = 0.09592889105245415;\n } else {\n var7 = -0.013339150198983546;\n }\n }\n }\n }\n } else {\n if (input[38] > 1e-35) {\n var7 = 0.03563564253379704;\n } else {\n if (input[30] > 1e-35) {\n var7 = 0.014870517098142924;\n } else {\n if (input[2] > 2.970085626360216) {\n var7 = -0.054537994223319376;\n } else {\n if (input[219] > 1e-35) {\n var7 = -0.13242819761683536;\n } else {\n if (input[39] > 1e-35) {\n var7 = -0.0910629106840573;\n } else {\n var7 = -0.01970485337755703;\n }\n }\n }\n }\n }\n }\n }\n let var8: number;\n if (input[0] > 1e-35) {\n if (input[2] > 2.012675845367575) {\n if (input[1] > 1e-35) {\n if (input[2] > 3.4498615536424366) {\n if (input[7] > 0.9246495578512688) {\n var8 = 0.04812308497880073;\n } else {\n if (input[29] > 1e-35) {\n var8 = 0.0005380021336956461;\n } else {\n var8 = 0.03361690381564229;\n }\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n var8 = 0.05947219194425965;\n } else {\n var8 = 0.11024468105183681;\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var8 = 0.04905351957215242;\n } else {\n if (input[138] > 1e-35) {\n var8 = 0.05554447267811877;\n } else {\n var8 = -0.021863233324542066;\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[5] > 4.855921334140645) {\n if (input[2] > 0.8958797346140276) {\n var8 = 0.09590438270550732;\n } else {\n var8 = 0.11498869480105023;\n }\n } else {\n var8 = 0.04093609484315685;\n }\n } else {\n var8 = 0.06588820186431316;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[2] > 2.970085626360216) {\n if (input[29] > 1e-35) {\n if (input[7] > 0.41763374498947375) {\n var8 = 0.0043146758499583255;\n } else {\n var8 = -0.03443798345003191;\n }\n } else {\n if (input[58] > 1e-35) {\n var8 = -0.08355523706358281;\n } else {\n var8 = 0.017928058505534663;\n }\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n if (input[22] > 1e-35) {\n var8 = -0.02209335592785362;\n } else {\n if (input[2] > 0.8958797346140276) {\n var8 = 0.03223396066919647;\n } else {\n var8 = 0.0170789547385017;\n }\n }\n } else {\n if (input[7] > 0.9546729796082215) {\n if (input[2] > 0.8958797346140276) {\n var8 = 0.09545837551902411;\n } else {\n var8 = 0.008923660539643153;\n }\n } else {\n var8 = -0.012322532316048181;\n }\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var8 = 0.03182502017906531;\n } else {\n if (input[138] > 1e-35) {\n if (input[29] > 1e-35) {\n var8 = -0.06617589040350445;\n } else {\n var8 = 0.040440282181288686;\n }\n } else {\n if (input[2] > 2.802901033147999) {\n var8 = -0.043412758816960974;\n } else {\n if (input[219] > 1e-35) {\n var8 = -0.11700143817568372;\n } else {\n if (input[48] > 1e-35) {\n var8 = -0.11379636451926181;\n } else {\n if (input[49] > 1e-35) {\n var8 = -0.14202838670262277;\n } else {\n if (input[39] > 1e-35) {\n var8 = -0.08160450909782378;\n } else {\n var8 = -0.013448620144296253;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var9: number;\n if (input[1] > 1e-35) {\n if (input[2] > 2.602003343538398) {\n if (input[3] > 2.249904835165133) {\n if (input[4] > 3.6505739029280164) {\n var9 = 0.004170792297448336;\n } else {\n var9 = 0.0368033867902024;\n }\n } else {\n if (input[7] > 0.8333442551332461) {\n if (input[2] > 4.677480030793064) {\n var9 = 0.009136341105716223;\n } else {\n var9 = 0.03568813371096505;\n }\n } else {\n if (input[7] > 0.22301866079069904) {\n if (input[2] > 5.1209788959100075) {\n var9 = -0.02365589472388456;\n } else {\n var9 = 0.00919157417627931;\n }\n } else {\n var9 = -0.0379399276194825;\n }\n }\n }\n } else {\n if (input[3] > 1e-35) {\n if (input[5] > 3.5694334999727624) {\n if (input[2] > 0.8958797346140276) {\n if (input[22] > 1e-35) {\n var9 = -0.019258819649469603;\n } else {\n var9 = 0.03709105125649261;\n }\n } else {\n var9 = 0.016860660630369267;\n }\n } else {\n if (input[3] > 2.602003343538398) {\n var9 = -0.00991261350028801;\n } else {\n if (input[7] > 0.9626084674797213) {\n var9 = 0.11517814309711256;\n } else {\n var9 = -0.009719045525281071;\n }\n }\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n if (input[7] > 0.7316379010844482) {\n var9 = 0.07097600019370685;\n } else {\n var9 = 0.04586465946843457;\n }\n } else {\n if (input[6] > 4.783307617946789) {\n var9 = 0.09722756919612678;\n } else {\n if (input[8] > 1e-35) {\n if (input[7] > 0.9793410316570949) {\n var9 = -0.11805054859481241;\n } else {\n var9 = 0.07110946491407406;\n }\n } else {\n var9 = 0.05402719662002902;\n }\n }\n }\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var9 = 0.03393227005537922;\n } else {\n if (input[30] > 1e-35) {\n var9 = 0.023661319650909306;\n } else {\n if (input[2] > 2.970085626360216) {\n if (input[121] > 1e-35) {\n var9 = 0.031049210793405797;\n } else {\n if (input[135] > 1e-35) {\n var9 = -0.10837216222444626;\n } else {\n if (input[219] > 1e-35) {\n var9 = -0.14640457784236915;\n } else {\n var9 = -0.03965818070110935;\n }\n }\n }\n } else {\n if (input[121] > 1e-35) {\n var9 = 0.039992710146502054;\n } else {\n if (input[143] > 1e-35) {\n var9 = -0.09311937611688731;\n } else {\n if (input[46] > 1e-35) {\n var9 = -0.07559392834101462;\n } else {\n if (input[219] > 1e-35) {\n var9 = -0.09895720087616466;\n } else {\n if (input[135] > 1e-35) {\n var9 = -0.07586062007425573;\n } else {\n var9 = -0.011775153504486295;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var10: number;\n if (input[1] > 1e-35) {\n if (input[3] > 1e-35) {\n if (input[141] > 1e-35) {\n var10 = -0.03681630636575175;\n } else {\n if (input[22] > 1e-35) {\n var10 = -0.024594313135047084;\n } else {\n if (input[7] > 0.9626084674797213) {\n if (input[6] > 3.676220550121792) {\n var10 = 0.03355559026428929;\n } else {\n if (input[3] > 2.602003343538398) {\n var10 = 0.012516956280523336;\n } else {\n var10 = 0.1113827943542528;\n }\n }\n } else {\n if (input[3] > 2.3502401828962087) {\n if (input[39] > 1e-35) {\n var10 = -0.03483153469277968;\n } else {\n if (input[29] > 1e-35) {\n var10 = -0.06012725416594425;\n } else {\n var10 = 0.03180949281577552;\n }\n }\n } else {\n if (input[3] > 1.2424533248940002) {\n var10 = 0.007572391854701212;\n } else {\n var10 = -0.04833059473573461;\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.5866799179067689) {\n if (input[138] > 1e-35) {\n var10 = 0.084956566507563;\n } else {\n if (input[7] > 0.9407436463973539) {\n if (input[6] > 5.161920636569023) {\n var10 = 0.07174368742657447;\n } else {\n if (input[7] > 0.9793410316570949) {\n var10 = 0.024186357466630726;\n } else {\n var10 = 0.07739671408330714;\n }\n }\n } else {\n var10 = 0.048429456456843774;\n }\n }\n } else {\n if (input[6] > 5.078289090109146) {\n if (input[138] > 1e-35) {\n var10 = 0.07555203090037793;\n } else {\n var10 = 0.033181836695182196;\n }\n } else {\n var10 = -0.02197298038836975;\n }\n }\n }\n } else {\n if (input[38] > 1e-35) {\n var10 = 0.031334580210504996;\n } else {\n if (input[30] > 1e-35) {\n var10 = 0.021270582199851534;\n } else {\n if (input[121] > 1e-35) {\n var10 = 0.0329970846397004;\n } else {\n if (input[42] > 1e-35) {\n var10 = 0.04064092183581017;\n } else {\n if (input[135] > 1e-35) {\n var10 = -0.08440485061890712;\n } else {\n if (input[219] > 1e-35) {\n var10 = -0.10638369254266776;\n } else {\n if (input[143] > 1e-35) {\n var10 = -0.09755269717731242;\n } else {\n if (input[144] > 1e-35) {\n var10 = -0.1173397395002877;\n } else {\n if (input[51] > 1e-35) {\n var10 = -0.1288517354356988;\n } else {\n if (input[49] > 1e-35) {\n var10 = -0.13923283846721088;\n } else {\n if (input[91] > 1e-35) {\n var10 = -0.1224188861275682;\n } else {\n if (input[3] > 3.156774023138548) {\n var10 = -0.02477169567121223;\n } else {\n var10 = -0.006917307470148426;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var11: number;\n if (input[2] > 2.802901033147999) {\n if (input[7] > 0.9159108669154322) {\n if (input[3] > 3.314020688089767) {\n var11 = -0.0010700017432373199;\n } else {\n if (input[2] > 4.832297822126891) {\n var11 = 0.009582861728698568;\n } else {\n var11 = 0.029780100164495754;\n }\n }\n } else {\n if (input[30] > 1e-35) {\n if (input[210] > 1e-35) {\n var11 = -0.028942339056712313;\n } else {\n var11 = 0.020599853201598167;\n }\n } else {\n if (input[3] > 3.540854293052788) {\n var11 = -0.030156164189210577;\n } else {\n if (input[2] > 4.620046665062766) {\n if (input[3] > 1.8688348091416842) {\n var11 = -0.00103151911027294;\n } else {\n if (input[217] > 1e-35) {\n var11 = 0.005930672148987754;\n } else {\n var11 = -0.03586108945255643;\n }\n }\n } else {\n var11 = 0.004417350848115493;\n }\n }\n }\n }\n } else {\n if (input[3] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[5] > 3.5694334999727624) {\n if (input[3] > 3.6242520361853052) {\n if (input[30] > 1e-35) {\n var11 = 0.02388317653477103;\n } else {\n var11 = -0.0034021644637823034;\n }\n } else {\n if (input[125] > 1e-35) {\n var11 = -0.059034648546006076;\n } else {\n if (input[18] > 1e-35) {\n var11 = -0.02514305472376584;\n } else {\n if (input[46] > 1e-35) {\n var11 = -0.05290744310611087;\n } else {\n if (input[21] > 1e-35) {\n var11 = -0.03750702516022783;\n } else {\n if (input[39] > 1e-35) {\n var11 = -0.031092446888446753;\n } else {\n var11 = 0.028272541588979773;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.9676186228082213) {\n if (input[3] > 2.602003343538398) {\n var11 = -0.009169247394016047;\n } else {\n var11 = 0.11347856526033356;\n }\n } else {\n var11 = -0.00310251177264949;\n }\n }\n } else {\n if (input[2] > 1e-35) {\n var11 = 0.00844340216096322;\n } else {\n var11 = -0.00894414829369423;\n }\n }\n } else {\n if (input[2] > 1.4978661367769956) {\n if (input[7] > 0.6223082132708274) {\n if (input[6] > 3.0677824455408698) {\n var11 = 0.04885293193722139;\n } else {\n var11 = 0.10736598620828455;\n }\n } else {\n var11 = 0.026545392586289893;\n }\n } else {\n if (input[6] > 4.938058177869999) {\n if (input[2] > 0.8958797346140276) {\n var11 = 0.07355143458077283;\n } else {\n var11 = 0.09420954595651049;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var11 = 0.07966619891180966;\n } else {\n var11 = -0.10471235843714122;\n }\n } else {\n var11 = 0.04867207725748343;\n }\n }\n }\n }\n }\n let var12: number;\n if (input[1] > 1e-35) {\n if (input[3] > 1e-35) {\n if (input[5] > 3.5694334999727624) {\n if (input[3] > 2.249904835165133) {\n if (input[22] > 1e-35) {\n var12 = -0.0262424908256809;\n } else {\n if (input[8] > 1e-35) {\n var12 = 0.001637419319408071;\n } else {\n if (input[155] > 1e-35) {\n var12 = 0.053444838794586114;\n } else {\n if (input[99] > 1e-35) {\n var12 = 0.05039717103923269;\n } else {\n var12 = 0.02448689278350471;\n }\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n var12 = -0.05723199469388615;\n } else {\n var12 = 0.005411562031545046;\n }\n }\n } else {\n if (input[7] > 0.9626084674797213) {\n if (input[3] > 2.602003343538398) {\n var12 = 0.00980665121101267;\n } else {\n var12 = 0.10420505846679201;\n }\n } else {\n var12 = -0.001639851950872336;\n }\n }\n } else {\n if (input[7] > 0.26911173821332884) {\n if (input[138] > 1e-35) {\n var12 = 0.07591724033622518;\n } else {\n if (input[7] > 0.9275861021112151) {\n if (input[5] > 5.173316863805991) {\n var12 = 0.06276466446882598;\n } else {\n if (input[194] > 1e-35) {\n var12 = -0.1330802382498368;\n } else {\n if (input[5] > 3.156774023138548) {\n if (input[8] > 1e-35) {\n var12 = -0.027034262965141144;\n } else {\n var12 = 0.03949417085855365;\n }\n } else {\n var12 = 0.08851962788853085;\n }\n }\n }\n } else {\n if (input[9] > 1e-35) {\n var12 = 0.05379608621573637;\n } else {\n var12 = 0.032253635727649325;\n }\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var12 = 0.058048925881989615;\n } else {\n var12 = 0.005620237500451222;\n }\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var12 = 0.02734220426041116;\n } else {\n if (input[30] > 1e-35) {\n var12 = 0.017746745665275825;\n } else {\n if (input[142] > 1e-35) {\n var12 = -0.07814745820732061;\n } else {\n if (input[143] > 1e-35) {\n var12 = -0.08860968498533135;\n } else {\n if (input[14] > 1e-35) {\n var12 = 0.01954819512523945;\n } else {\n if (input[42] > 1e-35) {\n var12 = 0.03333354798081121;\n } else {\n if (input[147] > 1e-35) {\n var12 = -0.11642554317575503;\n } else {\n if (input[49] > 1e-35) {\n var12 = -0.12425086420883341;\n } else {\n if (input[146] > 1e-35) {\n var12 = -0.12996952774815626;\n } else {\n if (input[3] > 3.817651943129708) {\n var12 = -0.03275661606585881;\n } else {\n var12 = -0.014860694091417102;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var13: number;\n if (input[1] > 1e-35) {\n if (input[2] > 2.524928003624769) {\n if (input[3] > 2.249904835165133) {\n if (input[3] > 3.725620842493839) {\n var13 = -0.000906155627647317;\n } else {\n if (input[24] > 1e-35) {\n var13 = 0.0785324151067157;\n } else {\n if (input[154] > 1e-35) {\n var13 = -0.058309500036909157;\n } else {\n var13 = 0.026762512119806844;\n }\n }\n }\n } else {\n if (input[7] > 0.26911173821332884) {\n if (input[2] > 4.505334588423558) {\n var13 = -0.010584135839537876;\n } else {\n var13 = 0.013982545022862853;\n }\n } else {\n var13 = -0.03208712711019827;\n }\n }\n } else {\n if (input[3] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[5] > 3.5694334999727624) {\n var13 = 0.026401003398891884;\n } else {\n if (input[3] > 2.602003343538398) {\n var13 = -0.008168418058515686;\n } else {\n if (input[7] > 0.9662372103242399) {\n var13 = 0.10626422692131453;\n } else {\n var13 = -0.01031637351522216;\n }\n }\n }\n } else {\n var13 = 0.010358942714602982;\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n if (input[2] > 2.012675845367575) {\n var13 = 0.0312811686023135;\n } else {\n var13 = 0.05423507965224627;\n }\n } else {\n if (input[6] > 4.832297822126891) {\n var13 = 0.08479742987484738;\n } else {\n if (input[8] > 1e-35) {\n if (input[7] > 0.9793410316570949) {\n var13 = -0.09338070882722671;\n } else {\n var13 = 0.058145805002919916;\n }\n } else {\n var13 = 0.04227449937397909;\n }\n }\n }\n }\n }\n } else {\n if (input[38] > 1e-35) {\n var13 = 0.025289091019879376;\n } else {\n if (input[2] > 3.1132683346437333) {\n if (input[3] > 0.8958797346140276) {\n if (input[46] > 1e-35) {\n var13 = -0.09114331684757576;\n } else {\n if (input[135] > 1e-35) {\n var13 = -0.07948190608487016;\n } else {\n if (input[48] > 1e-35) {\n var13 = -0.12911151777601662;\n } else {\n if (input[143] > 1e-35) {\n var13 = -0.09735205976374478;\n } else {\n var13 = -0.017192402584465798;\n }\n }\n }\n }\n } else {\n var13 = -0.08661537827420282;\n }\n } else {\n if (input[217] > 1e-35) {\n var13 = 0.033425023239885124;\n } else {\n if (input[14] > 1e-35) {\n var13 = 0.02729990952110066;\n } else {\n if (input[48] > 1e-35) {\n var13 = -0.09098188061865646;\n } else {\n if (input[46] > 1e-35) {\n var13 = -0.05848458618550134;\n } else {\n if (input[91] > 1e-35) {\n var13 = -0.10969774095556883;\n } else {\n var13 = -0.0068971807474334365;\n }\n }\n }\n }\n }\n }\n }\n }\n let var14: number;\n if (input[1] > 1e-35) {\n if (input[3] > 1e-35) {\n if (input[3] > 1.2424533248940002) {\n if (input[125] > 1e-35) {\n var14 = -0.06150017523108556;\n } else {\n if (input[39] > 1e-35) {\n var14 = -0.03350257370473994;\n } else {\n if (input[22] > 1e-35) {\n var14 = -0.02193617429266551;\n } else {\n if (input[8] > 1e-35) {\n var14 = 0.00007274245146620154;\n } else {\n if (input[6] > 3.676220550121792) {\n if (input[4] > 2.3502401828962087) {\n var14 = 0.026702786904914785;\n } else {\n var14 = 0.00851181280021978;\n }\n } else {\n if (input[4] > 2.673553765358735) {\n var14 = 0.010358811529123666;\n } else {\n if (input[6] > 2.802901033147999) {\n var14 = 0.08891517935366504;\n } else {\n var14 = 0.023114323891227237;\n }\n }\n }\n }\n }\n }\n }\n } else {\n var14 = -0.02875694375159779;\n }\n } else {\n if (input[4] > 1.7005986908310777) {\n if (input[138] > 1e-35) {\n var14 = 0.06720372648635974;\n } else {\n if (input[6] > 5.427147823217923) {\n if (input[9] > 1e-35) {\n var14 = 0.0544777682515472;\n } else {\n var14 = 0.037060547607205986;\n }\n } else {\n if (input[6] > 1e-35) {\n var14 = 0.022016394753027843;\n } else {\n var14 = -0.1559604133821172;\n }\n }\n }\n } else {\n if (input[6] > 3.540854293052788) {\n var14 = -0.009372509268454739;\n } else {\n var14 = -0.24388295956457617;\n }\n }\n }\n } else {\n if (input[38] > 1e-35) {\n var14 = 0.023012278764368795;\n } else {\n if (input[138] > 1e-35) {\n var14 = 0.03564423186175008;\n } else {\n if (input[30] > 1e-35) {\n var14 = 0.008093643695090883;\n } else {\n if (input[217] > 1e-35) {\n var14 = 0.028810461962454004;\n } else {\n if (input[135] > 1e-35) {\n var14 = -0.07120877224354143;\n } else {\n if (input[46] > 1e-35) {\n var14 = -0.06546454537408128;\n } else {\n if (input[144] > 1e-35) {\n var14 = -0.09534262423492412;\n } else {\n if (input[143] > 1e-35) {\n var14 = -0.0770344566882831;\n } else {\n if (input[29] > 1e-35) {\n var14 = -0.06285371287531509;\n } else {\n if (input[14] > 1e-35) {\n var14 = 0.02073120300153793;\n } else {\n if (input[123] > 1e-35) {\n var14 = -0.09016320513643451;\n } else {\n if (input[51] > 1e-35) {\n var14 = -0.10496442920973255;\n } else {\n if (input[3] > 3.1132683346437333) {\n var14 = -0.019949599427836494;\n } else {\n var14 = -0.0019060085544902166;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var15: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.8688348091416842) {\n if (input[2] > 3.1984648276080736) {\n if (input[1] > 1e-35) {\n if (input[3] > 2.249904835165133) {\n var15 = 0.03174009468268253;\n } else {\n if (input[2] > 5.363634090365639) {\n var15 = -0.019608371322822362;\n } else {\n var15 = 0.012560836552403976;\n }\n }\n } else {\n var15 = -0.006925466014569184;\n }\n } else {\n if (input[1] > 1e-35) {\n var15 = 0.047796055675515446;\n } else {\n var15 = 0.014363935217773802;\n }\n }\n } else {\n if (input[6] > 5.391349638084432) {\n if (input[2] > 0.8958797346140276) {\n if (input[3] > 1e-35) {\n var15 = 0.05193425865217324;\n } else {\n var15 = 0.07891754708034264;\n }\n } else {\n var15 = 0.09859506024630252;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[5] > 4.424828703319957) {\n var15 = 0.0288226384042998;\n } else {\n var15 = -0.09397342098461306;\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n var15 = 0.06181532763949055;\n } else {\n if (input[3] > 1e-35) {\n var15 = 0.0661728888522049;\n } else {\n var15 = -0.18938681666136592;\n }\n }\n }\n }\n }\n } else {\n if (input[2] > 3.6242520361853052) {\n if (input[30] > 1e-35) {\n var15 = 0.005754128097002715;\n } else {\n if (input[4] > 1.7005986908310777) {\n if (input[1] > 1e-35) {\n if (input[3] > 1.8688348091416842) {\n var15 = 0.003940381852503271;\n } else {\n var15 = -0.01767544594631589;\n }\n } else {\n if (input[134] > 1e-35) {\n var15 = 0.005683243725945637;\n } else {\n var15 = -0.033167818200618454;\n }\n }\n } else {\n var15 = -0.049739953036904844;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[5] > 3.417592293073651) {\n if (input[3] > 2.249904835165133) {\n if (input[3] > 4.051747139190486) {\n var15 = -0.013281167238314323;\n } else {\n var15 = 0.016971087295600894;\n }\n } else {\n var15 = -0.0032296953806057044;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[3] > 1e-35) {\n var15 = -0.09772932329003692;\n } else {\n var15 = 0.10215199291158968;\n }\n } else {\n if (input[3] > 1e-35) {\n var15 = 0.04042124133857408;\n } else {\n if (input[4] > 1.7005986908310777) {\n var15 = -0.03780917296974188;\n } else {\n var15 = -0.29617407728303585;\n }\n }\n }\n }\n } else {\n if (input[3] > 1.2424533248940002) {\n if (input[134] > 1e-35) {\n var15 = 0.019695468056761475;\n } else {\n var15 = -0.008073287117671947;\n }\n } else {\n var15 = -0.07196945037292647;\n }\n }\n }\n }\n let var16: number;\n if (input[0] > 1e-35) {\n if (input[3] > 1e-35) {\n if (input[30] > 1e-35) {\n var16 = 0.04565870990720628;\n } else {\n if (input[4] > 3.481121732133104) {\n var16 = -0.0010242035152053465;\n } else {\n if (input[46] > 1e-35) {\n var16 = -0.06735757101078846;\n } else {\n var16 = 0.028047085557873476;\n }\n }\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n var16 = 0.061451212522936484;\n } else {\n var16 = -0.008994471708946133;\n }\n }\n } else {\n if (input[4] > 3.8815106545092593) {\n var16 = -0.015862290359637304;\n } else {\n if (input[4] > 1.2424533248940002) {\n if (input[156] > 1e-35) {\n var16 = -0.0353203284829365;\n } else {\n if (input[135] > 1e-35) {\n var16 = -0.029955239188290975;\n } else {\n if (input[153] > 1e-35) {\n var16 = -0.024262881593313065;\n } else {\n if (input[21] > 1e-35) {\n var16 = -0.04039396048201336;\n } else {\n if (input[155] > 1e-35) {\n var16 = 0.031605649750965394;\n } else {\n if (input[46] > 1e-35) {\n var16 = -0.0412690351363074;\n } else {\n if (input[18] > 1e-35) {\n var16 = -0.02516534034859168;\n } else {\n if (input[51] > 1e-35) {\n var16 = -0.09383050740007202;\n } else {\n if (input[219] > 1e-35) {\n if (input[30] > 1e-35) {\n var16 = 0.05781620337941066;\n } else {\n var16 = -0.031029108058883783;\n }\n } else {\n if (input[54] > 1e-35) {\n var16 = -0.1312103962175427;\n } else {\n if (input[14] > 1e-35) {\n var16 = 0.029309503966067275;\n } else {\n if (input[52] > 1e-35) {\n var16 = -0.12376041877584809;\n } else {\n if (input[49] > 1e-35) {\n var16 = -0.08405476403385437;\n } else {\n if (input[129] > 1e-35) {\n var16 = -0.07017699310303659;\n } else {\n if (input[3] > 3.238486181444842) {\n var16 = 0.0005864979938663785;\n } else {\n if (input[90] > 1e-35) {\n var16 = -0.19027994988708324;\n } else {\n if (input[4] > 2.4414009612931857) {\n var16 = 0.013036973814688194;\n } else {\n if (input[141] > 1e-35) {\n var16 = -0.05866284827055356;\n } else {\n if (input[196] > 1e-35) {\n if (\n input[3] >\n 1.2424533248940002\n ) {\n if (\n input[3] >\n 1.4978661367769956\n ) {\n var16 = 0.021738540839636195;\n } else {\n var16 = 0.10410506831002041;\n }\n } else {\n var16 =\n -0.25590968590756463;\n }\n } else {\n var16 = 0.0023982515170817725;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var16 = -0.04143304307857132;\n }\n }\n }\n let var17: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.8688348091416842) {\n if (input[2] > 3.417592293073651) {\n if (input[2] > 5.335128436483344) {\n var17 = -0.011443269019739626;\n } else {\n if (input[1] > 1e-35) {\n var17 = 0.015228192424880932;\n } else {\n var17 = -0.005492858431736962;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[5] > 3.5694334999727624) {\n var17 = 0.03605247912942737;\n } else {\n var17 = 0.08439131345296227;\n }\n } else {\n var17 = 0.009650676995478455;\n }\n }\n } else {\n if (input[5] > 5.096808314315481) {\n if (input[2] > 0.8958797346140276) {\n if (input[29] > 1e-35) {\n var17 = 0.07077360688836766;\n } else {\n var17 = 0.044754385330663386;\n }\n } else {\n var17 = 0.09313294724999382;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var17 = 0.04214845406094496;\n } else {\n var17 = -0.10283747682230321;\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n var17 = 0.05232959789940822;\n } else {\n if (input[2] > 0.8958797346140276) {\n var17 = 0.00730829946441921;\n } else {\n var17 = -0.23825070451282065;\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.9358314658959646) {\n if (input[5] > 3.417592293073651) {\n if (input[8] > 1e-35) {\n var17 = -0.013117301012430346;\n } else {\n var17 = 0.010418379595902224;\n }\n } else {\n if (input[19] > 1e-35) {\n var17 = -0.07514668047310291;\n } else {\n var17 = 0.05032486941219513;\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[7] > 0.14547530463198097) {\n if (input[4] > 2.138333059508028) {\n var17 = -0.009576060406554683;\n } else {\n var17 = -0.04582944318062007;\n }\n } else {\n var17 = -0.04685159067258116;\n }\n } else {\n var17 = -0.07022291581850879;\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[4] > 2.3502401828962087) {\n if (input[4] > 3.8815106545092593) {\n var17 = -0.008313873320272646;\n } else {\n if (input[140] > 1e-35) {\n var17 = -0.029352675967497712;\n } else {\n if (input[37] > 1e-35) {\n var17 = -0.09937923794037767;\n } else {\n var17 = 0.015967772276156707;\n }\n }\n }\n } else {\n var17 = -0.009857373135428817;\n }\n } else {\n if (input[38] > 1e-35) {\n var17 = 0.011345159604794278;\n } else {\n if (input[2] > 2.4414009612931857) {\n if (input[30] > 1e-35) {\n var17 = 0.001522017389940959;\n } else {\n var17 = -0.026992183902105407;\n }\n } else {\n var17 = -0.006358778971076675;\n }\n }\n }\n }\n }\n }\n let var18: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.8688348091416842) {\n if (input[2] > 2.970085626360216) {\n if (input[7] > 0.8649016459419877) {\n var18 = 0.018617011644318126;\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 4.832297822126891) {\n var18 = -0.03407648259949232;\n } else {\n var18 = -0.0036502511604675977;\n }\n } else {\n if (input[4] > 3.540854293052788) {\n var18 = -0.00934040898683245;\n } else {\n var18 = 0.010922739771398862;\n }\n }\n }\n } else {\n if (input[7] > 0.9676186228082213) {\n var18 = 0.05137169375874399;\n } else {\n var18 = 0.02682190004807807;\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var18 = 0.065076078729683;\n } else {\n if (input[8] > 1e-35) {\n if (input[7] > 0.9750059495478345) {\n if (input[7] > 0.996914501566243) {\n var18 = 0.08915557171019604;\n } else {\n var18 = -0.06286636147644172;\n }\n } else {\n var18 = 0.0902247220475161;\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n var18 = 0.09051085461905525;\n } else {\n if (input[9] > 1e-35) {\n var18 = -0.19701197524821418;\n } else {\n var18 = 0.005536577088671752;\n }\n }\n }\n }\n } else {\n if (input[30] > 1e-35) {\n var18 = 0.0682573098268795;\n } else {\n var18 = 0.031380692115494484;\n }\n }\n }\n } else {\n if (input[2] > 4.151008904875603) {\n if (input[155] > 1e-35) {\n var18 = 0.026867659395235544;\n } else {\n if (input[7] > 0.5866799179067689) {\n var18 = -0.008345671861059714;\n } else {\n var18 = -0.02185200164340811;\n }\n }\n } else {\n if (input[7] > 0.9626084674797213) {\n if (input[22] > 1e-35) {\n var18 = -0.024341883095402903;\n } else {\n if (input[141] > 1e-35) {\n if (input[29] > 1e-35) {\n var18 = 0.08888912525147288;\n } else {\n var18 = -0.040584195806350004;\n }\n } else {\n var18 = 0.014817521849450843;\n }\n }\n } else {\n if (input[4] > 1.7005986908310777) {\n if (input[4] > 3.9219243190762363) {\n var18 = -0.01259238316205765;\n } else {\n if (input[156] > 1e-35) {\n var18 = -0.03305969547622109;\n } else {\n if (input[50] > 1e-35) {\n var18 = -0.10133912689920138;\n } else {\n if (input[155] > 1e-35) {\n var18 = 0.025358210175047153;\n } else {\n if (input[55] > 1e-35) {\n var18 = -0.14645261489281414;\n } else {\n if (input[9] > 1e-35) {\n var18 = 0.012035823488806215;\n } else {\n var18 = 0.0010743871783232305;\n }\n }\n }\n }\n }\n }\n } else {\n var18 = -0.030440082321355873;\n }\n }\n }\n }\n let var19: number;\n if (input[0] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[7] > 0.30853255358841714) {\n if (input[4] > 0.8958797346140276) {\n if (input[138] > 1e-35) {\n var19 = 0.0708169212387357;\n } else {\n if (input[7] > 0.9974623466432676) {\n var19 = 0.06323909894881967;\n } else {\n var19 = 0.04463133906529934;\n }\n }\n } else {\n var19 = -0.006876640569960593;\n }\n } else {\n if (input[4] > 2.138333059508028) {\n var19 = 0.02983313061920756;\n } else {\n var19 = -0.012849740499321841;\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var19 = 0.05170725384597862;\n } else {\n if (input[134] > 1e-35) {\n var19 = 0.03407970940934425;\n } else {\n if (input[32] > 1e-35) {\n var19 = 0.04641257566344885;\n } else {\n if (input[217] > 1e-35) {\n var19 = 0.04726549849359106;\n } else {\n if (input[152] > 1e-35) {\n var19 = 0.04284855498215312;\n } else {\n var19 = -0.018635981778740818;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.9358314658959646) {\n if (input[1] > 1e-35) {\n var19 = 0.013495195381145214;\n } else {\n var19 = -0.0017562536904350947;\n }\n } else {\n if (input[153] > 1e-35) {\n var19 = -0.035450683955968364;\n } else {\n if (input[135] > 1e-35) {\n var19 = -0.033677490938511655;\n } else {\n if (input[1] > 1e-35) {\n if (input[156] > 1e-35) {\n var19 = -0.03492338371344172;\n } else {\n if (input[4] > 2.012675845367575) {\n if (input[8] > 1e-35) {\n var19 = -0.012478407554855247;\n } else {\n if (input[58] > 1e-35) {\n var19 = -0.06588308463544146;\n } else {\n var19 = 0.01024668455910621;\n }\n }\n } else {\n var19 = -0.017964352445712636;\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var19 = 0.023509519134334668;\n } else {\n if (input[134] > 1e-35) {\n var19 = 0.009985116251562821;\n } else {\n if (input[219] > 1e-35) {\n var19 = -0.08089904073615993;\n } else {\n if (input[144] > 1e-35) {\n var19 = -0.08668450969211726;\n } else {\n if (input[146] > 1e-35) {\n var19 = -0.11193950701534479;\n } else {\n if (input[91] > 1e-35) {\n var19 = -0.09510832561737878;\n } else {\n if (input[47] > 1e-35) {\n var19 = -0.06671901650698997;\n } else {\n if (input[145] > 1e-35) {\n var19 = -0.10185972302071798;\n } else {\n if (input[142] > 1e-35) {\n var19 = -0.050979038763275586;\n } else {\n var19 = -0.008318124414257324;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var20: number;\n if (input[2] > 2.4414009612931857) {\n if (input[7] > 0.5866799179067689) {\n if (input[1] > 1e-35) {\n if (input[2] > 5.059420419187638) {\n var20 = -0.004966114458456121;\n } else {\n if (input[3] > 1.4978661367769956) {\n if (input[6] > 3.9219243190762363) {\n var20 = 0.016160825033090097;\n } else {\n if (input[4] > 2.673553765358735) {\n var20 = -0.008119911797705546;\n } else {\n if (input[7] > 0.9676186228082213) {\n var20 = 0.10191214482603793;\n } else {\n var20 = 0.010406721157764452;\n }\n }\n }\n } else {\n if (input[4] > 2.602003343538398) {\n var20 = 0.011963972867583182;\n } else {\n if (input[209] > 1e-35) {\n if (input[24] > 1e-35) {\n var20 = -0.4633165603515741;\n } else {\n var20 = -0.027241411195905924;\n }\n } else {\n var20 = -0.01021341522779383;\n }\n }\n }\n }\n } else {\n if (input[3] > 0.8958797346140276) {\n if (input[39] > 1e-35) {\n var20 = -0.07106669495723826;\n } else {\n var20 = -0.003949154414882924;\n }\n } else {\n var20 = -0.06434150131915288;\n }\n }\n } else {\n if (input[3] > 1.7005986908310777) {\n if (input[1] > 1e-35) {\n var20 = 0.005050893558647285;\n } else {\n var20 = -0.01649483548684653;\n }\n } else {\n if (input[217] > 1e-35) {\n var20 = 0.0027009145619870485;\n } else {\n if (input[7] > 0.16413460456379095) {\n var20 = -0.021492035902356262;\n } else {\n var20 = -0.04956173856083012;\n }\n }\n }\n }\n } else {\n if (input[3] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[4] > 3.314020688089767) {\n var20 = 0.004614615289098078;\n } else {\n if (input[125] > 1e-35) {\n var20 = -0.053838919278819175;\n } else {\n if (input[141] > 1e-35) {\n var20 = -0.031232660335016666;\n } else {\n if (input[7] > 0.9676186228082213) {\n var20 = 0.031522536832188655;\n } else {\n var20 = 0.016369948821613637;\n }\n }\n }\n }\n } else {\n var20 = -0.001970208279177045;\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n if (input[7] > 0.8045995506441456) {\n if (input[6] > 3.0677824455408698) {\n var20 = 0.035653122678366796;\n } else {\n var20 = 0.09668798382116887;\n }\n } else {\n var20 = 0.017192957672541906;\n }\n } else {\n if (input[6] > 5.427147823217923) {\n if (input[2] > 0.8958797346140276) {\n var20 = 0.05167603828162103;\n } else {\n var20 = 0.07201242912898732;\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[6] > 4.3882378946731615) {\n var20 = 0.04079789432551034;\n } else {\n var20 = -0.00477197753110532;\n }\n } else {\n var20 = -0.1330224689055222;\n }\n }\n }\n }\n }\n let var21: number;\n if (input[0] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[6] > 5.519456907163478) {\n if (input[3] > 1e-35) {\n var21 = 0.025938224253040522;\n } else {\n if (input[7] > 0.9480659774309611) {\n var21 = 0.06369970668749851;\n } else {\n var21 = 0.04567224211157202;\n }\n }\n } else {\n if (input[8] > 1e-35) {\n var21 = -0.03272937728465352;\n } else {\n if (input[7] > 0.8002228006195066) {\n if (input[219] > 1e-35) {\n var21 = -0.06304921759586735;\n } else {\n var21 = 0.04293432033794005;\n }\n } else {\n var21 = 0.0034607309539607385;\n }\n }\n }\n } else {\n if (input[30] > 1e-35) {\n var21 = 0.03333728636724803;\n } else {\n if (input[134] > 1e-35) {\n var21 = 0.03171739664928598;\n } else {\n if (input[32] > 1e-35) {\n var21 = 0.04247521237473512;\n } else {\n if (input[217] > 1e-35) {\n var21 = 0.04515237436183519;\n } else {\n if (input[138] > 1e-35) {\n var21 = 0.043674672816657406;\n } else {\n var21 = -0.021495642896979555;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[153] > 1e-35) {\n if (input[7] > 0.7405695827634472) {\n var21 = -0.005353425538700483;\n } else {\n var21 = -0.03818743916821677;\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[156] > 1e-35) {\n var21 = -0.026937004040991603;\n } else {\n if (input[9] > 1e-35) {\n var21 = 0.01687211330975012;\n } else {\n if (input[129] > 1e-35) {\n var21 = -0.06344334253531962;\n } else {\n if (input[5] > 3.276966702012906) {\n if (input[3] > 2.4414009612931857) {\n if (input[3] > 4.3882378946731615) {\n var21 = -0.029787052855333836;\n } else {\n if (input[140] > 1e-35) {\n var21 = -0.0315337765152156;\n } else {\n var21 = 0.01010125865272709;\n }\n }\n } else {\n var21 = -0.003643087951301554;\n }\n } else {\n if (input[3] > 1.8688348091416842) {\n var21 = -0.009293469974765106;\n } else {\n if (input[7] > 0.9407436463973539) {\n if (input[19] > 1e-35) {\n var21 = -0.10837629052758145;\n } else {\n var21 = 0.08012552652666853;\n }\n } else {\n var21 = -0.03240188731353479;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[3] > 0.8958797346140276) {\n if (input[138] > 1e-35) {\n var21 = 0.028089541906112948;\n } else {\n if (input[134] > 1e-35) {\n var21 = 0.011775653029555359;\n } else {\n if (input[54] > 1e-35) {\n var21 = -0.1329256322319015;\n } else {\n var21 = -0.010520589644656487;\n }\n }\n }\n } else {\n var21 = -0.058476715353390545;\n }\n }\n }\n }\n let var22: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.7005986908310777) {\n if (input[2] > 2.970085626360216) {\n if (input[3] > 1.4978661367769956) {\n if (input[1] > 1e-35) {\n var22 = 0.015966021866473425;\n } else {\n var22 = -0.004942501766182043;\n }\n } else {\n if (input[7] > 0.7646034107159144) {\n var22 = 0.0008922354520049755;\n } else {\n var22 = -0.02377096637770522;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n var22 = 0.03185471115279236;\n } else {\n var22 = 0.009030463601278762;\n }\n }\n } else {\n if (input[6] > 5.033695261903033) {\n if (input[2] > 0.8958797346140276) {\n if (input[3] > 1e-35) {\n var22 = 0.03583918176912262;\n } else {\n var22 = 0.05978765203310842;\n }\n } else {\n if (input[3] > 1.4978661367769956) {\n var22 = 0.04363706154403441;\n } else {\n var22 = 0.08596238935719265;\n }\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[4] > 3.676220550121792) {\n var22 = -0.14139420543234502;\n } else {\n if (input[6] > 4.135134555718313) {\n var22 = 0.06641653507737781;\n } else {\n var22 = -0.08482961471233386;\n }\n }\n } else {\n if (input[219] > 1e-35) {\n var22 = -0.08432601495298837;\n } else {\n var22 = 0.036383288293587494;\n }\n }\n }\n }\n } else {\n if (input[2] > 4.212100162283537) {\n if (input[4] > 4.06899022722607) {\n var22 = -0.027653216441781994;\n } else {\n if (input[4] > 1.2424533248940002) {\n var22 = -0.0074990353344818825;\n } else {\n var22 = -0.047274115298751654;\n }\n }\n } else {\n if (input[3] > 4.350257124271638) {\n var22 = -0.021535524001034215;\n } else {\n if (input[7] > 0.9626084674797213) {\n if (input[6] > 3.314020688089767) {\n var22 = 0.008343192891130257;\n } else {\n if (input[3] > 2.602003343538398) {\n var22 = -0.029175290449111352;\n } else {\n if (input[19] > 1e-35) {\n var22 = -0.0982821612709299;\n } else {\n var22 = 0.07967468666491928;\n }\n }\n }\n } else {\n if (input[3] > 2.012675845367575) {\n if (input[1] > 1e-35) {\n if (input[141] > 1e-35) {\n var22 = -0.050000478457880464;\n } else {\n if (input[99] > 1e-35) {\n var22 = 0.03066844761711629;\n } else {\n var22 = 0.00757148708610041;\n }\n }\n } else {\n if (input[14] > 1e-35) {\n var22 = 0.030325269400598688;\n } else {\n if (input[138] > 1e-35) {\n var22 = 0.029925649226634522;\n } else {\n var22 = -0.005865781126590595;\n }\n }\n }\n } else {\n if (input[7] > 0.14547530463198097) {\n var22 = -0.006746433384005582;\n } else {\n var22 = -0.03419211369300411;\n }\n }\n }\n }\n }\n }\n let var23: number;\n if (input[7] > 0.8453853180651066) {\n if (input[9] > 1e-35) {\n if (input[204] > 1e-35) {\n if (input[5] > 3.979637980058199) {\n var23 = 0.03492440471960614;\n } else {\n var23 = 0.10640952227810228;\n }\n } else {\n var23 = 0.024674544399570984;\n }\n } else {\n if (input[21] > 1e-35) {\n var23 = -0.03056548710005192;\n } else {\n if (input[24] > 1e-35) {\n var23 = 0.04417102228084844;\n } else {\n if (input[18] > 1e-35) {\n if (input[5] > 3.417592293073651) {\n var23 = -0.01915628728670732;\n } else {\n var23 = 0.08218968786016527;\n }\n } else {\n if (input[22] > 1e-35) {\n var23 = -0.015022557207326592;\n } else {\n if (input[7] > 0.9941118339384912) {\n var23 = 0.024199625103362956;\n } else {\n if (input[135] > 1e-35) {\n var23 = -0.01204089678887213;\n } else {\n if (input[5] > 3.156774023138548) {\n if (input[14] > 1e-35) {\n var23 = 0.03343354440638259;\n } else {\n if (input[144] > 1e-35) {\n var23 = -0.06832894943893354;\n } else {\n var23 = 0.0114980261254499;\n }\n }\n } else {\n if (input[12] > 1e-35) {\n if (input[100] > 1e-35) {\n var23 = 0.09915326976032354;\n } else {\n var23 = -0.011405707270850872;\n }\n } else {\n var23 = 0.05400113313957842;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var23 = 0.029070115198082648;\n } else {\n if (input[7] > 0.11348809759407426) {\n if (input[9] > 1e-35) {\n var23 = 0.0124381999772114;\n } else {\n if (input[14] > 1e-35) {\n var23 = 0.021548670539672424;\n } else {\n if (input[152] > 1e-35) {\n var23 = 0.02386756199239544;\n } else {\n if (input[155] > 1e-35) {\n var23 = 0.024879667358339554;\n } else {\n if (input[217] > 1e-35) {\n var23 = 0.014495299809094343;\n } else {\n if (input[17] > 1e-35) {\n var23 = 0.023665548251738264;\n } else {\n if (input[21] > 1e-35) {\n var23 = -0.04352613176288253;\n } else {\n if (input[142] > 1e-35) {\n var23 = -0.041479100066479035;\n } else {\n if (input[47] > 1e-35) {\n var23 = -0.054730987834988636;\n } else {\n if (input[135] > 1e-35) {\n var23 = -0.02041552814087628;\n } else {\n if (input[12] > 1e-35) {\n var23 = 0.00599257601351913;\n } else {\n if (input[19] > 1e-35) {\n var23 = 0.017289098956116435;\n } else {\n var23 = -0.005346146967029123;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var23 = -0.015035114021856248;\n }\n }\n }\n let var24: number;\n if (input[2] > 2.524928003624769) {\n if (input[39] > 1e-35) {\n var24 = -0.054727205204329936;\n } else {\n if (input[2] > 5.1209788959100075) {\n if (input[3] > 1.7005986908310777) {\n var24 = -0.006846267565269392;\n } else {\n if (input[5] > 6.826002629905951) {\n var24 = -0.031164989612379426;\n } else {\n var24 = -0.002741497453668024;\n }\n }\n } else {\n if (input[91] > 1e-35) {\n var24 = -0.09671408062751485;\n } else {\n if (input[4] > 1.4978661367769956) {\n if (input[1] > 1e-35) {\n if (input[3] > 2.249904835165133) {\n var24 = 0.01457038163563883;\n } else {\n if (input[7] > 0.1998775237752378) {\n var24 = 0.0022386178156093236;\n } else {\n var24 = -0.023878153904868322;\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var24 = 0.02577301491883366;\n } else {\n if (input[134] > 1e-35) {\n var24 = 0.012196636151923639;\n } else {\n var24 = -0.011620066788940737;\n }\n }\n }\n } else {\n var24 = -0.02547345266933859;\n }\n }\n }\n }\n } else {\n if (input[3] > 1e-35) {\n if (input[2] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[125] > 1e-35) {\n var24 = -0.054140900037670386;\n } else {\n if (input[5] > 3.5694334999727624) {\n var24 = 0.011956526123643832;\n } else {\n if (input[3] > 2.602003343538398) {\n var24 = -0.02114925328017154;\n } else {\n if (input[7] > 0.9662372103242399) {\n var24 = 0.08782010508103752;\n } else {\n var24 = -0.017223208918198857;\n }\n }\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var24 = 0.03552967765214556;\n } else {\n if (input[134] > 1e-35) {\n var24 = 0.02029988465200251;\n } else {\n var24 = -0.0027071098830831453;\n }\n }\n }\n } else {\n var24 = -0.010563423003945922;\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n if (input[1] > 1e-35) {\n if (input[5] > 3.156774023138548) {\n var24 = 0.020789754957971127;\n } else {\n if (input[8] > 1e-35) {\n var24 = 0.09676607622337308;\n } else {\n var24 = -0.13431522143386382;\n }\n }\n } else {\n var24 = -0.04328684841078818;\n }\n } else {\n if (input[6] > 5.427147823217923) {\n if (input[2] > 0.8958797346140276) {\n var24 = 0.04286558286931383;\n } else {\n var24 = 0.0632450248289209;\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[8] > 1e-35) {\n if (input[4] > 3.676220550121792) {\n var24 = -0.12134536828900527;\n } else {\n var24 = -0.0021406313647826976;\n }\n } else {\n var24 = 0.02703554321037796;\n }\n } else {\n var24 = -0.10987991092748431;\n }\n }\n }\n }\n }\n let var25: number;\n if (input[3] > 3.238486181444842) {\n if (input[30] > 1e-35) {\n var25 = 0.009506310623811853;\n } else {\n if (input[39] > 1e-35) {\n var25 = -0.0390989997202559;\n } else {\n if (input[187] > 1e-35) {\n var25 = -0.07249802958837052;\n } else {\n if (input[46] > 1e-35) {\n var25 = -0.05080833699879983;\n } else {\n if (input[143] > 1e-35) {\n var25 = -0.06014247774751084;\n } else {\n if (input[219] > 1e-35) {\n var25 = -0.05179602905357869;\n } else {\n if (input[6] > 6.1537953943602615) {\n if (input[15] > 1e-35) {\n var25 = -0.025022238573512268;\n } else {\n var25 = 0.0011147676050071987;\n }\n } else {\n var25 = -0.013840284878987585;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.9626084674797213) {\n if (input[5] > 3.417592293073651) {\n if (input[3] > 1e-35) {\n if (input[6] > 3.9219243190762363) {\n var25 = 0.008593726678003006;\n } else {\n var25 = 0.05272960047875293;\n }\n } else {\n if (input[5] > 4.424828703319957) {\n var25 = 0.03164186747443643;\n } else {\n var25 = -0.019512539098210834;\n }\n }\n } else {\n if (input[3] > 2.602003343538398) {\n var25 = -0.0016290671598964486;\n } else {\n if (input[3] > 1.2424533248940002) {\n if (input[8] > 1e-35) {\n var25 = -0.1920669264002081;\n } else {\n var25 = 0.09024848315677546;\n }\n } else {\n if (input[8] > 1e-35) {\n var25 = 0.06434775905745808;\n } else {\n if (input[44] > 1e-35) {\n var25 = 0.11389595321585716;\n } else {\n var25 = -0.036695137521575945;\n }\n }\n }\n }\n }\n } else {\n if (input[6] > 4.987019604243537) {\n if (input[141] > 1e-35) {\n var25 = -0.03813401544172915;\n } else {\n if (input[138] > 1e-35) {\n var25 = 0.029859363038130183;\n } else {\n if (input[58] > 1e-35) {\n var25 = -0.06135288076045784;\n } else {\n if (input[39] > 1e-35) {\n var25 = -0.04609789446034826;\n } else {\n if (input[7] > 0.14547530463198097) {\n if (input[11] > 1e-35) {\n var25 = 0.0007666746170242386;\n } else {\n if (input[129] > 1e-35) {\n var25 = -0.04984156530077896;\n } else {\n if (input[18] > 1e-35) {\n var25 = -0.01554744241744757;\n } else {\n if (input[10] > 1e-35) {\n if (input[219] > 1e-35) {\n var25 = -0.043774129950223145;\n } else {\n var25 = 0.0062051346459236715;\n }\n } else {\n var25 = 0.014331149613197688;\n }\n }\n }\n }\n } else {\n var25 = -0.004868728135790881;\n }\n }\n }\n }\n }\n } else {\n var25 = -0.009310258638274059;\n }\n }\n }\n let var26: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.7005986908310777) {\n if (input[2] > 3.817651943129708) {\n if (input[3] > 1.8688348091416842) {\n var26 = 0.0015603015891380355;\n } else {\n var26 = -0.018128739944024166;\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n if (input[6] > 5.427147823217923) {\n var26 = 0.017445711714402918;\n } else {\n var26 = -0.006013735620008879;\n }\n } else {\n if (input[3] > 1.2424533248940002) {\n var26 = 0.08568755276415789;\n } else {\n if (input[4] > 2.602003343538398) {\n var26 = 0.03195371214541369;\n } else {\n if (input[6] > 2.970085626360216) {\n var26 = -0.3506562612672139;\n } else {\n var26 = -0.038898555979475155;\n }\n }\n }\n }\n }\n } else {\n if (input[6] > 5.391349638084432) {\n if (input[2] > 0.8958797346140276) {\n var26 = 0.04755052122467952;\n } else {\n if (input[3] > 1.4978661367769956) {\n var26 = 0.03861414711908666;\n } else {\n var26 = 0.08185303441168128;\n }\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[5] > 4.424828703319957) {\n var26 = 0.016473058697350277;\n } else {\n var26 = -0.08025494910794358;\n }\n } else {\n if (input[219] > 1e-35) {\n var26 = -0.06606152909975703;\n } else {\n var26 = 0.033955083083682974;\n }\n }\n }\n }\n } else {\n if (input[153] > 1e-35) {\n var26 = -0.022769519242142378;\n } else {\n if (input[155] > 1e-35) {\n var26 = 0.021917770434351808;\n } else {\n if (input[3] > 4.051747139190486) {\n var26 = -0.016298405734735375;\n } else {\n if (input[4] > 1.2424533248940002) {\n if (input[156] > 1e-35) {\n var26 = -0.023334559703496013;\n } else {\n if (input[91] > 1e-35) {\n var26 = -0.07354920004445119;\n } else {\n if (input[21] > 1e-35) {\n var26 = -0.03472005783841508;\n } else {\n if (input[9] > 1e-35) {\n var26 = 0.0088614848397155;\n } else {\n if (input[152] > 1e-35) {\n var26 = 0.01650058356046536;\n } else {\n if (input[50] > 1e-35) {\n var26 = -0.08689386936995537;\n } else {\n if (input[219] > 1e-35) {\n var26 = -0.025293957964644554;\n } else {\n if (input[22] > 1e-35) {\n var26 = -0.02911571993589908;\n } else {\n if (input[52] > 1e-35) {\n var26 = -0.10060771324188006;\n } else {\n if (input[151] > 1e-35) {\n var26 = -0.11187645020980451;\n } else {\n if (input[49] > 1e-35) {\n var26 = -0.07269389735370566;\n } else {\n var26 = 0.00010096962399904588;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var26 = -0.0308050484468705;\n }\n }\n }\n }\n }\n let var27: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.7005986908310777) {\n if (input[2] > 3.1132683346437333) {\n if (input[2] > 5.589117819455554) {\n var27 = -0.01634394676179118;\n } else {\n if (input[135] > 1e-35) {\n var27 = -0.025978770194490092;\n } else {\n var27 = 0.003478202132522329;\n }\n }\n } else {\n if (input[5] > 3.772694874805912) {\n if (input[6] > 5.55101783490842) {\n var27 = 0.0201238113260563;\n } else {\n var27 = -0.003889163967162744;\n }\n } else {\n var27 = 0.0619995705843029;\n }\n }\n } else {\n if (input[6] > 5.391349638084432) {\n if (input[2] > 0.8958797346140276) {\n var27 = 0.04441301244720888;\n } else {\n var27 = 0.07580163057048642;\n }\n } else {\n if (input[5] > 4.424828703319957) {\n var27 = 0.030400021609279876;\n } else {\n if (input[135] > 1e-35) {\n if (input[6] > 4.03420147928485) {\n var27 = -0.1614949959350695;\n } else {\n var27 = 0.011868201115510678;\n }\n } else {\n if (input[144] > 1e-35) {\n var27 = -0.24480189212017833;\n } else {\n var27 = 0.00743113235503554;\n }\n }\n }\n }\n }\n } else {\n if (input[135] > 1e-35) {\n var27 = -0.02500550080046047;\n } else {\n if (input[155] > 1e-35) {\n var27 = 0.019914668189284807;\n } else {\n if (input[14] > 1e-35) {\n var27 = 0.016272311078771865;\n } else {\n if (input[2] > 4.436734027666816) {\n var27 = -0.010942143677155697;\n } else {\n if (input[152] > 1e-35) {\n var27 = 0.01655515192923104;\n } else {\n if (input[5] > 3.276966702012906) {\n if (input[208] > 1e-35) {\n var27 = 0.01544696196221499;\n } else {\n if (input[209] > 1e-35) {\n var27 = 0.011686634595667988;\n } else {\n if (input[204] > 1e-35) {\n var27 = 0.012948259428096241;\n } else {\n if (input[54] > 1e-35) {\n var27 = -0.0987840586310838;\n } else {\n if (input[17] > 1e-35) {\n var27 = 0.019642065140602974;\n } else {\n if (input[9] > 1e-35) {\n var27 = 0.002408217148588979;\n } else {\n if (input[129] > 1e-35) {\n var27 = -0.051760999013377655;\n } else {\n if (input[53] > 1e-35) {\n var27 = -0.12326801905337725;\n } else {\n if (input[156] > 1e-35) {\n var27 = -0.027148214121600067;\n } else {\n var27 = -0.00591946140033722;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n var27 = 0.08076229481403298;\n } else {\n if (input[100] > 1e-35) {\n var27 = 0.09029873540689846;\n } else {\n var27 = 0.004633440115146894;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var28: number;\n if (input[1] > 1e-35) {\n if (input[4] > 2.138333059508028) {\n if (input[9] > 1e-35) {\n if (input[7] > 0.9738681190948303) {\n if (input[4] > 2.249904835165133) {\n var28 = 0.0335386338744903;\n } else {\n var28 = 0.08871810783567416;\n }\n } else {\n var28 = 0.019225035967642936;\n }\n } else {\n if (input[7] > 0.5866799179067689) {\n if (input[44] > 1e-35) {\n var28 = -0.028577747938027556;\n } else {\n if (input[22] > 1e-35) {\n var28 = -0.017080349342057245;\n } else {\n if (input[123] > 1e-35) {\n var28 = -0.06459630434555787;\n } else {\n var28 = 0.01496396100048332;\n }\n }\n }\n } else {\n if (input[7] > 0.04507521918085865) {\n var28 = 0.0037545927605624665;\n } else {\n var28 = -0.024364818555823085;\n }\n }\n }\n } else {\n if (input[7] > 0.3301972011875425) {\n if (input[4] > 0.8958797346140276) {\n var28 = 0.003955118988355861;\n } else {\n var28 = -0.024852972286710795;\n }\n } else {\n if (input[210] > 1e-35) {\n var28 = -0.06918033561606161;\n } else {\n var28 = -0.016436360434421187;\n }\n }\n }\n } else {\n if (input[219] > 1e-35) {\n var28 = -0.07074619361594191;\n } else {\n if (input[14] > 1e-35) {\n var28 = 0.02288621182895308;\n } else {\n if (input[30] > 1e-35) {\n var28 = 0.009951065285890723;\n } else {\n if (input[4] > 3.0677824455408698) {\n if (input[48] > 1e-35) {\n var28 = -0.08645289278185848;\n } else {\n if (input[18] > 1e-35) {\n var28 = -0.07128859518483391;\n } else {\n if (input[46] > 1e-35) {\n var28 = -0.059012415377229614;\n } else {\n if (input[51] > 1e-35) {\n var28 = -0.09897820075751956;\n } else {\n if (input[143] > 1e-35) {\n var28 = -0.0658809793369211;\n } else {\n if (input[39] > 1e-35) {\n var28 = -0.05072244120975425;\n } else {\n if (input[145] > 1e-35) {\n var28 = -0.1041573357946847;\n } else {\n if (input[21] > 1e-35) {\n var28 = -0.07265724033978356;\n } else {\n if (input[121] > 1e-35) {\n var28 = 0.032340406020414894;\n } else {\n if (input[150] > 1e-35) {\n var28 = -0.12780465144045577;\n } else {\n if (input[50] > 1e-35) {\n var28 = -0.10084067045905792;\n } else {\n var28 = -0.008282579596590931;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[31] > 1e-35) {\n var28 = 0.09475423612489574;\n } else {\n if (input[134] > 1e-35) {\n var28 = 0.016436600209473996;\n } else {\n var28 = -0.0032052350949025154;\n }\n }\n }\n }\n }\n }\n }\n let var29: number;\n if (input[0] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[6] > 5.980149988077803) {\n if (input[3] > 1e-35) {\n var29 = 0.016868562767356994;\n } else {\n if (input[7] > 0.9480659774309611) {\n var29 = 0.0490126593301439;\n } else {\n var29 = 0.03183712887814021;\n }\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[8] > 1e-35) {\n var29 = -0.018344689935240077;\n } else {\n if (input[7] > 0.5762123732244849) {\n var29 = 0.027823839417468396;\n } else {\n var29 = 0.0022237549483396734;\n }\n }\n } else {\n var29 = -0.049221463486990365;\n }\n }\n } else {\n if (input[30] > 1e-35) {\n var29 = 0.024881540664409785;\n } else {\n if (input[4] > 3.0677824455408698) {\n var29 = -0.012956173562801246;\n } else {\n var29 = 0.010844244442972509;\n }\n }\n }\n } else {\n if (input[153] > 1e-35) {\n var29 = -0.021011529883710918;\n } else {\n if (input[135] > 1e-35) {\n var29 = -0.022862755771243214;\n } else {\n if (input[91] > 1e-35) {\n var29 = -0.06523564179230792;\n } else {\n if (input[3] > 4.3372693810700085) {\n var29 = -0.01836396186345982;\n } else {\n if (input[4] > 1.2424533248940002) {\n if (input[14] > 1e-35) {\n var29 = 0.018063557788938384;\n } else {\n if (input[1] > 1e-35) {\n if (input[58] > 1e-35) {\n var29 = -0.05666864992513037;\n } else {\n if (input[37] > 1e-35) {\n var29 = -0.09859173931566362;\n } else {\n if (input[140] > 1e-35) {\n var29 = -0.026368697925604742;\n } else {\n if (input[139] > 1e-35) {\n var29 = -0.06458698835998881;\n } else {\n if (input[3] > 2.4414009612931857) {\n if (input[8] > 1e-35) {\n var29 = -0.012750470980894203;\n } else {\n if (input[128] > 1e-35) {\n var29 = -0.06062526587440112;\n } else {\n var29 = 0.011637315217958607;\n }\n }\n } else {\n if (input[7] > 0.9569480028661056) {\n if (input[6] > 3.314020688089767) {\n if (input[6] > 8.256477558772088) {\n var29 = -0.01867324944649552;\n } else {\n var29 = 0.013333709765106694;\n }\n } else {\n if (input[19] > 1e-35) {\n var29 = -0.0862336521704207;\n } else {\n var29 = 0.06263843669460754;\n }\n }\n } else {\n var29 = -0.005209374987876728;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n var29 = -0.05314556259108334;\n } else {\n if (input[144] > 1e-35) {\n var29 = -0.06747511467043471;\n } else {\n var29 = -0.0032459743896180644;\n }\n }\n }\n }\n } else {\n var29 = -0.025647852465095045;\n }\n }\n }\n }\n }\n }\n let var30: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.4978661367769956) {\n if (input[2] > 2.802901033147999) {\n if (input[153] > 1e-35) {\n var30 = -0.028446025186518367;\n } else {\n if (input[135] > 1e-35) {\n var30 = -0.030498458478750823;\n } else {\n if (input[4] > 1.4978661367769956) {\n var30 = 0.0028332406263713176;\n } else {\n var30 = -0.029966327008991617;\n }\n }\n }\n } else {\n var30 = 0.018714561890725637;\n }\n } else {\n if (input[6] > 5.033695261903033) {\n if (input[2] > 0.8958797346140276) {\n var30 = 0.041738631496127304;\n } else {\n var30 = 0.0701395739744944;\n }\n } else {\n if (input[7] > 0.9811887196001154) {\n if (input[28] > 1e-35) {\n if (input[194] > 1e-35) {\n var30 = -0.6270617037879163;\n } else {\n var30 = -0.14198370205598315;\n }\n } else {\n var30 = -0.008029082191082339;\n }\n } else {\n var30 = 0.03966126215239892;\n }\n }\n }\n } else {\n if (input[153] > 1e-35) {\n var30 = -0.018792731305353614;\n } else {\n if (input[135] > 1e-35) {\n var30 = -0.020500053366640306;\n } else {\n if (input[156] > 1e-35) {\n if (input[11] > 1e-35) {\n var30 = -0.05063175110475535;\n } else {\n var30 = -0.0120172710473678;\n }\n } else {\n if (input[147] > 1e-35) {\n var30 = -0.06181360325166399;\n } else {\n if (input[7] > 0.06275229375044648) {\n if (input[52] > 1e-35) {\n var30 = -0.09381845963236321;\n } else {\n if (input[4] > 4.424828703319957) {\n var30 = -0.015836182358134197;\n } else {\n if (input[4] > 1.2424533248940002) {\n if (input[48] > 1e-35) {\n var30 = -0.047387335727107405;\n } else {\n if (input[50] > 1e-35) {\n var30 = -0.07061356901704502;\n } else {\n if (input[151] > 1e-35) {\n var30 = -0.09680213548388712;\n } else {\n if (input[46] > 1e-35) {\n var30 = -0.028970851669790916;\n } else {\n if (input[123] > 1e-35) {\n var30 = -0.035197840867969954;\n } else {\n if (input[49] > 1e-35) {\n var30 = -0.06299268464836878;\n } else {\n if (input[149] > 1e-35) {\n var30 = -0.10197175263174806;\n } else {\n if (input[58] > 1e-35) {\n var30 = -0.03908263666673043;\n } else {\n if (input[22] > 1e-35) {\n var30 = -0.021903737116021876;\n } else {\n if (input[2] > 0.8958797346140276) {\n var30 = 0.005307704388235018;\n } else {\n var30 = -0.0020984759645931708;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var30 = -0.021935509998616008;\n }\n }\n }\n } else {\n var30 = -0.01887705116018838;\n }\n }\n }\n }\n }\n }\n let var31: number;\n if (input[2] > 2.4414009612931857) {\n if (input[2] > 4.749261159734808) {\n if (input[219] > 1e-35) {\n var31 = -0.0427111578574511;\n } else {\n if (input[153] > 1e-35) {\n var31 = -0.030189831687705213;\n } else {\n if (input[135] > 1e-35) {\n var31 = -0.03512251542671204;\n } else {\n var31 = -0.005813108237155817;\n }\n }\n }\n } else {\n if (input[39] > 1e-35) {\n var31 = -0.03612853474204475;\n } else {\n if (input[91] > 1e-35) {\n var31 = -0.07347487395456895;\n } else {\n if (input[142] > 1e-35) {\n var31 = -0.04314124434818331;\n } else {\n if (input[21] > 1e-35) {\n var31 = -0.03933135423264962;\n } else {\n if (input[29] > 1e-35) {\n if (input[6] > 4.3882378946731615) {\n if (input[1] > 1e-35) {\n var31 = -0.0015250307417007892;\n } else {\n var31 = -0.0490054084929899;\n }\n } else {\n if (input[209] > 1e-35) {\n var31 = -0.19107169934362123;\n } else {\n var31 = -0.032434842765588306;\n }\n }\n } else {\n if (input[18] > 1e-35) {\n var31 = -0.04413318629193353;\n } else {\n if (input[5] > 3.772694874805912) {\n var31 = 0.004026864766696988;\n } else {\n if (input[7] > 0.9705672697050661) {\n if (input[4] > 2.602003343538398) {\n var31 = -0.0184663870129198;\n } else {\n var31 = 0.08888448773905216;\n }\n } else {\n var31 = -0.0040785146358560806;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 1.2424533248940002) {\n if (input[1] > 1e-35) {\n if (input[5] > 3.156774023138548) {\n var31 = 0.012676257607559291;\n } else {\n if (input[4] > 2.012675845367575) {\n var31 = 0.07794141958502514;\n } else {\n var31 = -0.23905004122480836;\n }\n }\n } else {\n var31 = -0.03904279404529968;\n }\n } else {\n if (input[6] > 5.818597045157784) {\n if (input[1] > 1e-35) {\n var31 = 0.04439337662833094;\n } else {\n var31 = -0.009601154125838422;\n }\n } else {\n if (input[28] > 1e-35) {\n if (input[7] > 0.9926276364955392) {\n if (input[156] > 1e-35) {\n var31 = 0.08495906118788314;\n } else {\n if (input[153] > 1e-35) {\n var31 = 0.09808912606252018;\n } else {\n var31 = -0.41470362752984724;\n }\n }\n } else {\n var31 = 0.024659633328041372;\n }\n } else {\n if (input[6] > 4.3882378946731615) {\n var31 = 0.02348696158531392;\n } else {\n var31 = -0.011219631635525798;\n }\n }\n }\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n var31 = 0.00764827947682953;\n } else {\n var31 = -0.002636723662133651;\n }\n }\n }\n let var32: number;\n if (input[0] > 1e-35) {\n if (input[138] > 1e-35) {\n var32 = 0.04040206743401164;\n } else {\n if (input[7] > 0.47159631571429605) {\n if (input[39] > 1e-35) {\n var32 = -0.04204265697956852;\n } else {\n if (input[18] > 1e-35) {\n var32 = -0.02345608311313191;\n } else {\n if (input[46] > 1e-35) {\n var32 = -0.07250113205332377;\n } else {\n if (input[47] > 1e-35) {\n var32 = -0.06901706560471924;\n } else {\n if (input[123] > 1e-35) {\n var32 = -0.02471508138476658;\n } else {\n if (input[91] > 1e-35) {\n var32 = -0.08527667683257537;\n } else {\n if (input[6] > 5.519456907163478) {\n if (input[7] > 0.9811887196001154) {\n var32 = 0.033642311398086024;\n } else {\n var32 = 0.019968221974742344;\n }\n } else {\n if (input[6] > 3.540854293052788) {\n if (input[28] > 1e-35) {\n if (input[7] > 0.9914949911911836) {\n var32 = -0.17171139407761582;\n } else {\n var32 = 0.033182911468765224;\n }\n } else {\n var32 = 0.0060896749985828915;\n }\n } else {\n if (input[7] > 0.9626084674797213) {\n var32 = 0.050178751374534494;\n } else {\n var32 = -0.008697473314227091;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[6] > 5.957131031247307) {\n var32 = 0.008840008772752947;\n } else {\n var32 = -0.00839587224544437;\n }\n }\n }\n } else {\n if (input[57] > 1e-35) {\n var32 = -0.11000065936717814;\n } else {\n if (input[187] > 1e-35) {\n var32 = -0.039919217528968265;\n } else {\n if (input[135] > 1e-35) {\n var32 = -0.01777859479698383;\n } else {\n if (input[7] > 0.841541958453746) {\n if (input[6] > 8.681774988134558) {\n var32 = -0.006645633391127337;\n } else {\n var32 = 0.005363553180866138;\n }\n } else {\n if (input[7] > 0.06275229375044648) {\n if (input[141] > 1e-35) {\n var32 = -0.028575934798358252;\n } else {\n if (input[147] > 1e-35) {\n var32 = -0.06523418671938815;\n } else {\n if (input[53] > 1e-35) {\n var32 = -0.12439699935111644;\n } else {\n if (input[47] > 1e-35) {\n var32 = -0.04201034294282216;\n } else {\n if (input[21] > 1e-35) {\n var32 = -0.029998534764449716;\n } else {\n if (input[11] > 1e-35) {\n var32 = -0.008349262144218515;\n } else {\n if (input[10] > 1e-35) {\n if (input[152] > 1e-35) {\n var32 = 0.03211843381827455;\n } else {\n var32 = -0.009616753935387912;\n }\n } else {\n var32 = 0.001507728277179471;\n }\n }\n }\n }\n }\n }\n }\n } else {\n var32 = -0.018453367252451447;\n }\n }\n }\n }\n }\n }\n let var33: number;\n if (input[2] > 2.4414009612931857) {\n if (input[155] > 1e-35) {\n var33 = 0.02097415247337288;\n } else {\n if (input[2] > 5.1209788959100075) {\n if (input[219] > 1e-35) {\n var33 = -0.04107586321461544;\n } else {\n if (input[153] > 1e-35) {\n var33 = -0.030708779452328257;\n } else {\n var33 = -0.008547089256234949;\n }\n }\n } else {\n if (input[24] > 1e-35) {\n if (input[113] > 1e-35) {\n var33 = 0.10372474211849725;\n } else {\n var33 = 0.010871474495452506;\n }\n } else {\n if (input[46] > 1e-35) {\n var33 = -0.048875079231930615;\n } else {\n if (input[152] > 1e-35) {\n var33 = 0.0169028183837229;\n } else {\n if (input[91] > 1e-35) {\n var33 = -0.06545106192484919;\n } else {\n if (input[7] > 0.5395500104437768) {\n if (input[21] > 1e-35) {\n var33 = -0.03634133884877529;\n } else {\n if (input[123] > 1e-35) {\n var33 = -0.04524486315275367;\n } else {\n var33 = 0.0007726000210664368;\n }\n }\n } else {\n if (input[153] > 1e-35) {\n var33 = -0.026631444280113794;\n } else {\n var33 = -0.005897540198114922;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 1.2424533248940002) {\n if (input[141] > 1e-35) {\n var33 = 0.06938494238244022;\n } else {\n if (input[1] > 1e-35) {\n if (input[4] > 2.602003343538398) {\n if (input[7] > 0.21160651352969054) {\n var33 = 0.016731168841731828;\n } else {\n var33 = -0.009280453313693341;\n }\n } else {\n var33 = -0.006549806005743951;\n }\n } else {\n var33 = -0.035447929694275064;\n }\n }\n } else {\n if (input[8] > 1e-35) {\n var33 = -0.0032912467465369953;\n } else {\n if (input[4] > 1.2424533248940002) {\n if (input[1] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var33 = 0.024369266212637037;\n } else {\n if (input[138] > 1e-35) {\n var33 = 0.06205121318768558;\n } else {\n var33 = 0.03811769435016647;\n }\n }\n } else {\n var33 = -0.009452348851889555;\n }\n } else {\n var33 = -0.025248141993897872;\n }\n }\n }\n } else {\n if (input[2] > 1e-35) {\n if (input[57] > 1e-35) {\n var33 = -0.12191990737301042;\n } else {\n if (input[4] > 3.3842466058243152) {\n var33 = 0.00020591213976092076;\n } else {\n if (input[141] > 1e-35) {\n var33 = -0.03252260939244301;\n } else {\n if (input[186] > 1e-35) {\n var33 = -0.13818838492678748;\n } else {\n var33 = 0.009368844137034227;\n }\n }\n }\n }\n } else {\n var33 = -0.007973426105216213;\n }\n }\n }\n let var34: number;\n if (input[2] > 2.3502401828962087) {\n if (input[14] > 1e-35) {\n var34 = 0.015015656987761437;\n } else {\n if (input[30] > 1e-35) {\n if (input[210] > 1e-35) {\n if (input[7] > 0.6876768869498817) {\n var34 = 0.00543900892248828;\n } else {\n var34 = -0.04253496769494065;\n }\n } else {\n if (input[141] > 1e-35) {\n var34 = -0.052958350924390156;\n } else {\n if (input[140] > 1e-35) {\n var34 = -0.10364099832282586;\n } else {\n var34 = 0.010452960405207413;\n }\n }\n }\n } else {\n if (input[24] > 1e-35) {\n if (input[113] > 1e-35) {\n var34 = 0.09898709072741292;\n } else {\n if (input[209] > 1e-35) {\n if (input[7] > 0.9821472231924556) {\n var34 = -0.26615665549082984;\n } else {\n var34 = 0.09636256138859388;\n }\n } else {\n var34 = 0.01708542025496261;\n }\n }\n } else {\n if (input[217] > 1e-35) {\n var34 = 0.008049408683788317;\n } else {\n if (input[21] > 1e-35) {\n var34 = -0.04590265539954756;\n } else {\n if (input[90] > 1e-35) {\n var34 = -0.13784770816769107;\n } else {\n if (input[142] > 1e-35) {\n var34 = -0.04628126597884301;\n } else {\n if (input[47] > 1e-35) {\n var34 = -0.05827975565933709;\n } else {\n if (input[135] > 1e-35) {\n var34 = -0.0223224900840969;\n } else {\n if (input[18] > 1e-35) {\n var34 = -0.03220713396184497;\n } else {\n if (input[91] > 1e-35) {\n var34 = -0.06447405488640102;\n } else {\n if (input[58] > 1e-35) {\n var34 = -0.05284544446869763;\n } else {\n if (input[48] > 1e-35) {\n var34 = -0.06649148594881385;\n } else {\n if (input[123] > 1e-35) {\n var34 = -0.04383701454842744;\n } else {\n if (input[7] > 0.07815070294696584) {\n if (input[52] > 1e-35) {\n var34 = -0.11846610284210293;\n } else {\n if (input[50] > 1e-35) {\n var34 = -0.08907531725085399;\n } else {\n if (input[156] > 1e-35) {\n var34 = -0.018270336483319834;\n } else {\n if (input[150] > 1e-35) {\n var34 = -0.1090721461891663;\n } else {\n if (input[151] > 1e-35) {\n var34 = -0.12157322199183473;\n } else {\n var34 = -0.001565820654257863;\n }\n }\n }\n }\n }\n } else {\n var34 = -0.02380240397829804;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.7957410883753849) {\n var34 = 0.01267070049428537;\n } else {\n if (input[9] > 1e-35) {\n var34 = 0.012970301396505988;\n } else {\n var34 = 0.0031136826722851885;\n }\n }\n }\n let var35: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.4978661367769956) {\n if (input[2] > 3.817651943129708) {\n if (input[29] > 1e-35) {\n var35 = -0.01811927921170173;\n } else {\n var35 = -0.0007182192063435364;\n }\n } else {\n if (input[30] > 1e-35) {\n var35 = 0.024303187146750442;\n } else {\n if (input[1] > 1e-35) {\n var35 = 0.011106265465270054;\n } else {\n if (input[134] > 1e-35) {\n var35 = 0.029835980521591587;\n } else {\n var35 = -0.011058553872914158;\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[4] > 0.8958797346140276) {\n if (input[2] > 0.8958797346140276) {\n var35 = 0.038081831260496;\n } else {\n if (input[7] > 0.9761943980359399) {\n if (input[7] > 0.9974623466432676) {\n var35 = 0.0678338591810893;\n } else {\n var35 = 0.02371719224774027;\n }\n } else {\n var35 = 0.0682898584583309;\n }\n }\n } else {\n var35 = -0.023148464063014726;\n }\n } else {\n if (input[30] > 1e-35) {\n var35 = 0.04610988679672867;\n } else {\n var35 = 0.003060113702583105;\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[4] > 2.4414009612931857) {\n if (input[7] > 0.9587163092581167) {\n var35 = 0.01081564552001606;\n } else {\n var35 = -0.006807357600587744;\n }\n } else {\n var35 = -0.02409609521595022;\n }\n } else {\n var35 = -0.033329165496176885;\n }\n } else {\n if (input[4] > 4.051747139190486) {\n var35 = -0.01130115168237245;\n } else {\n if (input[129] > 1e-35) {\n var35 = -0.04589370141507604;\n } else {\n if (input[21] > 1e-35) {\n var35 = -0.029442074982620643;\n } else {\n if (input[14] > 1e-35) {\n var35 = 0.016895124578179443;\n } else {\n if (input[186] > 1e-35) {\n var35 = -0.11907557430036886;\n } else {\n if (input[1] > 1e-35) {\n if (input[139] > 1e-35) {\n var35 = -0.06194447560538838;\n } else {\n if (input[133] > 1e-35) {\n var35 = -0.0758465323292204;\n } else {\n if (input[58] > 1e-35) {\n var35 = -0.04330766372695393;\n } else {\n if (input[138] > 1e-35) {\n var35 = -0.04155491116231014;\n } else {\n if (input[156] > 1e-35) {\n var35 = -0.04841608169206507;\n } else {\n if (input[44] > 1e-35) {\n var35 = -0.01948221703985556;\n } else {\n var35 = 0.006580878599054945;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[217] > 1e-35) {\n var35 = 0.022433802380447482;\n } else {\n var35 = -0.00412091757515532;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var36: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.4978661367769956) {\n if (input[2] > 2.970085626360216) {\n if (input[153] > 1e-35) {\n var36 = -0.024502725801264887;\n } else {\n if (input[2] > 5.589117819455554) {\n var36 = -0.01230190569981064;\n } else {\n var36 = 0.0013078979950003464;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n var36 = 0.016172143068823742;\n } else {\n var36 = 0.0006345060509537773;\n }\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n var36 = 0.030005982109869073;\n } else {\n if (input[7] > 0.9811887196001154) {\n if (input[7] > 0.9983480540068196) {\n var36 = 0.0671951915420627;\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[204] > 1e-35) {\n if (input[4] > 2.4414009612931857) {\n var36 = 0.044068636573383585;\n } else {\n var36 = -0.6634026033584294;\n }\n } else {\n if (input[28] > 1e-35) {\n if (input[194] > 1e-35) {\n var36 = -0.3139210817530322;\n } else {\n var36 = -0.030502668897116853;\n }\n } else {\n var36 = 0.02841326513237545;\n }\n }\n } else {\n var36 = -0.12080826254458728;\n }\n }\n } else {\n var36 = 0.05983169094937563;\n }\n }\n }\n } else {\n if (input[25] > 1e-35) {\n var36 = -0.03468266531519899;\n } else {\n if (input[17] > 1e-35) {\n var36 = 0.018557285805987474;\n } else {\n if (input[91] > 1e-35) {\n var36 = -0.051420462987159146;\n } else {\n if (input[153] > 1e-35) {\n if (input[24] > 1e-35) {\n var36 = 0.04301006671297924;\n } else {\n if (input[57] > 1e-35) {\n var36 = -0.09748386515224282;\n } else {\n if (input[7] > 0.43956365248689394) {\n var36 = -0.00756781004151352;\n } else {\n var36 = -0.03008603678955382;\n }\n }\n }\n } else {\n if (input[40] > 1e-35) {\n var36 = -0.06712212199178254;\n } else {\n if (input[9] > 1e-35) {\n if (input[99] > 1e-35) {\n var36 = 0.02709638137622776;\n } else {\n var36 = 0.00311232737924217;\n }\n } else {\n if (input[219] > 1e-35) {\n var36 = -0.021650545703290135;\n } else {\n if (input[129] > 1e-35) {\n var36 = -0.04139534817677377;\n } else {\n if (input[4] > 4.482986592105174) {\n var36 = -0.01666373169408667;\n } else {\n if (input[7] > 0.14547530463198097) {\n if (input[28] > 1e-35) {\n var36 = 0.0203181446326991;\n } else {\n if (input[24] > 1e-35) {\n var36 = 0.019321702534414745;\n } else {\n var36 = -0.0013149142637674523;\n }\n }\n } else {\n var36 = -0.010572437649803333;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var37: number;\n if (input[1] > 1e-35) {\n if (input[99] > 1e-35) {\n var37 = 0.024922390516579074;\n } else {\n if (input[7] > 0.6223082132708274) {\n if (input[5] > 8.674624195715621) {\n var37 = -0.0013697481432616754;\n } else {\n if (input[8] > 1e-35) {\n if (input[5] > 3.0201273556387074) {\n if (input[5] > 4.855921334140645) {\n var37 = -0.0034268395365245545;\n } else {\n var37 = -0.034186463672076346;\n }\n } else {\n if (input[29] > 1e-35) {\n var37 = 0.07759914281958613;\n } else {\n var37 = -0.07773573805144608;\n }\n }\n } else {\n if (input[22] > 1e-35) {\n var37 = -0.0175879419801366;\n } else {\n if (input[7] > 0.9626084674797213) {\n var37 = 0.016773359142537643;\n } else {\n var37 = 0.008028381804196754;\n }\n }\n }\n }\n } else {\n if (input[133] > 1e-35) {\n var37 = -0.0535216100744091;\n } else {\n var37 = -0.0005000628423357899;\n }\n }\n }\n } else {\n if (input[38] > 1e-35) {\n if (input[14] > 1e-35) {\n var37 = 0.05090247458630403;\n } else {\n var37 = 0.007750826606170666;\n }\n } else {\n if (input[30] > 1e-35) {\n var37 = 0.007698939719746262;\n } else {\n if (input[121] > 1e-35) {\n var37 = 0.02303487268261317;\n } else {\n if (input[56] > 1e-35) {\n var37 = 0.04301822779572479;\n } else {\n if (input[219] > 1e-35) {\n var37 = -0.061056125991793546;\n } else {\n if (input[49] > 1e-35) {\n var37 = -0.08519783826666813;\n } else {\n if (input[54] > 1e-35) {\n var37 = -0.11098408863832084;\n } else {\n if (input[51] > 1e-35) {\n var37 = -0.07495147940928196;\n } else {\n if (input[52] > 1e-35) {\n var37 = -0.10268521021357209;\n } else {\n if (input[143] > 1e-35) {\n var37 = -0.050337621945760906;\n } else {\n if (input[50] > 1e-35) {\n var37 = -0.08215637358309871;\n } else {\n if (input[135] > 1e-35) {\n var37 = -0.037923453156281546;\n } else {\n if (input[29] > 1e-35) {\n var37 = -0.03275476659364492;\n } else {\n if (input[118] > 1e-35) {\n var37 = -0.05655325181162936;\n } else {\n if (input[46] > 1e-35) {\n var37 = -0.03579874818682071;\n } else {\n if (input[55] > 1e-35) {\n var37 = -0.10858775815345066;\n } else {\n if (input[98] > 1e-35) {\n var37 = -0.02949179817285505;\n } else {\n if (input[91] > 1e-35) {\n var37 = -0.06114394873657414;\n } else {\n var37 = -0.0024381269826722327;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var38: number;\n if (input[0] > 1e-35) {\n if (input[138] > 1e-35) {\n var38 = 0.03188433658945665;\n } else {\n if (input[6] > 5.957131031247307) {\n if (input[29] > 1e-35) {\n var38 = 0.02161439640262312;\n } else {\n if (input[46] > 1e-35) {\n var38 = -0.05856082884648366;\n } else {\n var38 = 0.00579188508436574;\n }\n }\n } else {\n if (input[5] > 3.417592293073651) {\n var38 = -0.0023781291067078423;\n } else {\n if (input[6] > 2.524928003624769) {\n if (input[29] > 1e-35) {\n var38 = -0.009165058612451055;\n } else {\n var38 = 0.06060298049441096;\n }\n } else {\n var38 = -0.024654633200924148;\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[141] > 1e-35) {\n var38 = 0.047057536167451744;\n } else {\n if (input[5] > 7.751690325550034) {\n var38 = -0.014630738159823437;\n } else {\n if (input[6] > 1e-35) {\n var38 = -0.0022830386545257364;\n } else {\n var38 = -0.1244934159203967;\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n var38 = -0.03108265181870111;\n } else {\n if (input[151] > 1e-35) {\n var38 = -0.0899976208431091;\n } else {\n if (input[53] > 1e-35) {\n var38 = -0.10125439914522794;\n } else {\n if (input[57] > 1e-35) {\n var38 = -0.08285049636367613;\n } else {\n if (input[48] > 1e-35) {\n var38 = -0.04071723813859757;\n } else {\n if (input[147] > 1e-35) {\n var38 = -0.05043191744833317;\n } else {\n if (input[49] > 1e-35) {\n var38 = -0.05480244282058292;\n } else {\n if (input[52] > 1e-35) {\n var38 = -0.07341553831872409;\n } else {\n if (input[91] > 1e-35) {\n var38 = -0.04164336745260387;\n } else {\n if (input[50] > 1e-35) {\n var38 = -0.05943962674275153;\n } else {\n if (input[40] > 1e-35) {\n var38 = -0.054773037913883875;\n } else {\n if (input[129] > 1e-35) {\n var38 = -0.03640370706396673;\n } else {\n if (input[54] > 1e-35) {\n var38 = -0.07483146938849299;\n } else {\n if (input[22] > 1e-35) {\n var38 = -0.02027834075472462;\n } else {\n if (input[186] > 1e-35) {\n var38 = -0.08116240011202293;\n } else {\n if (input[143] > 1e-35) {\n var38 = -0.028437692949603324;\n } else {\n if (input[21] > 1e-35) {\n var38 = -0.02421670339700474;\n } else {\n if (input[46] > 1e-35) {\n var38 = -0.02303808594532841;\n } else {\n var38 = 0.0030552215125396933;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var39: number;\n if (input[0] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[4] > 2.138333059508028) {\n if (input[9] > 1e-35) {\n var39 = 0.02933727780739186;\n } else {\n if (input[6] > 4.722943345003718) {\n if (input[7] > 0.9246495578512688) {\n var39 = 0.024680404379144982;\n } else {\n var39 = 0.012015730636539185;\n }\n } else {\n if (input[113] > 1e-35) {\n var39 = 0.09112392780348796;\n } else {\n if (input[135] > 1e-35) {\n if (input[7] > 0.990877425524446) {\n var39 = -0.11617284449593282;\n } else {\n var39 = -0.005246041787488675;\n }\n } else {\n var39 = -0.011069319481086321;\n }\n }\n }\n }\n } else {\n if (input[90] > 1e-35) {\n var39 = -0.2763006993902732;\n } else {\n if (input[7] > 0.9546729796082215) {\n if (input[6] > 3.0677824455408698) {\n var39 = 0.009233858920042097;\n } else {\n var39 = 0.08920751503262825;\n }\n } else {\n var39 = -0.008824102277148265;\n }\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var39 = 0.02736126919460762;\n } else {\n if (input[4] > 2.917405368531303) {\n if (input[30] > 1e-35) {\n var39 = 0.013112272135200274;\n } else {\n if (input[217] > 1e-35) {\n var39 = 0.035799930603658235;\n } else {\n var39 = -0.015618218537266096;\n }\n }\n } else {\n var39 = 0.010656981322113845;\n }\n }\n }\n } else {\n if (input[14] > 1e-35) {\n var39 = 0.01147191978691208;\n } else {\n if (input[17] > 1e-35) {\n var39 = 0.016681596753170068;\n } else {\n if (input[135] > 1e-35) {\n var39 = -0.017396147137824756;\n } else {\n if (input[4] > 1.8688348091416842) {\n if (input[4] > 4.03420147928485) {\n var39 = -0.008863534867945834;\n } else {\n if (input[31] > 1e-35) {\n var39 = 0.05416038384474034;\n } else {\n if (input[113] > 1e-35) {\n var39 = 0.012656827040897288;\n } else {\n if (input[204] > 1e-35) {\n var39 = 0.011410879858785482;\n } else {\n if (input[208] > 1e-35) {\n if (input[1] > 1e-35) {\n var39 = 0.02085606775425661;\n } else {\n var39 = -0.008618410086291444;\n }\n } else {\n if (input[53] > 1e-35) {\n var39 = -0.09674487817291225;\n } else {\n if (input[155] > 1e-35) {\n var39 = 0.010841012663281826;\n } else {\n var39 = -0.0027234799964982103;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[100] > 1e-35) {\n if (input[6] > 4.226807104886684) {\n var39 = -0.02684998739505702;\n } else {\n var39 = 0.09196076999373319;\n }\n } else {\n var39 = -0.014557367931257406;\n }\n }\n }\n }\n }\n }\n let var40: number;\n if (input[1] > 1e-35) {\n if (input[4] > 2.4414009612931857) {\n if (input[140] > 1e-35) {\n var40 = -0.020508725755139606;\n } else {\n if (input[9] > 1e-35) {\n var40 = 0.014160204295049248;\n } else {\n if (input[37] > 1e-35) {\n var40 = -0.06190233326923697;\n } else {\n if (input[6] > 1e-35) {\n var40 = 0.005164496028342236;\n } else {\n var40 = -0.11389189550910446;\n }\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n var40 = -0.04125881484049697;\n } else {\n if (input[186] > 1e-35) {\n var40 = -0.17160163910476212;\n } else {\n if (input[29] > 1e-35) {\n if (input[6] > 3.676220550121792) {\n var40 = -0.010283419868136159;\n } else {\n if (input[7] > 0.9626084674797213) {\n var40 = -0.1716178372310524;\n } else {\n var40 = -0.008856137283327148;\n }\n }\n } else {\n if (input[28] > 1e-35) {\n var40 = 0.05315666786902214;\n } else {\n if (input[129] > 1e-35) {\n var40 = -0.04136913767615559;\n } else {\n if (input[7] > 0.9705672697050661) {\n if (input[6] > 3.540854293052788) {\n var40 = 0.00751812285476753;\n } else {\n if (input[8] > 1e-35) {\n var40 = -0.11960098941111366;\n } else {\n var40 = 0.06631760098044483;\n }\n }\n } else {\n if (input[210] > 1e-35) {\n if (input[30] > 1e-35) {\n var40 = -0.05338190010412709;\n } else {\n var40 = 0.017275201286894953;\n }\n } else {\n if (input[30] > 1e-35) {\n var40 = 0.014424216946760394;\n } else {\n if (input[99] > 1e-35) {\n var40 = 0.027062693955934525;\n } else {\n var40 = -0.006762492910108134;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[219] > 1e-35) {\n var40 = -0.0534489198792768;\n } else {\n if (input[138] > 1e-35) {\n var40 = 0.017328465617667224;\n } else {\n if (input[4] > 2.970085626360216) {\n if (input[144] > 1e-35) {\n var40 = -0.0662951231725991;\n } else {\n if (input[143] > 1e-35) {\n var40 = -0.04739088646917139;\n } else {\n if (input[145] > 1e-35) {\n var40 = -0.07635546796992515;\n } else {\n if (input[14] > 1e-35) {\n var40 = 0.012433708195861912;\n } else {\n if (input[217] > 1e-35) {\n var40 = 0.021046036228368578;\n } else {\n if (input[51] > 1e-35) {\n var40 = -0.07024391932712475;\n } else {\n var40 = -0.007585229386863768;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[127] > 1e-35) {\n var40 = 0.0788172427657374;\n } else {\n var40 = 0.0036475442240054556;\n }\n }\n }\n }\n }\n let var41: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.4978661367769956) {\n if (input[2] > 2.802901033147999) {\n if (input[153] > 1e-35) {\n var41 = -0.02488671343402725;\n } else {\n if (input[135] > 1e-35) {\n var41 = -0.026342401137212534;\n } else {\n if (input[4] > 1.4978661367769956) {\n var41 = -0.0002120610158998857;\n } else {\n var41 = -0.02619014803287452;\n }\n }\n }\n } else {\n if (input[5] > 3.772694874805912) {\n var41 = 0.00791871819482647;\n } else {\n var41 = 0.05245006986819034;\n }\n }\n } else {\n if (input[5] > 5.431533816254341) {\n if (input[2] > 0.8958797346140276) {\n var41 = 0.026755493155023333;\n } else {\n var41 = 0.05657996196424821;\n }\n } else {\n if (input[5] > 4.424828703319957) {\n if (input[28] > 1e-35) {\n var41 = -0.12833948112036647;\n } else {\n var41 = 0.02009706276124955;\n }\n } else {\n if (input[135] > 1e-35) {\n var41 = -0.1062651205805238;\n } else {\n var41 = -0.014392542658357654;\n }\n }\n }\n }\n } else {\n if (input[156] > 1e-35) {\n if (input[11] > 1e-35) {\n var41 = -0.0426876288098691;\n } else {\n var41 = -0.009210886749467585;\n }\n } else {\n if (input[25] > 1e-35) {\n var41 = -0.029685120249418873;\n } else {\n if (input[153] > 1e-35) {\n if (input[24] > 1e-35) {\n var41 = 0.039675921298659045;\n } else {\n var41 = -0.01470247025894634;\n }\n } else {\n if (input[135] > 1e-35) {\n var41 = -0.013162475027411236;\n } else {\n if (input[2] > 1e-35) {\n if (input[22] > 1e-35) {\n var41 = -0.01924589513592333;\n } else {\n if (input[21] > 1e-35) {\n var41 = -0.02301719200164619;\n } else {\n if (input[5] > 8.75754777636908) {\n if (input[4] > 2.602003343538398) {\n var41 = -0.0007468484638490539;\n } else {\n var41 = -0.0158247553028744;\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[99] > 1e-35) {\n var41 = 0.024493682002973784;\n } else {\n if (input[42] > 1e-35) {\n var41 = -0.07469088345156226;\n } else {\n if (input[45] > 1e-35) {\n var41 = -0.03838380763638677;\n } else {\n if (input[114] > 1e-35) {\n var41 = 0.02409327545276692;\n } else {\n if (input[154] > 1e-35) {\n var41 = -0.038977286951036944;\n } else {\n if (input[208] > 1e-35) {\n var41 = 0.021915882358345885;\n } else {\n var41 = 0.003839964304606302;\n }\n }\n }\n }\n }\n }\n } else {\n var41 = -0.0014382346596150915;\n }\n }\n }\n }\n } else {\n var41 = -0.008713493537728363;\n }\n }\n }\n }\n }\n }\n let var42: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.4978661367769956) {\n if (input[2] > 4.119004124609202) {\n if (input[3] > 1.2424533248940002) {\n var42 = -0.0017308950709495397;\n } else {\n var42 = -0.020269742816377157;\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n if (input[6] > 6.468474521450064) {\n var42 = 0.007854184286630537;\n } else {\n var42 = -0.005163758444496073;\n }\n } else {\n if (input[3] > 1.2424533248940002) {\n if (input[12] > 1e-35) {\n var42 = -0.009039854020477722;\n } else {\n var42 = 0.08762320620103459;\n }\n } else {\n if (input[194] > 1e-35) {\n var42 = -0.3433922378591172;\n } else {\n if (input[24] > 1e-35) {\n var42 = -0.2523113760729937;\n } else {\n var42 = -0.000461371156912453;\n }\n }\n }\n }\n }\n } else {\n if (input[5] > 5.692045796563381) {\n if (input[3] > 1.4978661367769956) {\n var42 = 0.007177758561499448;\n } else {\n if (input[2] > 0.8958797346140276) {\n var42 = 0.03195343200682438;\n } else {\n var42 = 0.059909349900388334;\n }\n }\n } else {\n if (input[5] > 4.424828703319957) {\n if (input[28] > 1e-35) {\n var42 = -0.10695282804536732;\n } else {\n var42 = 0.019125081292682575;\n }\n } else {\n if (input[135] > 1e-35) {\n var42 = -0.09257011968677195;\n } else {\n var42 = -0.012855523323410875;\n }\n }\n }\n }\n } else {\n if (input[14] > 1e-35) {\n var42 = 0.010052176448775013;\n } else {\n if (input[152] > 1e-35) {\n var42 = 0.011482760058014926;\n } else {\n if (input[156] > 1e-35) {\n var42 = -0.017677609761538152;\n } else {\n if (input[24] > 1e-35) {\n var42 = 0.01670301885059328;\n } else {\n if (input[39] > 1e-35) {\n var42 = -0.02425844450882272;\n } else {\n if (input[12] > 1e-35) {\n if (input[3] > 1.2424533248940002) {\n if (input[6] > 5.980149988077803) {\n var42 = 0.01117036123239103;\n } else {\n if (input[3] > 1.4978661367769956) {\n var42 = -0.005154239762347923;\n } else {\n var42 = 0.06349844063391799;\n }\n }\n } else {\n var42 = -0.011876368966362884;\n }\n } else {\n if (input[4] > 3.772694874805912) {\n var42 = -0.010120762110714197;\n } else {\n if (input[5] > 3.276966702012906) {\n if (input[4] > 2.4414009612931857) {\n if (input[4] > 3.1132683346437333) {\n var42 = -0.0035902728428789336;\n } else {\n var42 = 0.003411450739155564;\n }\n } else {\n if (input[5] > 8.17933999189099) {\n var42 = -0.018866709049095685;\n } else {\n var42 = -0.0038747233097564068;\n }\n }\n } else {\n var42 = 0.024379138339081993;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var43: number;\n if (input[7] > 0.5866799179067689) {\n if (input[11] > 1e-35) {\n if (input[217] > 1e-35) {\n var43 = 0.01816196279626246;\n } else {\n var43 = -0.008720340174685528;\n }\n } else {\n if (input[14] > 1e-35) {\n var43 = 0.017422275374961747;\n } else {\n if (input[3] > 2.802901033147999) {\n if (input[6] > 6.0026509725338455) {\n if (input[18] > 1e-35) {\n var43 = -0.035421013136394335;\n } else {\n if (input[219] > 1e-35) {\n var43 = -0.03997357699142973;\n } else {\n if (input[3] > 4.993822430271426) {\n var43 = -0.03250278247092862;\n } else {\n var43 = 0.004080430247607075;\n }\n }\n }\n } else {\n var43 = -0.010055330454519094;\n }\n } else {\n if (input[5] > 9.345963324807864) {\n var43 = -0.008136951493137817;\n } else {\n if (input[90] > 1e-35) {\n var43 = -0.16414188828180187;\n } else {\n if (input[45] > 1e-35) {\n var43 = -0.0395103723535772;\n } else {\n if (input[17] > 1e-35) {\n if (input[6] > 3.314020688089767) {\n var43 = 0.03144428117941763;\n } else {\n var43 = -0.12305809642153893;\n }\n } else {\n if (input[5] > 3.417592293073651) {\n var43 = 0.006863569747629234;\n } else {\n if (input[7] > 0.9626084674797213) {\n if (input[204] > 1e-35) {\n var43 = 0.08986402088848823;\n } else {\n if (input[100] > 1e-35) {\n var43 = 0.09658177526577977;\n } else {\n if (input[141] > 1e-35) {\n var43 = 0.06795495668113817;\n } else {\n if (input[28] > 1e-35) {\n if (input[3] > 1e-35) {\n var43 = 0.10311172778826272;\n } else {\n var43 = -0.12367638872784459;\n }\n } else {\n if (input[209] > 1e-35) {\n var43 = 0.06796205879581844;\n } else {\n if (input[6] > 3.0677824455408698) {\n if (input[3] > 2.012675845367575) {\n var43 = -0.1815028770626217;\n } else {\n var43 = -0.027600842388305583;\n }\n } else {\n var43 = 0.013979123567456554;\n }\n }\n }\n }\n }\n }\n } else {\n var43 = -0.003475039039176338;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[6] > 4.3882378946731615) {\n if (input[3] > 3.6242520361853052) {\n var43 = -0.008151073332139989;\n } else {\n if (input[3] > 2.4414009612931857) {\n if (input[48] > 1e-35) {\n var43 = -0.05732062477153205;\n } else {\n var43 = 0.0038104987226822806;\n }\n } else {\n if (input[7] > 0.14547530463198097) {\n var43 = -0.0015360108147469411;\n } else {\n var43 = -0.014797616303672155;\n }\n }\n }\n } else {\n if (input[3] > 0.8958797346140276) {\n var43 = -0.010446976011382926;\n } else {\n var43 = -0.039018423658353285;\n }\n }\n }\n let var44: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.4978661367769956) {\n if (input[2] > 4.620046665062766) {\n if (input[3] > 1.8688348091416842) {\n var44 = -0.0031733808376565214;\n } else {\n var44 = -0.019463570735432378;\n }\n } else {\n var44 = 0.0032566959999593536;\n }\n } else {\n if (input[5] > 5.692045796563381) {\n if (input[3] > 1.4978661367769956) {\n var44 = 0.006472511895453073;\n } else {\n if (input[2] > 0.8958797346140276) {\n var44 = 0.029439910335277677;\n } else {\n var44 = 0.05703290277034656;\n }\n }\n } else {\n if (input[219] > 1e-35) {\n var44 = -0.06489530937321614;\n } else {\n if (input[5] > 4.424828703319957) {\n var44 = 0.017756995160153607;\n } else {\n if (input[125] > 1e-35) {\n var44 = -0.13863131633711023;\n } else {\n var44 = -0.011337464460106939;\n }\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[3] > 1e-35) {\n var44 = -0.04822012795561216;\n } else {\n if (input[125] > 1e-35) {\n var44 = 0.06083023155995546;\n } else {\n if (input[141] > 1e-35) {\n var44 = 0.04503531231698771;\n } else {\n if (input[5] > 7.751690325550034) {\n var44 = -0.008826435995092507;\n } else {\n var44 = 0.0004769856196102064;\n }\n }\n }\n }\n } else {\n if (input[5] > 5.895778350950796) {\n var44 = -0.03439788269853701;\n } else {\n var44 = 0.0012862199645308793;\n }\n }\n } else {\n if (input[141] > 1e-35) {\n if (input[3] > 3.0677824455408698) {\n var44 = 0.0046610227653059695;\n } else {\n var44 = -0.04504560149384845;\n }\n } else {\n if (input[3] > 4.3372693810700085) {\n var44 = -0.011924612526365003;\n } else {\n if (input[151] > 1e-35) {\n var44 = -0.07909878419302184;\n } else {\n if (input[40] > 1e-35) {\n var44 = -0.04837106565429512;\n } else {\n if (input[52] > 1e-35) {\n var44 = -0.06478730352567258;\n } else {\n if (input[18] > 1e-35) {\n if (input[46] > 1e-35) {\n var44 = 0.060888920864590634;\n } else {\n if (input[5] > 3.5694334999727624) {\n var44 = -0.02601024872439008;\n } else {\n var44 = 0.07960150564774994;\n }\n }\n } else {\n if (input[46] > 1e-35) {\n var44 = -0.027213119561154103;\n } else {\n if (input[51] > 1e-35) {\n var44 = -0.054081846676903716;\n } else {\n if (input[54] > 1e-35) {\n var44 = -0.07375359621246233;\n } else {\n if (input[50] > 1e-35) {\n var44 = -0.0570341640965886;\n } else {\n var44 = 0.0021129818482267812;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var45: number;\n if (input[2] > 2.861792550976191) {\n if (input[11] > 1e-35) {\n if (input[58] > 1e-35) {\n var45 = -0.09222476830824185;\n } else {\n if (input[156] > 1e-35) {\n var45 = -0.044357001480428;\n } else {\n var45 = -0.009033627105152873;\n }\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[5] > 7.429817490674132) {\n var45 = -0.007435399919321396;\n } else {\n var45 = -0.025630334739367253;\n }\n } else {\n if (input[155] > 1e-35) {\n var45 = 0.02064199664419035;\n } else {\n if (input[5] > 8.75754777636908) {\n if (input[2] > 4.119004124609202) {\n var45 = -0.012759040985224594;\n } else {\n var45 = -0.0009375109950390992;\n }\n } else {\n if (input[21] > 1e-35) {\n var45 = -0.028664595543047417;\n } else {\n if (input[187] > 1e-35) {\n var45 = -0.03837361994986333;\n } else {\n if (input[22] > 1e-35) {\n var45 = -0.027274995074267547;\n } else {\n if (input[14] > 1e-35) {\n var45 = 0.016392245342055616;\n } else {\n if (input[17] > 1e-35) {\n var45 = 0.022509678093313362;\n } else {\n if (input[28] > 1e-35) {\n var45 = 0.025145343126000193;\n } else {\n if (input[39] > 1e-35) {\n var45 = -0.02939647868188604;\n } else {\n var45 = 0.00042395552644239256;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 2.012675845367575) {\n var45 = -0.0030925701821976686;\n } else {\n if (input[5] > 6.0390628155997765) {\n if (input[2] > 0.8958797346140276) {\n var45 = 0.010736817315927911;\n } else {\n var45 = 0.02426980448005241;\n }\n } else {\n if (input[28] > 1e-35) {\n if (input[194] > 1e-35) {\n var45 = -0.3070569158934055;\n } else {\n if (input[196] > 1e-35) {\n var45 = -0.5506885961570867;\n } else {\n var45 = -0.033353293982668515;\n }\n }\n } else {\n var45 = 0.006553036790621832;\n }\n }\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n if (input[5] > 3.5694334999727624) {\n if (input[155] > 1e-35) {\n var45 = 0.02102370525016274;\n } else {\n var45 = 0.003409533559556135;\n }\n } else {\n if (input[204] > 1e-35) {\n var45 = 0.08873962123163927;\n } else {\n if (input[24] > 1e-35) {\n var45 = 0.10555359938821945;\n } else {\n if (input[28] > 1e-35) {\n var45 = 0.09719645392539251;\n } else {\n if (input[196] > 1e-35) {\n var45 = 0.08224623369607056;\n } else {\n var45 = -0.020134405544960793;\n }\n }\n }\n }\n }\n } else {\n var45 = -0.0015937623030202052;\n }\n }\n }\n let var46: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.8688348091416842) {\n if (input[3] > 1.4978661367769956) {\n if (input[3] > 3.540854293052788) {\n var46 = -0.0076758153562413375;\n } else {\n if (input[18] > 1e-35) {\n var46 = -0.04295196457825341;\n } else {\n if (input[51] > 1e-35) {\n var46 = -0.13248011320062422;\n } else {\n var46 = 0.008952360414023641;\n }\n }\n }\n } else {\n if (input[7] > 0.987306237235768) {\n var46 = 0.006439776900137331;\n } else {\n var46 = -0.012660562195035134;\n }\n }\n } else {\n if (input[3] > 2.861792550976191) {\n if (input[30] > 1e-35) {\n var46 = 0.026757175255811883;\n } else {\n var46 = -0.01062556784320532;\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n var46 = 0.02114926571950188;\n } else {\n if (input[8] > 1e-35) {\n if (input[7] > 0.9738681190948303) {\n if (input[7] > 0.996914501566243) {\n var46 = 0.039844832378913425;\n } else {\n var46 = -0.06690456482695102;\n }\n } else {\n var46 = 0.05010759067838343;\n }\n } else {\n if (input[7] > 0.9901971344332651) {\n if (input[204] > 1e-35) {\n if (input[7] > 0.9945060383544003) {\n var46 = 0.03772632631184001;\n } else {\n var46 = -0.28522617893050056;\n }\n } else {\n if (input[28] > 1e-35) {\n var46 = -0.060992612788434375;\n } else {\n var46 = 0.03341245674945403;\n }\n }\n } else {\n var46 = 0.051288950777861456;\n }\n }\n }\n }\n }\n } else {\n if (input[8] > 1e-35) {\n var46 = -0.010769283931178146;\n } else {\n if (input[29] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[1] > 1e-35) {\n if (input[7] > 0.98482287934795) {\n var46 = 0.009069204772381522;\n } else {\n var46 = -0.004081394384581673;\n }\n } else {\n var46 = -0.03594060084257492;\n }\n } else {\n if (input[7] > 0.9216401592048815) {\n var46 = -0.00442206228805168;\n } else {\n var46 = -0.03576891499137606;\n }\n }\n } else {\n if (input[55] > 1e-35) {\n var46 = -0.08223884312902127;\n } else {\n if (input[57] > 1e-35) {\n var46 = -0.0742535346669798;\n } else {\n if (input[149] > 1e-35) {\n var46 = -0.07940704728071792;\n } else {\n if (input[39] > 1e-35) {\n var46 = -0.017161105634171125;\n } else {\n if (input[49] > 1e-35) {\n var46 = -0.04763279499691125;\n } else {\n if (input[139] > 1e-35) {\n var46 = -0.027192821855546695;\n } else {\n if (input[10] > 1e-35) {\n var46 = -0.0036316338579956914;\n } else {\n var46 = 0.0026484338648234077;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var47: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.4978661367769956) {\n if (input[2] > 5.527441013321604) {\n var47 = -0.012306712525171806;\n } else {\n if (input[7] > 0.26911173821332884) {\n if (input[18] > 1e-35) {\n var47 = -0.027850707388722303;\n } else {\n if (input[91] > 1e-35) {\n var47 = -0.07216882827488169;\n } else {\n if (input[2] > 2.740319461670996) {\n if (input[3] > 1.4978661367769956) {\n var47 = 0.005596837686865309;\n } else {\n var47 = -0.0059429747278747225;\n }\n } else {\n var47 = 0.009524033665726878;\n }\n }\n }\n } else {\n var47 = -0.0077898166249992535;\n }\n }\n } else {\n if (input[6] > 5.912149824839399) {\n if (input[3] > 1.4978661367769956) {\n if (input[30] > 1e-35) {\n var47 = 0.032201880996274065;\n } else {\n var47 = -0.009587971174292791;\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n var47 = 0.02761965407835318;\n } else {\n var47 = 0.05238312639482409;\n }\n }\n } else {\n if (input[7] > 0.990877425524446) {\n if (input[28] > 1e-35) {\n if (input[156] > 1e-35) {\n var47 = 0.08220352701195494;\n } else {\n var47 = -0.16200772313735304;\n }\n } else {\n if (input[135] > 1e-35) {\n if (input[6] > 4.310776603370241) {\n var47 = -0.03126230621131264;\n } else {\n var47 = -0.15437767199900418;\n }\n } else {\n if (input[219] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var47 = 0.018944713961164792;\n } else {\n if (input[3] > 1e-35) {\n var47 = 0.06629929139668997;\n } else {\n var47 = -0.16790799717043633;\n }\n }\n } else {\n if (input[192] > 1e-35) {\n var47 = -0.3320398525405097;\n } else {\n var47 = 0.009790162291004705;\n }\n }\n }\n }\n } else {\n if (input[125] > 1e-35) {\n var47 = -0.0996239956884951;\n } else {\n var47 = 0.017982806591038288;\n }\n }\n }\n }\n } else {\n if (input[25] > 1e-35) {\n var47 = -0.02642518530716432;\n } else {\n if (input[6] > 9.286096980078398) {\n if (input[3] > 2.740319461670996) {\n var47 = -0.0027582177390145703;\n } else {\n var47 = -0.02047492290459601;\n }\n } else {\n if (input[17] > 1e-35) {\n var47 = 0.01622159988588393;\n } else {\n if (input[7] > 0.5866799179067689) {\n var47 = 0.0012556670436606133;\n } else {\n if (input[3] > 2.3502401828962087) {\n if (input[3] > 3.314020688089767) {\n var47 = -0.00567335909535631;\n } else {\n var47 = 0.0036605424249172938;\n }\n } else {\n if (input[7] > 0.085616240166877) {\n var47 = -0.00662352094724046;\n } else {\n var47 = -0.024196995936398374;\n }\n }\n }\n }\n }\n }\n }\n let var48: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.2424533248940002) {\n if (input[2] > 2.802901033147999) {\n if (input[3] > 1.8688348091416842) {\n if (input[4] > 3.6242520361853052) {\n var48 = -0.008283589876968955;\n } else {\n var48 = 0.005263882290960596;\n }\n } else {\n if (input[7] > 0.9662372103242399) {\n var48 = 0.0028703212438091555;\n } else {\n var48 = -0.014488335095453487;\n }\n }\n } else {\n if (input[5] > 3.5694334999727624) {\n var48 = 0.006182444666070272;\n } else {\n var48 = 0.04834325475124454;\n }\n }\n } else {\n if (input[5] > 5.821564412917691) {\n if (input[3] > 1.4978661367769956) {\n var48 = 0.006862035478899274;\n } else {\n if (input[2] > 1e-35) {\n var48 = 0.03694434517261685;\n } else {\n var48 = 0.06818308291563471;\n }\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[4] > 3.979637980058199) {\n var48 = -0.14792403668068005;\n } else {\n if (input[5] > 4.297262267176281) {\n var48 = 0.04085199387960594;\n } else {\n var48 = -0.08112459203056922;\n }\n }\n } else {\n if (input[7] > 0.990877425524446) {\n if (input[204] > 1e-35) {\n if (input[4] > 2.4414009612931857) {\n var48 = 0.040094872099644886;\n } else {\n var48 = -0.37432021591644105;\n }\n } else {\n if (input[128] > 1e-35) {\n if (input[17] > 1e-35) {\n var48 = 0.11216772098992614;\n } else {\n var48 = -0.39517539261887863;\n }\n } else {\n var48 = -0.006202508512715542;\n }\n }\n } else {\n var48 = 0.031730389306944315;\n }\n }\n }\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[5] > 3.156774023138548) {\n var48 = -0.011787620507206525;\n } else {\n if (input[3] > 1.2424533248940002) {\n var48 = -0.0681989521208321;\n } else {\n var48 = 0.06597717957453096;\n }\n }\n } else {\n if (input[2] > 1e-35) {\n if (input[25] > 1e-35) {\n var48 = -0.024543929344106336;\n } else {\n if (input[5] > 8.193814844759492) {\n if (input[4] > 2.602003343538398) {\n if (input[2] > 5.167634984480833) {\n var48 = -0.00996811570890536;\n } else {\n var48 = 0.001134417943860963;\n }\n } else {\n var48 = -0.013004815776467261;\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[22] > 1e-35) {\n var48 = -0.019057324908699217;\n } else {\n if (input[141] > 1e-35) {\n var48 = -0.026707851278989517;\n } else {\n var48 = 0.005608056403567553;\n }\n }\n } else {\n var48 = -0.0017699070677530831;\n }\n }\n }\n } else {\n if (input[3] > 1.4978661367769956) {\n var48 = -0.005457163739006659;\n } else {\n var48 = -0.02994467745413277;\n }\n }\n }\n }\n let var49: number;\n if (input[11] > 1e-35) {\n if (input[154] > 1e-35) {\n var49 = -0.07640004589975245;\n } else {\n if (input[153] > 1e-35) {\n var49 = -0.027921183286970398;\n } else {\n if (input[156] > 1e-35) {\n var49 = -0.02508900369371103;\n } else {\n if (input[47] > 1e-35) {\n var49 = -0.09621039139423637;\n } else {\n if (input[46] > 1e-35) {\n var49 = -0.05890206826599292;\n } else {\n var49 = -0.0018521707885188695;\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.1998775237752378) {\n if (input[39] > 1e-35) {\n var49 = -0.02026563108381904;\n } else {\n if (input[91] > 1e-35) {\n var49 = -0.03979999802398471;\n } else {\n if (input[14] > 1e-35) {\n if (input[134] > 1e-35) {\n var49 = 0.044705853812635206;\n } else {\n var49 = 0.01112016315736189;\n }\n } else {\n if (input[24] > 1e-35) {\n if (input[6] > 3.417592293073651) {\n var49 = 0.01585670681557334;\n } else {\n var49 = 0.0820229237073549;\n }\n } else {\n if (input[9] > 1e-35) {\n if (input[204] > 1e-35) {\n if (input[6] > 3.9219243190762363) {\n var49 = 0.01475544028693712;\n } else {\n if (input[30] > 1e-35) {\n var49 = 0.10219265831102325;\n } else {\n var49 = -0.0567832116465987;\n }\n }\n } else {\n if (input[154] > 1e-35) {\n var49 = -0.04682869193620295;\n } else {\n var49 = 0.0058147572533605784;\n }\n }\n } else {\n if (input[123] > 1e-35) {\n var49 = -0.04011640490395746;\n } else {\n if (input[17] > 1e-35) {\n if (input[6] > 3.314020688089767) {\n var49 = 0.016472642951500794;\n } else {\n var49 = -0.10372235311156908;\n }\n } else {\n if (input[19] > 1e-35) {\n var49 = 0.013619887374131652;\n } else {\n if (input[28] > 1e-35) {\n if (input[6] > 3.1984648276080736) {\n if (input[6] > 5.5816130673839615) {\n var49 = 0.021404525777064917;\n } else {\n var49 = -0.022090537029637168;\n }\n } else {\n var49 = 0.07927547222505857;\n }\n } else {\n if (input[129] > 1e-35) {\n var49 = -0.0315112950229846;\n } else {\n if (input[90] > 1e-35) {\n var49 = -0.08016175793969123;\n } else {\n if (input[60] > 1e-35) {\n var49 = -0.044255594885932;\n } else {\n if (input[150] > 1e-35) {\n var49 = -0.0643645650066138;\n } else {\n var49 = 0.000018071436579202054;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[6] > 6.132312266239896) {\n var49 = 0.00017227075512669227;\n } else {\n var49 = -0.010904669702571911;\n }\n }\n }\n let var50: number;\n if (input[0] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[7] > 0.30853255358841714) {\n if (input[154] > 1e-35) {\n var50 = -0.053460642910797676;\n } else {\n var50 = 0.009652079082741289;\n }\n } else {\n var50 = -0.0017676195976280011;\n }\n } else {\n if (input[134] > 1e-35) {\n var50 = 0.01746182064829904;\n } else {\n if (input[32] > 1e-35) {\n var50 = 0.033149881191962445;\n } else {\n if (input[138] > 1e-35) {\n var50 = 0.02149173543949675;\n } else {\n if (input[37] > 1e-35) {\n var50 = 0.028519159270523897;\n } else {\n if (input[152] > 1e-35) {\n var50 = 0.023352031441951773;\n } else {\n if (input[217] > 1e-35) {\n var50 = 0.02290558132732214;\n } else {\n var50 = -0.01850975101703459;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[152] > 1e-35) {\n var50 = 0.010488854074509982;\n } else {\n if (input[155] > 1e-35) {\n if (input[12] > 1e-35) {\n var50 = 0.027490522294963154;\n } else {\n var50 = 0.002575743497494008;\n }\n } else {\n if (input[131] > 1e-35) {\n var50 = -0.07138027268500055;\n } else {\n if (input[57] > 1e-35) {\n var50 = -0.06658662137088783;\n } else {\n if (input[28] > 1e-35) {\n var50 = 0.015141080652315508;\n } else {\n if (input[55] > 1e-35) {\n var50 = -0.07156337757427284;\n } else {\n if (input[204] > 1e-35) {\n var50 = 0.008085415901726045;\n } else {\n if (input[99] > 1e-35) {\n if (input[1] > 1e-35) {\n var50 = 0.01803019280250009;\n } else {\n var50 = -0.012275416064615064;\n }\n } else {\n if (input[113] > 1e-35) {\n var50 = 0.007680714218522011;\n } else {\n if (input[102] > 1e-35) {\n var50 = 0.01923593781092882;\n } else {\n if (input[38] > 1e-35) {\n var50 = 0.00598208846998872;\n } else {\n if (input[112] > 1e-35) {\n var50 = 0.00895148693111358;\n } else {\n if (input[217] > 1e-35) {\n var50 = 0.004322676779141819;\n } else {\n if (input[114] > 1e-35) {\n if (input[1] > 1e-35) {\n var50 = 0.019173900241286065;\n } else {\n if (input[18] > 1e-35) {\n var50 = -0.1302545616586715;\n } else {\n var50 = -0.012219608237225175;\n }\n }\n } else {\n if (input[89] > 1e-35) {\n var50 = 0.019080595932083305;\n } else {\n if (input[95] > 1e-35) {\n var50 = 0.009182530113836561;\n } else {\n var50 = -0.006531048204768366;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var51: number;\n if (input[2] > 4.135134555718313) {\n if (input[47] > 1e-35) {\n var51 = -0.06057129526622943;\n } else {\n if (input[5] > 6.805168536739806) {\n if (input[3] > 2.4414009612931857) {\n if (input[1] > 1e-35) {\n if (input[32] > 1e-35) {\n var51 = -0.09672976728291365;\n } else {\n if (input[217] > 1e-35) {\n var51 = -0.09138286775903748;\n } else {\n if (input[114] > 1e-35) {\n var51 = 0.034435801312936894;\n } else {\n var51 = 0.003550781249532139;\n }\n }\n }\n } else {\n if (input[56] > 1e-35) {\n var51 = 0.06582022232543998;\n } else {\n if (input[144] > 1e-35) {\n var51 = -0.08601101006110747;\n } else {\n var51 = -0.006766914059699758;\n }\n }\n }\n } else {\n if (input[217] > 1e-35) {\n var51 = 0.001822103802069182;\n } else {\n var51 = -0.013646878234832634;\n }\n }\n } else {\n if (input[8] > 1e-35) {\n var51 = -0.02495807137678248;\n } else {\n if (input[1] > 1e-35) {\n var51 = 0.009517017217557915;\n } else {\n var51 = -0.007488737506950444;\n }\n }\n }\n }\n } else {\n if (input[6] > 6.1537953943602615) {\n if (input[140] > 1e-35) {\n var51 = -0.013180308369805589;\n } else {\n if (input[51] > 1e-35) {\n var51 = -0.0496089337787575;\n } else {\n if (input[15] > 1e-35) {\n if (input[30] > 1e-35) {\n var51 = 0.017032153502995334;\n } else {\n var51 = -0.01330098154550191;\n }\n } else {\n if (input[10] > 1e-35) {\n if (input[56] > 1e-35) {\n var51 = 0.04713518460375107;\n } else {\n var51 = -0.0016223104582873055;\n }\n } else {\n if (input[131] > 1e-35) {\n var51 = -0.07291331059881433;\n } else {\n if (input[27] > 1e-35) {\n var51 = -0.015619378359486803;\n } else {\n var51 = 0.006051005570772542;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[3] > 3.1132683346437333) {\n if (input[8] > 1e-35) {\n var51 = -0.02945681137428643;\n } else {\n var51 = -0.00725026522062693;\n }\n } else {\n if (input[6] > 1e-35) {\n if (input[3] > 1.2424533248940002) {\n var51 = 0.0035081297381004684;\n } else {\n if (input[194] > 1e-35) {\n if (input[5] > 3.772694874805912) {\n var51 = -0.03142097937872678;\n } else {\n var51 = -0.17253564001853064;\n }\n } else {\n if (input[5] > 3.156774023138548) {\n var51 = -0.004860170522962415;\n } else {\n if (input[12] > 1e-35) {\n var51 = -0.04169370739781986;\n } else {\n var51 = 0.05886396855048806;\n }\n }\n }\n }\n } else {\n var51 = -0.10415236736977414;\n }\n }\n }\n }\n let var52: number;\n if (input[2] > 2.3502401828962087) {\n if (input[11] > 1e-35) {\n if (input[58] > 1e-35) {\n var52 = -0.07548370555339029;\n } else {\n var52 = -0.009060327134219393;\n }\n } else {\n if (input[21] > 1e-35) {\n var52 = -0.02536204329245056;\n } else {\n if (input[155] > 1e-35) {\n var52 = 0.01626198918750622;\n } else {\n if (input[142] > 1e-35) {\n var52 = -0.029262265693304763;\n } else {\n if (input[4] > 1.8688348091416842) {\n if (input[48] > 1e-35) {\n var52 = -0.0522966414357639;\n } else {\n if (input[47] > 1e-35) {\n var52 = -0.03867213359133592;\n } else {\n if (input[149] > 1e-35) {\n var52 = -0.10392339919606915;\n } else {\n if (input[135] > 1e-35) {\n var52 = -0.010541433982611018;\n } else {\n if (input[51] > 1e-35) {\n var52 = -0.06273170107556418;\n } else {\n if (input[54] > 1e-35) {\n var52 = -0.08769404750229767;\n } else {\n if (input[18] > 1e-35) {\n if (input[1] > 1e-35) {\n var52 = 0.0022966362330231133;\n } else {\n if (input[31] > 1e-35) {\n var52 = 0.19571528454816625;\n } else {\n var52 = -0.04919246049942885;\n }\n }\n } else {\n if (input[50] > 1e-35) {\n var52 = -0.06766114512966344;\n } else {\n if (input[7] > 0.9793410316570949) {\n var52 = 0.00837983401462093;\n } else {\n var52 = 0.0007986280224776339;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[186] > 1e-35) {\n var52 = -0.16446174535054356;\n } else {\n if (input[62] > 1e-35) {\n var52 = 0.06508947502037822;\n } else {\n var52 = -0.010260699234562241;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[6] > 5.486867329823672) {\n if (input[140] > 1e-35) {\n var52 = -0.01589822136096899;\n } else {\n if (input[125] > 1e-35) {\n var52 = -0.025465846683560996;\n } else {\n if (input[190] > 1e-35) {\n var52 = -0.03671457167643481;\n } else {\n if (input[91] > 1e-35) {\n var52 = -0.03821691103237143;\n } else {\n if (input[57] > 1e-35) {\n var52 = -0.07502589184745939;\n } else {\n if (input[50] > 1e-35) {\n var52 = -0.05395522531288487;\n } else {\n var52 = 0.005241788285288346;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[4] > 3.1132683346437333) {\n var52 = -0.008741587825172916;\n } else {\n if (input[12] > 1e-35) {\n if (input[100] > 1e-35) {\n var52 = 0.06608964318040904;\n } else {\n var52 = -0.012827641806975033;\n }\n } else {\n var52 = 0.004744161815471635;\n }\n }\n }\n }\n let var53: number;\n if (input[4] > 0.8958797346140276) {\n if (input[2] > 5.4049245766661995) {\n if (input[5] > 6.0051201133541365) {\n var53 = -0.008352440702113342;\n } else {\n var53 = 0.00818161196788124;\n }\n } else {\n if (input[123] > 1e-35) {\n var53 = -0.02387242845183433;\n } else {\n if (input[190] > 1e-35) {\n var53 = -0.03574127589374163;\n } else {\n if (input[152] > 1e-35) {\n var53 = 0.01262147105943106;\n } else {\n if (input[11] > 1e-35) {\n if (input[58] > 1e-35) {\n var53 = -0.05955906348417553;\n } else {\n var53 = -0.003717083835106387;\n }\n } else {\n if (input[6] > 6.0026509725338455) {\n if (input[15] > 1e-35) {\n if (input[30] > 1e-35) {\n var53 = 0.023589988800048537;\n } else {\n var53 = -0.01290090410411923;\n }\n } else {\n if (input[38] > 1e-35) {\n var53 = 0.015295369946508892;\n } else {\n if (input[1] > 1e-35) {\n if (input[4] > 2.740319461670996) {\n if (input[22] > 1e-35) {\n var53 = -0.01614208413608714;\n } else {\n if (input[42] > 1e-35) {\n var53 = -0.05454658382875832;\n } else {\n var53 = 0.008894057269932708;\n }\n }\n } else {\n if (input[141] > 1e-35) {\n var53 = -0.029660896741885025;\n } else {\n var53 = 0.0007918628584206305;\n }\n }\n } else {\n if (input[12] > 1e-35) {\n var53 = 0.010735865892076339;\n } else {\n if (input[218] > 1e-35) {\n var53 = 0.06499398466334683;\n } else {\n if (input[29] > 1e-35) {\n var53 = -0.02987220407530282;\n } else {\n if (input[118] > 1e-35) {\n var53 = -0.05994319680494358;\n } else {\n var53 = -0.0022119035344297464;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[113] > 1e-35) {\n if (input[24] > 1e-35) {\n var53 = 0.09992180359591052;\n } else {\n var53 = 0.003953091072683087;\n }\n } else {\n if (input[204] > 1e-35) {\n if (input[4] > 2.249904835165133) {\n var53 = 0.0012737346185997833;\n } else {\n if (input[5] > 3.979637980058199) {\n var53 = 0.012350990163327259;\n } else {\n if (input[29] > 1e-35) {\n var53 = -0.4173182186315585;\n } else {\n var53 = 0.09483857671510697;\n }\n }\n }\n } else {\n var53 = -0.0034771114722081282;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[19] > 1e-35) {\n var53 = 0.04818172610227253;\n } else {\n if (input[158] > 1e-35) {\n var53 = 0.09085872490042819;\n } else {\n if (input[123] > 1e-35) {\n var53 = 0.046170414156546824;\n } else {\n var53 = -0.030833991141721785;\n }\n }\n }\n }\n let var54: number;\n if (input[0] > 1e-35) {\n if (input[2] > 1.2424533248940002) {\n if (input[2] > 2.138333059508028) {\n if (input[3] > 1.4978661367769956) {\n if (input[3] > 4.197173680708697) {\n var54 = -0.015067858446918237;\n } else {\n if (input[5] > 3.979637980058199) {\n var54 = 0.0025493966284458503;\n } else {\n if (input[24] > 1e-35) {\n var54 = 0.10170949517680355;\n } else {\n if (input[3] > 2.3502401828962087) {\n var54 = -0.010182198776560389;\n } else {\n if (input[7] > 0.9662372103242399) {\n var54 = 0.0855616171705204;\n } else {\n var54 = -0.0044290837387121786;\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.992067132663463) {\n var54 = 0.006950766900495411;\n } else {\n var54 = -0.011703657118613042;\n }\n }\n } else {\n if (input[3] > 3.314020688089767) {\n var54 = -0.007590151825214328;\n } else {\n var54 = 0.011931088318037653;\n }\n }\n } else {\n if (input[5] > 4.424828703319957) {\n if (input[3] > 1.4978661367769956) {\n var54 = 0.003895993078605918;\n } else {\n if (input[2] > 1e-35) {\n if (input[5] > 5.859359688974663) {\n var54 = 0.03311360926528595;\n } else {\n if (input[7] > 0.9936484368123463) {\n if (input[28] > 1e-35) {\n var54 = -0.1296383065201116;\n } else {\n if (input[18] > 1e-35) {\n var54 = -0.2304238024287801;\n } else {\n var54 = -0.0007035160942990814;\n }\n }\n } else {\n var54 = 0.03872938637191365;\n }\n }\n } else {\n var54 = 0.05931958562003542;\n }\n }\n } else {\n if (input[204] > 1e-35) {\n if (input[7] > 0.9926276364955392) {\n var54 = -0.2503820824196552;\n } else {\n var54 = 0.01514980593659256;\n }\n } else {\n if (input[135] > 1e-35) {\n if (input[7] > 0.990877425524446) {\n var54 = -0.12146435764173391;\n } else {\n var54 = 0.03579230653026111;\n }\n } else {\n if (input[125] > 1e-35) {\n var54 = -0.11990587076136816;\n } else {\n var54 = -0.0017264106529335022;\n }\n }\n }\n }\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n if (input[3] > 4.878999622893762) {\n var54 = -0.028006872909888104;\n } else {\n if (input[17] > 1e-35) {\n var54 = 0.015327119563713427;\n } else {\n if (input[14] > 1e-35) {\n var54 = 0.008966123864441086;\n } else {\n if (input[24] > 1e-35) {\n var54 = 0.014884319812071584;\n } else {\n var54 = -0.0008180929266082377;\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[5] > 5.895778350950796) {\n var54 = -0.02927173520516398;\n } else {\n var54 = 0.004256706136162408;\n }\n } else {\n var54 = -0.0030692852485265805;\n }\n }\n }\n let var55: number;\n if (input[39] > 1e-35) {\n var55 = -0.019116728566000912;\n } else {\n if (input[152] > 1e-35) {\n var55 = 0.011159312353677259;\n } else {\n if (input[52] > 1e-35) {\n var55 = -0.06556505864685434;\n } else {\n if (input[7] > 0.14547530463198097) {\n if (input[187] > 1e-35) {\n var55 = -0.02203060071288757;\n } else {\n if (input[48] > 1e-35) {\n var55 = -0.03406851575382452;\n } else {\n if (input[10] > 1e-35) {\n if (input[219] > 1e-35) {\n var55 = -0.026242020752538932;\n } else {\n var55 = -0.0026163734864036088;\n }\n } else {\n if (input[21] > 1e-35) {\n var55 = -0.016803181860075653;\n } else {\n if (input[8] > 1e-35) {\n if (input[5] > 3.0201273556387074) {\n if (input[6] > 4.722943345003718) {\n if (input[125] > 1e-35) {\n var55 = -0.07907862980413462;\n } else {\n var55 = -0.0024968534057976956;\n }\n } else {\n if (input[141] > 1e-35) {\n var55 = 0.01751368963010255;\n } else {\n var55 = -0.035334686232177996;\n }\n }\n } else {\n if (input[3] > 1e-35) {\n var55 = -0.049727650261844114;\n } else {\n var55 = 0.06649006602788514;\n }\n }\n } else {\n if (input[51] > 1e-35) {\n var55 = -0.047051279496267896;\n } else {\n if (input[58] > 1e-35) {\n if (input[19] > 1e-35) {\n var55 = 0.06794814379814933;\n } else {\n var55 = -0.033933057704283995;\n }\n } else {\n if (input[6] > 8.681774988134558) {\n var55 = -0.001906867260604815;\n } else {\n if (input[3] > 3.3842466058243152) {\n if (input[23] > 1e-35) {\n var55 = 0.029126145919054786;\n } else {\n if (input[12] > 1e-35) {\n if (input[59] > 1e-35) {\n var55 = 0.06547842372312768;\n } else {\n var55 = 0.005706402727440608;\n }\n } else {\n if (input[89] > 1e-35) {\n var55 = 0.05238448470974841;\n } else {\n var55 = -0.003970577798047124;\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n if (input[3] > 1e-35) {\n var55 = -0.02994666941636212;\n } else {\n var55 = 0.029175297065511276;\n }\n } else {\n if (input[139] > 1e-35) {\n var55 = -0.03926804943552878;\n } else {\n if (input[7] > 0.9626084674797213) {\n var55 = 0.010270060885238803;\n } else {\n if (input[6] > 4.5379471377116305) {\n var55 = 0.0051640733904868355;\n } else {\n var55 = -0.006326617548806485;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[3] > 2.3502401828962087) {\n var55 = -0.001064039369711557;\n } else {\n var55 = -0.015232776877478657;\n }\n }\n }\n }\n }\n let var56: number;\n if (input[4] > 0.8958797346140276) {\n if (input[0] > 1e-35) {\n if (input[3] > 3.540854293052788) {\n if (input[138] > 1e-35) {\n var56 = 0.020620751195117866;\n } else {\n var56 = -0.007657642824282572;\n }\n } else {\n if (input[9] > 1e-35) {\n var56 = 0.013255738783000171;\n } else {\n if (input[123] > 1e-35) {\n var56 = -0.04553588467808997;\n } else {\n if (input[14] > 1e-35) {\n var56 = 0.020257942633657516;\n } else {\n if (input[17] > 1e-35) {\n var56 = 0.02379466680602821;\n } else {\n if (input[7] > 0.26911173821332884) {\n var56 = 0.004563013176326579;\n } else {\n var56 = -0.006044878247080096;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[208] > 1e-35) {\n if (input[1] > 1e-35) {\n var56 = 0.016583051243963785;\n } else {\n var56 = -0.005473696128326885;\n }\n } else {\n if (input[53] > 1e-35) {\n var56 = -0.07392011100318682;\n } else {\n if (input[3] > 4.840234496705036) {\n var56 = -0.022277334024938686;\n } else {\n if (input[49] > 1e-35) {\n var56 = -0.04140311782670083;\n } else {\n if (input[40] > 1e-35) {\n var56 = -0.041278341040658334;\n } else {\n if (input[156] > 1e-35) {\n var56 = -0.01087788432462589;\n } else {\n if (input[8] > 1e-35) {\n if (input[141] > 1e-35) {\n var56 = 0.032404890147508435;\n } else {\n var56 = -0.008762958389316138;\n }\n } else {\n if (input[153] > 1e-35) {\n if (input[18] > 1e-35) {\n var56 = 0.03064796696780178;\n } else {\n if (input[19] > 1e-35) {\n var56 = 0.025912082684934896;\n } else {\n if (input[7] > 0.9033253454895247) {\n var56 = 0.00010665286308939541;\n } else {\n var56 = -0.019390651252802232;\n }\n }\n }\n } else {\n if (input[133] > 1e-35) {\n var56 = -0.013215417920201165;\n } else {\n if (input[35] > 1e-35) {\n var56 = -0.07409193965805899;\n } else {\n if (input[16] > 1e-35) {\n var56 = 0.010595288788401727;\n } else {\n var56 = 0.0004445963442680354;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[19] > 1e-35) {\n var56 = 0.043800560164078434;\n } else {\n if (input[62] > 1e-35) {\n var56 = 0.08440762960688118;\n } else {\n if (input[123] > 1e-35) {\n var56 = 0.04196062757398021;\n } else {\n if (input[44] > 1e-35) {\n if (input[7] > 0.9880960409521241) {\n var56 = -0.14025705728324367;\n } else {\n var56 = 0.07605327900446729;\n }\n } else {\n var56 = -0.030453882536033008;\n }\n }\n }\n }\n }\n let var57: number;\n if (input[14] > 1e-35) {\n if (input[134] > 1e-35) {\n var57 = 0.03807815059641535;\n } else {\n var57 = 0.007895137847547357;\n }\n } else {\n if (input[39] > 1e-35) {\n var57 = -0.019172673927560828;\n } else {\n if (input[138] > 1e-35) {\n var57 = 0.009207480510332959;\n } else {\n if (input[152] > 1e-35) {\n if (input[10] > 1e-35) {\n var57 = 0.029310247627617716;\n } else {\n var57 = 0.006422126177312616;\n }\n } else {\n if (input[3] > 3.5114340430413216) {\n if (input[155] > 1e-35) {\n var57 = 0.02869511059037871;\n } else {\n if (input[137] > 1e-35) {\n var57 = 0.048763707543632046;\n } else {\n if (input[218] > 1e-35) {\n var57 = 0.0393143924208134;\n } else {\n var57 = -0.0065205942363783;\n }\n }\n }\n } else {\n if (input[4] > 2.4414009612931857) {\n if (input[113] > 1e-35) {\n var57 = 0.016047178137914484;\n } else {\n if (input[35] > 1e-35) {\n var57 = -0.09486179869071369;\n } else {\n if (input[118] > 1e-35) {\n var57 = -0.032706818831570415;\n } else {\n if (input[0] > 1e-35) {\n var57 = 0.004733859562945298;\n } else {\n var57 = -0.00004345884264792552;\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[204] > 1e-35) {\n if (input[4] > 2.3502401828962087) {\n var57 = -0.23804773582311067;\n } else {\n var57 = 0.0015066742334155967;\n }\n } else {\n if (input[194] > 1e-35) {\n if (input[4] > 1.7005986908310777) {\n var57 = -0.013296404682101122;\n } else {\n var57 = -0.14340192620927933;\n }\n } else {\n if (input[196] > 1e-35) {\n var57 = -0.17446678790111786;\n } else {\n var57 = -0.01140535620661492;\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n var57 = -0.03362328403627273;\n } else {\n if (input[99] > 1e-35) {\n var57 = 0.02082592497315901;\n } else {\n if (input[196] > 1e-35) {\n var57 = 0.02125156827172031;\n } else {\n if (input[204] > 1e-35) {\n var57 = 0.018738441981476887;\n } else {\n if (input[194] > 1e-35) {\n var57 = 0.022230335367621302;\n } else {\n if (input[114] > 1e-35) {\n var57 = 0.017460982004618885;\n } else {\n if (input[210] > 1e-35) {\n if (input[11] > 1e-35) {\n var57 = -0.07421933796695453;\n } else {\n var57 = -0.02600449772874995;\n }\n } else {\n if (input[62] > 1e-35) {\n var57 = 0.0435295764572802;\n } else {\n var57 = -0.0036358741919687645;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var58: number;\n if (input[2] > 4.749261159734808) {\n if (input[5] > 6.826002629905951) {\n if (input[29] > 1e-35) {\n var58 = -0.012866931871530748;\n } else {\n if (input[47] > 1e-35) {\n var58 = -0.06511122680099479;\n } else {\n var58 = -0.0033152297369715466;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n var58 = 0.00634942519508748;\n } else {\n var58 = -0.008516826211528918;\n }\n }\n } else {\n if (input[6] > 6.1537953943602615) {\n if (input[11] > 1e-35) {\n if (input[121] > 1e-35) {\n if (input[1] > 1e-35) {\n var58 = -0.06214080664476329;\n } else {\n var58 = 0.037029947625630194;\n }\n } else {\n if (input[47] > 1e-35) {\n var58 = -0.08203414630098728;\n } else {\n var58 = -0.0044122376347199765;\n }\n }\n } else {\n if (input[15] > 1e-35) {\n if (input[30] > 1e-35) {\n var58 = 0.012452689013210465;\n } else {\n var58 = -0.011970977023212193;\n }\n } else {\n if (input[10] > 1e-35) {\n if (input[152] > 1e-35) {\n var58 = 0.02888624440861723;\n } else {\n var58 = -0.0026872248277927456;\n }\n } else {\n if (input[27] > 1e-35) {\n var58 = -0.01471521834054285;\n } else {\n if (input[21] > 1e-35) {\n var58 = -0.014970363019863132;\n } else {\n if (input[13] > 1e-35) {\n var58 = -0.0057151868439017945;\n } else {\n if (input[38] > 1e-35) {\n var58 = 0.01633003881478886;\n } else {\n var58 = 0.005850603591179588;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[113] > 1e-35) {\n if (input[5] > 3.979637980058199) {\n var58 = 0.006600693642185256;\n } else {\n if (input[6] > 3.1984648276080736) {\n var58 = 0.07576534772024612;\n } else {\n var58 = -0.013028252220942527;\n }\n }\n } else {\n if (input[204] > 1e-35) {\n if (input[9] > 1e-35) {\n if (input[6] > 3.9219243190762363) {\n var58 = 0.01266221511189265;\n } else {\n if (input[29] > 1e-35) {\n var58 = -0.20167612409830682;\n } else {\n var58 = 0.09361829582187109;\n }\n }\n } else {\n var58 = 0.0016303497789744046;\n }\n } else {\n if (input[6] > 4.310776603370241) {\n var58 = -0.0015960016142716584;\n } else {\n if (input[141] > 1e-35) {\n if (input[2] > 2.249904835165133) {\n if (input[6] > 2.970085626360216) {\n var58 = -0.05054316446311788;\n } else {\n var58 = 0.06528096075929847;\n }\n } else {\n if (input[29] > 1e-35) {\n var58 = 0.07763431964140277;\n } else {\n var58 = -0.017239135292908336;\n }\n }\n } else {\n var58 = -0.011068823413100247;\n }\n }\n }\n }\n }\n }\n let var59: number;\n if (input[91] > 1e-35) {\n var59 = -0.03524202222673902;\n } else {\n if (input[55] > 1e-35) {\n var59 = -0.07505808762820981;\n } else {\n if (input[47] > 1e-35) {\n var59 = -0.026314216162986376;\n } else {\n if (input[49] > 1e-35) {\n var59 = -0.045488810456426665;\n } else {\n if (input[54] > 1e-35) {\n var59 = -0.06424779605129435;\n } else {\n if (input[0] > 1e-35) {\n if (input[39] > 1e-35) {\n var59 = -0.03267263134559766;\n } else {\n if (input[46] > 1e-35) {\n var59 = -0.049285436356671077;\n } else {\n if (input[51] > 1e-35) {\n var59 = -0.09277060040547602;\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[123] > 1e-35) {\n var59 = -0.027164727231258436;\n } else {\n if (input[7] > 0.4232249052377311) {\n if (input[14] > 1e-35) {\n var59 = 0.021561483416797714;\n } else {\n if (input[9] > 1e-35) {\n if (input[58] > 1e-35) {\n var59 = -0.08387877475105178;\n } else {\n var59 = 0.014404401501386124;\n }\n } else {\n var59 = 0.004694473365260974;\n }\n }\n } else {\n var59 = -0.0001897538693116325;\n }\n }\n } else {\n var59 = -0.017140588284242805;\n }\n }\n }\n }\n } else {\n if (input[5] > 9.119594757170685) {\n if (input[3] > 2.740319461670996) {\n var59 = -0.0007153953072197825;\n } else {\n var59 = -0.010378474356201449;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[5] > 3.276966702012906) {\n if (input[125] > 1e-35) {\n var59 = -0.06966241558514917;\n } else {\n if (input[4] > 4.82429765145367) {\n var59 = -0.05703428861212874;\n } else {\n var59 = -0.007549683006633188;\n }\n }\n } else {\n if (input[3] > 1.2424533248940002) {\n var59 = -0.05340556429257431;\n } else {\n var59 = 0.0524214727387076;\n }\n }\n } else {\n if (input[22] > 1e-35) {\n var59 = -0.012756524179901607;\n } else {\n if (input[186] > 1e-35) {\n var59 = -0.06578146880564559;\n } else {\n if (input[208] > 1e-35) {\n var59 = 0.011189277267677045;\n } else {\n if (input[11] > 1e-35) {\n if (input[58] > 1e-35) {\n var59 = -0.05051984734793551;\n } else {\n if (input[3] > 1.2424533248940002) {\n var59 = -0.0002576217567062796;\n } else {\n if (input[134] > 1e-35) {\n var59 = -0.07452351335236179;\n } else {\n var59 = -0.010366062496356129;\n }\n }\n }\n } else {\n if (input[94] > 1e-35) {\n var59 = -0.04206673603732986;\n } else {\n var59 = 0.0017654268359667174;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var60: number;\n if (input[2] > 2.3502401828962087) {\n if (input[28] > 1e-35) {\n var60 = 0.018743416209068924;\n } else {\n if (input[142] > 1e-35) {\n var60 = -0.027628078748284907;\n } else {\n if (input[4] > 1.7005986908310777) {\n if (input[123] > 1e-35) {\n var60 = -0.039485087567133176;\n } else {\n if (input[48] > 1e-35) {\n var60 = -0.04707407726639779;\n } else {\n if (input[49] > 1e-35) {\n var60 = -0.0644727439161007;\n } else {\n if (input[47] > 1e-35) {\n var60 = -0.03586301268310228;\n } else {\n if (input[52] > 1e-35) {\n var60 = -0.08213761833929575;\n } else {\n if (input[60] > 1e-35) {\n var60 = -0.036939376764301805;\n } else {\n if (input[22] > 1e-35) {\n var60 = -0.02264827779335228;\n } else {\n if (input[153] > 1e-35) {\n if (input[24] > 1e-35) {\n var60 = 0.03651632275248908;\n } else {\n var60 = -0.010403215174169965;\n }\n } else {\n if (input[18] > 1e-35) {\n if (input[31] > 1e-35) {\n var60 = 0.17011943799802248;\n } else {\n var60 = -0.024083374989820074;\n }\n } else {\n if (input[147] > 1e-35) {\n var60 = -0.05792387046048145;\n } else {\n if (input[39] > 1e-35) {\n var60 = -0.019000152117179;\n } else {\n if (input[54] > 1e-35) {\n var60 = -0.09256681585621543;\n } else {\n if (input[50] > 1e-35) {\n var60 = -0.06535283940797192;\n } else {\n if (input[187] > 1e-35) {\n var60 = -0.023020538580498528;\n } else {\n if (input[149] > 1e-35) {\n var60 = -0.09670391878996044;\n } else {\n if (input[8] > 1e-35) {\n if (input[6] > 5.865049616265698) {\n var60 = 0.0007122257672540384;\n } else {\n var60 = -0.024203929126070334;\n }\n } else {\n if (input[55] > 1e-35) {\n var60 = -0.10687519344783902;\n } else {\n if (input[21] > 1e-35) {\n var60 =\n -0.019836359134795922;\n } else {\n var60 = 0.0028141634686288143;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[153] > 1e-35) {\n var60 = -0.044827592367532504;\n } else {\n var60 = -0.009894012855110334;\n }\n }\n }\n }\n } else {\n if (input[140] > 1e-35) {\n if (input[18] > 1e-35) {\n var60 = 0.060584003745668275;\n } else {\n var60 = -0.015006980258423744;\n }\n } else {\n if (input[6] > 5.161920636569023) {\n if (input[125] > 1e-35) {\n var60 = -0.021624709427283298;\n } else {\n var60 = 0.0035264081894521636;\n }\n } else {\n var60 = -0.0030260520850755417;\n }\n }\n }\n let var61: number;\n if (input[57] > 1e-35) {\n var61 = -0.06665941268716478;\n } else {\n if (input[2] > 5.4049245766661995) {\n var61 = -0.0048763725607228565;\n } else {\n if (input[17] > 1e-35) {\n var61 = 0.012937023835595996;\n } else {\n if (input[91] > 1e-35) {\n var61 = -0.032642493399923284;\n } else {\n if (input[40] > 1e-35) {\n var61 = -0.04355571234278559;\n } else {\n if (input[14] > 1e-35) {\n if (input[217] > 1e-35) {\n var61 = -0.030555708374197955;\n } else {\n var61 = 0.010895997063478696;\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[99] > 1e-35) {\n var61 = 0.016029829045206837;\n } else {\n if (input[114] > 1e-35) {\n var61 = 0.017475123428921584;\n } else {\n if (input[139] > 1e-35) {\n var61 = -0.042037981483985604;\n } else {\n if (input[210] > 1e-35) {\n if (input[29] > 1e-35) {\n var61 = 0.015395913258454092;\n } else {\n var61 = -0.024779051599098958;\n }\n } else {\n if (input[90] > 1e-35) {\n var61 = -0.09436512907953146;\n } else {\n if (input[25] > 1e-35) {\n var61 = -0.0385103760507401;\n } else {\n if (input[113] > 1e-35) {\n var61 = 0.014955995782471;\n } else {\n if (input[208] > 1e-35) {\n var61 = 0.01363101947809469;\n } else {\n var61 = 0.0004708078358576994;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[29] > 1e-35) {\n var61 = -0.02567148566035587;\n } else {\n if (input[217] > 1e-35) {\n var61 = 0.017896286118860596;\n } else {\n if (input[118] > 1e-35) {\n var61 = -0.04366196842115269;\n } else {\n if (input[144] > 1e-35) {\n var61 = -0.04332564222613586;\n } else {\n if (input[54] > 1e-35) {\n var61 = -0.08095356842154083;\n } else {\n if (input[31] > 1e-35) {\n if (input[15] > 1e-35) {\n var61 = -0.12797365603832508;\n } else {\n var61 = 0.05407709367007049;\n }\n } else {\n if (input[56] > 1e-35) {\n var61 = 0.030874690971051524;\n } else {\n if (input[148] > 1e-35) {\n var61 = -0.06664437092250396;\n } else {\n if (input[50] > 1e-35) {\n var61 = -0.05710031053092695;\n } else {\n if (input[114] > 1e-35) {\n if (input[18] > 1e-35) {\n var61 = -0.12348764088627251;\n } else {\n var61 = -0.014081947133593207;\n }\n } else {\n if (input[147] > 1e-35) {\n var61 = -0.044629298717173554;\n } else {\n var61 = -0.000742893245658901;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var62: number;\n if (input[138] > 1e-35) {\n var62 = 0.008266725465725232;\n } else {\n if (input[1] > 1e-35) {\n if (input[37] > 1e-35) {\n var62 = -0.06288072801700428;\n } else {\n if (input[114] > 1e-35) {\n var62 = 0.01701875404216428;\n } else {\n if (input[128] > 1e-35) {\n var62 = -0.022207708344996902;\n } else {\n if (input[113] > 1e-35) {\n if (input[24] > 1e-35) {\n var62 = 0.08078133512323216;\n } else {\n var62 = 0.010126216487392538;\n }\n } else {\n if (input[11] > 1e-35) {\n if (input[58] > 1e-35) {\n var62 = -0.0542116306120395;\n } else {\n var62 = -0.004962440421854299;\n }\n } else {\n if (input[155] > 1e-35) {\n if (input[30] > 1e-35) {\n var62 = 0.02107443326718807;\n } else {\n var62 = -0.01069225359959257;\n }\n } else {\n var62 = 0.0009105709984003484;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[218] > 1e-35) {\n var62 = 0.05160355321154702;\n } else {\n if (input[134] > 1e-35) {\n var62 = 0.006114948378400552;\n } else {\n if (input[121] > 1e-35) {\n var62 = 0.016106484014031797;\n } else {\n if (input[89] > 1e-35) {\n var62 = 0.01912348851711998;\n } else {\n if (input[56] > 1e-35) {\n var62 = 0.029777849606436514;\n } else {\n if (input[157] > 1e-35) {\n var62 = 0.04060172642469715;\n } else {\n if (input[31] > 1e-35) {\n var62 = 0.040190765597096945;\n } else {\n if (input[115] > 1e-35) {\n var62 = 0.038285461163007885;\n } else {\n if (input[144] > 1e-35) {\n var62 = -0.04397941351839926;\n } else {\n if (input[53] > 1e-35) {\n var62 = -0.09153555712989248;\n } else {\n if (input[34] > 1e-35) {\n var62 = 0.05063635650139542;\n } else {\n if (input[145] > 1e-35) {\n var62 = -0.05531793235403996;\n } else {\n if (input[18] > 1e-35) {\n if (input[142] > 1e-35) {\n var62 = 0.050915836711889595;\n } else {\n var62 = -0.038668153033606156;\n }\n } else {\n if (input[142] > 1e-35) {\n var62 = -0.03161888799270195;\n } else {\n if (input[21] > 1e-35) {\n var62 = -0.039152400008548416;\n } else {\n if (input[147] > 1e-35) {\n var62 = -0.06369054146375448;\n } else {\n if (input[146] > 1e-35) {\n var62 = -0.06687062048733548;\n } else {\n if (input[143] > 1e-35) {\n var62 = -0.0374398909044375;\n } else {\n var62 = -0.004075281311375503;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var63: number;\n if (input[19] > 1e-35) {\n var63 = 0.011138060439416179;\n } else {\n if (input[7] > 0.054053454943712505) {\n if (input[17] > 1e-35) {\n if (input[30] > 1e-35) {\n var63 = 0.031458353209402545;\n } else {\n var63 = 0.006712963530887799;\n }\n } else {\n if (input[135] > 1e-35) {\n var63 = -0.008268741342836259;\n } else {\n if (input[60] > 1e-35) {\n var63 = -0.026373116795568554;\n } else {\n if (input[7] > 0.8375851232899904) {\n if (input[3] > 2.602003343538398) {\n if (input[6] > 4.832297822126891) {\n var63 = 0.001164103411669833;\n } else {\n if (input[8] > 1e-35) {\n var63 = -0.04419920795209664;\n } else {\n var63 = -0.007580602414427876;\n }\n }\n } else {\n if (input[6] > 3.417592293073651) {\n if (input[6] > 8.80963889693121) {\n var63 = -0.00653283113371423;\n } else {\n if (input[8] > 1e-35) {\n if (input[125] > 1e-35) {\n var63 = -0.10156793652811894;\n } else {\n var63 = -0.004200534838133274;\n }\n } else {\n if (input[18] > 1e-35) {\n var63 = -0.01192673279840267;\n } else {\n var63 = 0.007421951916920296;\n }\n }\n }\n } else {\n if (input[7] > 0.9626084674797213) {\n if (input[29] > 1e-35) {\n if (input[6] > 2.970085626360216) {\n var63 = -0.0032059430383565256;\n } else {\n var63 = 0.05159315082197918;\n }\n } else {\n if (input[8] > 1e-35) {\n var63 = -0.0890031715943104;\n } else {\n if (input[22] > 1e-35) {\n var63 = -0.16814104441488775;\n } else {\n if (input[12] > 1e-35) {\n if (input[100] > 1e-35) {\n var63 = 0.1021284677424052;\n } else {\n var63 = -0.13655977142603173;\n }\n } else {\n var63 = 0.09393254504800182;\n }\n }\n }\n }\n } else {\n var63 = -0.0008030674521708154;\n }\n }\n }\n } else {\n if (input[153] > 1e-35) {\n if (input[18] > 1e-35) {\n var63 = 0.028570793527563892;\n } else {\n var63 = -0.01146507406243734;\n }\n } else {\n if (input[125] > 1e-35) {\n if (input[3] > 1e-35) {\n var63 = -0.04344386283066575;\n } else {\n var63 = 0.049543778722220704;\n }\n } else {\n if (input[47] > 1e-35) {\n var63 = -0.025602694767462936;\n } else {\n var63 = 0.000041633336342102227;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[3] > 2.3502401828962087) {\n if (input[3] > 3.3497501700808394) {\n var63 = -0.018924000087166926;\n } else {\n var63 = 0.005374758944061522;\n }\n } else {\n if (input[14] > 1e-35) {\n var63 = 0.02825013192303339;\n } else {\n var63 = -0.028367959366723622;\n }\n }\n }\n }\n let var64: number;\n if (input[190] > 1e-35) {\n var64 = -0.033259392758942484;\n } else {\n if (input[4] > 2.4414009612931857) {\n if (input[123] > 1e-35) {\n var64 = -0.030965448877928344;\n } else {\n if (input[150] > 1e-35) {\n var64 = -0.05353588365501967;\n } else {\n if (input[53] > 1e-35) {\n var64 = -0.07322459471644706;\n } else {\n if (input[0] > 1e-35) {\n if (input[6] > 6.9012339353508745) {\n var64 = 0.007566110700214329;\n } else {\n if (input[4] > 3.0677824455408698) {\n if (input[7] > 0.5242163672259389) {\n if (input[8] > 1e-35) {\n if (input[6] > 4.722943345003718) {\n var64 = -0.00508197369229565;\n } else {\n if (input[4] > 3.5694334999727624) {\n var64 = -0.09566908841488272;\n } else {\n var64 = -0.009799018561370653;\n }\n }\n } else {\n if (input[29] > 1e-35) {\n var64 = 0.01134634874419129;\n } else {\n var64 = -0.008480456528154491;\n }\n }\n } else {\n var64 = -0.010775036248093376;\n }\n } else {\n var64 = 0.006611525544742429;\n }\n }\n } else {\n if (input[23] > 1e-35) {\n var64 = 0.01761735039511882;\n } else {\n if (input[19] > 1e-35) {\n var64 = 0.01278442042249664;\n } else {\n var64 = -0.0002242132003162585;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[186] > 1e-35) {\n var64 = -0.1282956565830828;\n } else {\n if (input[99] > 1e-35) {\n var64 = 0.018493666625505303;\n } else {\n if (input[141] > 1e-35) {\n var64 = -0.026024552608676074;\n } else {\n if (input[29] > 1e-35) {\n if (input[5] > 3.5694334999727624) {\n if (input[217] > 1e-35) {\n var64 = 0.010089877008871859;\n } else {\n if (input[7] > 0.9569480028661056) {\n var64 = -0.0021891593882122327;\n } else {\n var64 = -0.019455050281455402;\n }\n }\n } else {\n if (input[7] > 0.960816451500545) {\n var64 = -0.13777176433158442;\n } else {\n var64 = 0.02722608122697913;\n }\n }\n } else {\n if (input[28] > 1e-35) {\n if (input[194] > 1e-35) {\n var64 = 0.09549833737461155;\n } else {\n var64 = 0.012447932823540411;\n }\n } else {\n if (input[129] > 1e-35) {\n if (input[26] > 1e-35) {\n var64 = 0.147381625399948;\n } else {\n var64 = -0.03418523266130075;\n }\n } else {\n if (input[7] > 0.26911173821332884) {\n var64 = 0.0014660191124088442;\n } else {\n if (input[217] > 1e-35) {\n var64 = -0.08282397562490618;\n } else {\n if (input[210] > 1e-35) {\n var64 = -0.0386848317545183;\n } else {\n var64 = -0.001892646396528824;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var65: number;\n if (input[57] > 1e-35) {\n var65 = -0.059790543460520464;\n } else {\n if (input[55] > 1e-35) {\n var65 = -0.06524069243313577;\n } else {\n if (input[3] > 4.283562780082224) {\n if (input[37] > 1e-35) {\n var65 = -0.054605342954169904;\n } else {\n var65 = -0.006343751747681404;\n }\n } else {\n if (input[17] > 1e-35) {\n var65 = 0.011961708215735271;\n } else {\n if (input[40] > 1e-35) {\n var65 = -0.04296088601962452;\n } else {\n if (input[6] > 1e-35) {\n if (input[24] > 1e-35) {\n if (input[113] > 1e-35) {\n if (input[6] > 4.460127707454046) {\n var65 = -0.026498922218692673;\n } else {\n var65 = 0.10501477027016158;\n }\n } else {\n if (input[6] > 4.03420147928485) {\n var65 = 0.012792216148037112;\n } else {\n if (input[7] > 0.9830997303909479) {\n var65 = -0.2271005546552327;\n } else {\n var65 = -0.008348690537914538;\n }\n }\n }\n } else {\n if (input[9] > 1e-35) {\n if (input[153] > 1e-35) {\n if (input[7] > 0.20588252599634785) {\n var65 = -0.004842123367456505;\n } else {\n var65 = -0.03575275485660392;\n }\n } else {\n if (input[99] > 1e-35) {\n if (input[1] > 1e-35) {\n var65 = 0.032397176999597294;\n } else {\n var65 = -0.0033271937210452387;\n }\n } else {\n if (input[204] > 1e-35) {\n var65 = 0.02154799118278769;\n } else {\n var65 = 0.0034498877728340095;\n }\n }\n }\n } else {\n if (input[28] > 1e-35) {\n if (input[6] > 3.0677824455408698) {\n if (input[6] > 5.5816130673839615) {\n var65 = 0.01602715871650751;\n } else {\n if (input[7] > 0.9901971344332651) {\n if (input[194] > 1e-35) {\n var65 = -0.21161676626091178;\n } else {\n if (input[127] > 1e-35) {\n var65 = -0.4024450297968636;\n } else {\n var65 = -0.030976570087232314;\n }\n }\n } else {\n var65 = 0.0031980605341801454;\n }\n }\n } else {\n var65 = 0.07943810970798848;\n }\n } else {\n if (input[135] > 1e-35) {\n var65 = -0.00869354055420051;\n } else {\n if (input[123] > 1e-35) {\n var65 = -0.022241787113206086;\n } else {\n if (input[62] > 1e-35) {\n var65 = 0.037165483434744594;\n } else {\n if (input[7] > 0.04507521918085865) {\n if (input[21] > 1e-35) {\n var65 = -0.013433718654288605;\n } else {\n if (input[155] > 1e-35) {\n var65 = 0.00919342834132915;\n } else {\n var65 = -0.0002729025327531227;\n }\n }\n } else {\n var65 = -0.012537468897218136;\n }\n }\n }\n }\n }\n }\n }\n } else {\n var65 = -0.07894994665155514;\n }\n }\n }\n }\n }\n }\n let var66: number;\n if (input[4] > 0.8958797346140276) {\n if (input[14] > 1e-35) {\n var66 = 0.007800140351631253;\n } else {\n if (input[138] > 1e-35) {\n var66 = 0.007294945388686309;\n } else {\n if (input[1] > 1e-35) {\n if (input[32] > 1e-35) {\n if (input[28] > 1e-35) {\n var66 = 0.09462192942805535;\n } else {\n var66 = -0.06376046128949985;\n }\n } else {\n if (input[37] > 1e-35) {\n var66 = -0.06442220885770956;\n } else {\n if (input[140] > 1e-35) {\n if (input[30] > 1e-35) {\n var66 = -0.09261012186873348;\n } else {\n var66 = -0.015294712278584928;\n }\n } else {\n if (input[98] > 1e-35) {\n var66 = 0.019329173498247088;\n } else {\n if (input[58] > 1e-35) {\n var66 = -0.026405515460271967;\n } else {\n if (input[5] > 8.608586615680721) {\n if (input[4] > 2.602003343538398) {\n var66 = 0.00006125118307170923;\n } else {\n var66 = -0.009497787119169794;\n }\n } else {\n if (input[40] > 1e-35) {\n var66 = -0.05491317248554455;\n } else {\n if (input[7] > 0.30853255358841714) {\n var66 = 0.003951848833690266;\n } else {\n var66 = -0.0021827028977256715;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[219] > 1e-35) {\n var66 = -0.03918852409108207;\n } else {\n if (input[98] > 1e-35) {\n var66 = -0.025490621458423603;\n } else {\n if (input[218] > 1e-35) {\n var66 = 0.04685239586600909;\n } else {\n if (input[4] > 2.970085626360216) {\n if (input[152] > 1e-35) {\n var66 = 0.019288400231624092;\n } else {\n if (input[132] > 1e-35) {\n var66 = 0.04845025214421127;\n } else {\n if (input[157] > 1e-35) {\n var66 = 0.03681235344369351;\n } else {\n if (input[18] > 1e-35) {\n var66 = -0.034132162265456074;\n } else {\n if (input[48] > 1e-35) {\n var66 = -0.04861483835690636;\n } else {\n if (input[142] > 1e-35) {\n var66 = -0.031057400959951156;\n } else {\n if (input[148] > 1e-35) {\n var66 = -0.06903688486009983;\n } else {\n var66 = -0.004426858558248682;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[31] > 1e-35) {\n var66 = 0.06983425899920179;\n } else {\n var66 = 0.002335587968443938;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[19] > 1e-35) {\n var66 = 0.04178364096434334;\n } else {\n if (input[123] > 1e-35) {\n var66 = 0.03954255208630935;\n } else {\n if (input[62] > 1e-35) {\n var66 = 0.07169067239737285;\n } else {\n var66 = -0.022094630155173406;\n }\n }\n }\n }\n let var67: number;\n if (input[190] > 1e-35) {\n var67 = -0.029705030481716018;\n } else {\n if (input[2] > 2.4414009612931857) {\n if (input[125] > 1e-35) {\n if (input[3] > 1e-35) {\n var67 = -0.052080713549693486;\n } else {\n var67 = 0.015237248725743169;\n }\n } else {\n if (input[49] > 1e-35) {\n var67 = -0.05738028956460733;\n } else {\n if (input[28] > 1e-35) {\n var67 = 0.015629889576502864;\n } else {\n if (input[14] > 1e-35) {\n var67 = 0.007178838639724632;\n } else {\n if (input[217] > 1e-35) {\n var67 = 0.006873744757442591;\n } else {\n if (input[3] > 0.8958797346140276) {\n var67 = -0.0009297977761919447;\n } else {\n if (input[4] > 2.740319461670996) {\n var67 = -0.0032588616048005344;\n } else {\n if (input[209] > 1e-35) {\n var67 = -0.09352716353634213;\n } else {\n var67 = -0.015820890219545396;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[0] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[30] > 1e-35) {\n var67 = 0.019248760742983276;\n } else {\n if (input[3] > 2.861792550976191) {\n if (input[6] > 8.372051799062541) {\n var67 = 0.011687619771455333;\n } else {\n var67 = -0.014380012538782239;\n }\n } else {\n var67 = 0.007119108038702808;\n }\n }\n } else {\n if (input[5] > 4.424828703319957) {\n if (input[3] > 2.249904835165133) {\n var67 = -0.004571416888569663;\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[2] > 1e-35) {\n var67 = 0.03291298609827498;\n } else {\n var67 = 0.056149641245301286;\n }\n } else {\n if (input[6] > 5.66469358412419) {\n var67 = 0.03259771207074825;\n } else {\n var67 = -0.09357704176112766;\n }\n }\n }\n } else {\n if (input[135] > 1e-35) {\n if (input[4] > 3.1132683346437333) {\n if (input[4] > 3.276966702012906) {\n var67 = -0.061655392996083594;\n } else {\n var67 = -0.32745698278768204;\n }\n } else {\n var67 = 0.05791789791717941;\n }\n } else {\n var67 = -0.018505458368810124;\n }\n }\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n var67 = 0.0026761409362875913;\n } else {\n if (input[3] > 1e-35) {\n if (input[30] > 1e-35) {\n if (input[210] > 1e-35) {\n var67 = -0.039544237504098204;\n } else {\n var67 = -0.00840469876565937;\n }\n } else {\n if (input[138] > 1e-35) {\n var67 = -0.03964217397514852;\n } else {\n var67 = -0.0000004311139741723525;\n }\n }\n } else {\n if (input[5] > 6.136645972583987) {\n var67 = -0.022772355719852342;\n } else {\n var67 = 0.00817231129409795;\n }\n }\n }\n }\n }\n }\n let var68: number;\n if (input[91] > 1e-35) {\n var68 = -0.028069212077752072;\n } else {\n if (input[2] > 5.1209788959100075) {\n if (input[25] > 1e-35) {\n if (input[4] > 3.314020688089767) {\n var68 = -0.07374751231467579;\n } else {\n var68 = -0.012603466600012023;\n }\n } else {\n var68 = -0.003323309316995181;\n }\n } else {\n if (input[0] > 1e-35) {\n if (input[2] > 1.2424533248940002) {\n if (input[11] > 1e-35) {\n var68 = -0.008138434386494645;\n } else {\n if (input[2] > 1.8688348091416842) {\n if (input[18] > 1e-35) {\n var68 = -0.021752576521312197;\n } else {\n if (input[142] > 1e-35) {\n var68 = -0.03703704004008216;\n } else {\n if (input[21] > 1e-35) {\n var68 = -0.031901873695323615;\n } else {\n var68 = 0.0007949433315561949;\n }\n }\n }\n } else {\n if (input[156] > 1e-35) {\n var68 = 0.04622194605125366;\n } else {\n var68 = 0.007164185384903575;\n }\n }\n }\n } else {\n if (input[156] > 1e-35) {\n var68 = 0.05649230717257425;\n } else {\n if (input[192] > 1e-35) {\n var68 = -0.14560972428612223;\n } else {\n if (input[144] > 1e-35) {\n var68 = -0.0847860756426489;\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[2] > 0.8958797346140276) {\n var68 = 0.009443385055723438;\n } else {\n if (input[9] > 1e-35) {\n var68 = 0.0384706300742172;\n } else {\n if (input[7] > 0.9738681190948303) {\n if (input[7] > 0.9983480540068196) {\n var68 = 0.03566002120217884;\n } else {\n if (input[125] > 1e-35) {\n var68 = -0.08601531943220733;\n } else {\n if (input[28] > 1e-35) {\n var68 = -0.07136595081940608;\n } else {\n var68 = 0.005430826378707227;\n }\n }\n }\n } else {\n var68 = 0.026279964393698674;\n }\n }\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n var68 = 0.025916235406054845;\n } else {\n var68 = -0.05093685243097706;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n if (input[4] > 2.4414009612931857) {\n if (input[22] > 1e-35) {\n var68 = -0.018458649485324576;\n } else {\n if (input[123] > 1e-35) {\n var68 = -0.027048533130577097;\n } else {\n if (input[9] > 1e-35) {\n var68 = 0.005768627348361876;\n } else {\n var68 = 0.0011976274380886302;\n }\n }\n }\n } else {\n if (input[196] > 1e-35) {\n var68 = 0.024074476840894424;\n } else {\n var68 = -0.0040891042038809855;\n }\n }\n } else {\n if (input[156] > 1e-35) {\n var68 = -0.03722816735059365;\n } else {\n var68 = -0.004021663177778795;\n }\n }\n }\n }\n }\n let var69: number;\n if (input[57] > 1e-35) {\n var69 = -0.054174378986311306;\n } else {\n if (input[55] > 1e-35) {\n var69 = -0.05937408126377534;\n } else {\n if (input[35] > 1e-35) {\n var69 = -0.06355743050048665;\n } else {\n if (input[52] > 1e-35) {\n var69 = -0.049028563645544726;\n } else {\n if (input[10] > 1e-35) {\n if (input[152] > 1e-35) {\n var69 = 0.023779508772836917;\n } else {\n if (input[217] > 1e-35) {\n var69 = 0.00760039749111183;\n } else {\n var69 = -0.005758267779536595;\n }\n }\n } else {\n if (input[6] > 1e-35) {\n if (input[50] > 1e-35) {\n var69 = -0.03899686693288482;\n } else {\n if (input[53] > 1e-35) {\n var69 = -0.06158372699069763;\n } else {\n if (input[19] > 1e-35) {\n var69 = 0.009506113370718208;\n } else {\n if (input[154] > 1e-35) {\n var69 = -0.021220440237800273;\n } else {\n if (input[129] > 1e-35) {\n if (input[26] > 1e-35) {\n var69 = 0.12643307498280917;\n } else {\n var69 = -0.02322694568396696;\n }\n } else {\n if (input[49] > 1e-35) {\n var69 = -0.03489161935560748;\n } else {\n if (input[173] > 1e-35) {\n var69 = -0.041310484369004336;\n } else {\n if (input[116] > 1e-35) {\n var69 = -0.026931019221510855;\n } else {\n if (input[150] > 1e-35) {\n var69 = -0.04336081700276943;\n } else {\n if (input[46] > 1e-35) {\n var69 = -0.01503021840754708;\n } else {\n if (input[21] > 1e-35) {\n var69 = -0.011723313966476847;\n } else {\n if (input[187] > 1e-35) {\n if (input[30] > 1e-35) {\n var69 = 0.029035482597327224;\n } else {\n var69 = -0.020238143126606493;\n }\n } else {\n if (input[22] > 1e-35) {\n var69 = -0.0092659038594408;\n } else {\n if (input[6] > 8.954867306462836) {\n var69 = -0.002270298325316596;\n } else {\n if (input[25] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[152] > 1e-35) {\n var69 = 0.025059955137215612;\n } else {\n var69 =\n -0.058962720741665454;\n }\n } else {\n var69 = 0.00004061285457160542;\n }\n } else {\n if (\n input[7] > 0.787025207541384\n ) {\n var69 = 0.0045073893285534905;\n } else {\n if (input[156] > 1e-35) {\n var69 =\n -0.00956127321029558;\n } else {\n if (\n input[153] > 1e-35\n ) {\n var69 =\n -0.006428735642845697;\n } else {\n var69 = 0.0020065887307204903;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var69 = -0.07142994726664682;\n }\n }\n }\n }\n }\n }\n let var70: number;\n if (input[190] > 1e-35) {\n var70 = -0.026482483927372538;\n } else {\n if (input[11] > 1e-35) {\n if (input[153] > 1e-35) {\n var70 = -0.019448665116575673;\n } else {\n if (input[46] > 1e-35) {\n var70 = -0.046207503035123526;\n } else {\n if (input[143] > 1e-35) {\n var70 = -0.060693025841649276;\n } else {\n if (input[125] > 1e-35) {\n var70 = -0.0635615784828548;\n } else {\n var70 = -0.0020226769939179086;\n }\n }\n }\n }\n } else {\n if (input[10] > 1e-35) {\n if (input[152] > 1e-35) {\n var70 = 0.021657999498329004;\n } else {\n if (input[217] > 1e-35) {\n var70 = 0.006867901248533881;\n } else {\n if (input[186] > 1e-35) {\n var70 = -0.17526174685635476;\n } else {\n if (input[7] > 0.3736576099860928) {\n if (input[125] > 1e-35) {\n var70 = -0.06860813037660739;\n } else {\n var70 = -0.0030373931794416857;\n }\n } else {\n if (input[153] > 1e-35) {\n var70 = -0.036659407900460406;\n } else {\n var70 = -0.009138716679401575;\n }\n }\n }\n }\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[141] > 1e-35) {\n var70 = 0.022488528656368925;\n } else {\n var70 = -0.004824813956579289;\n }\n } else {\n if (input[155] > 1e-35) {\n if (input[29] > 1e-35) {\n var70 = -0.0923825728762917;\n } else {\n var70 = 0.013279779321478072;\n }\n } else {\n if (input[13] > 1e-35) {\n if (input[29] > 1e-35) {\n var70 = -0.02015430689927317;\n } else {\n var70 = -0.0014075476679032272;\n }\n } else {\n if (input[21] > 1e-35) {\n var70 = -0.010052866682366596;\n } else {\n if (input[15] > 1e-35) {\n if (input[127] > 1e-35) {\n var70 = -0.11613127921904604;\n } else {\n var70 = -0.004425492436566155;\n }\n } else {\n if (input[61] > 1e-35) {\n var70 = -0.04761391619756717;\n } else {\n if (input[38] > 1e-35) {\n var70 = 0.010790742168686546;\n } else {\n if (input[138] > 1e-35) {\n if (input[25] > 1e-35) {\n var70 = -0.03936956646884221;\n } else {\n var70 = 0.012187893435100131;\n }\n } else {\n if (input[18] > 1e-35) {\n if (input[46] > 1e-35) {\n var70 = 0.052404637972043124;\n } else {\n if (input[29] > 1e-35) {\n if (input[219] > 1e-35) {\n var70 = -0.026128288926960785;\n } else {\n var70 = 0.01402455905339408;\n }\n } else {\n var70 = -0.018095204676971146;\n }\n }\n } else {\n var70 = 0.002238241111198228;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var71: number;\n if (input[3] > 4.993822430271426) {\n var71 = -0.021704560089024494;\n } else {\n if (input[39] > 1e-35) {\n var71 = -0.012978601337522922;\n } else {\n if (input[57] > 1e-35) {\n var71 = -0.04850734344953324;\n } else {\n if (input[190] > 1e-35) {\n var71 = -0.02323817835232452;\n } else {\n if (input[55] > 1e-35) {\n var71 = -0.054265924680079236;\n } else {\n if (input[144] > 1e-35) {\n var71 = -0.020797331827991154;\n } else {\n if (input[52] > 1e-35) {\n var71 = -0.04407078296749134;\n } else {\n if (input[50] > 1e-35) {\n var71 = -0.03531075513550682;\n } else {\n if (input[14] > 1e-35) {\n if (input[217] > 1e-35) {\n var71 = -0.02603818360896512;\n } else {\n var71 = 0.00845420085528292;\n }\n } else {\n if (input[90] > 1e-35) {\n if (input[3] > 3.5114340430413216) {\n var71 = 0.010289606334961197;\n } else {\n var71 = -0.10259966877314837;\n }\n } else {\n if (input[139] > 1e-35) {\n var71 = -0.01903913128660918;\n } else {\n if (input[17] > 1e-35) {\n if (input[30] > 1e-35) {\n var71 = 0.027295226228104732;\n } else {\n if (input[38] > 1e-35) {\n var71 = 0.036847447575421244;\n } else {\n if (input[3] > 2.861792550976191) {\n var71 = -0.016454620470329126;\n } else {\n var71 = 0.010475083165212631;\n }\n }\n }\n } else {\n if (input[19] > 1e-35) {\n var71 = 0.008675111927467;\n } else {\n if (input[40] > 1e-35) {\n var71 = -0.036362054443170776;\n } else {\n if (input[9] > 1e-35) {\n var71 = 0.0031294075955568394;\n } else {\n if (input[123] > 1e-35) {\n var71 = -0.02131953072683769;\n } else {\n if (input[24] > 1e-35) {\n if (input[113] > 1e-35) {\n if (input[3] > 2.602003343538398) {\n var71 = -0.005045224468848018;\n } else {\n if (input[3] > 2.3502401828962087) {\n var71 = 0.1006727710215487;\n } else {\n var71 = -0.21606952724358763;\n }\n }\n } else {\n if (input[209] > 1e-35) {\n var71 = -0.07903381656359819;\n } else {\n var71 = 0.0099843967860757;\n }\n }\n } else {\n if (input[28] > 1e-35) {\n var71 = 0.009909672751437115;\n } else {\n if (input[155] > 1e-35) {\n if (input[3] > 3.941534675652877) {\n var71 = 0.04961274235179155;\n } else {\n var71 = 0.005113567009198253;\n }\n } else {\n if (input[158] > 1e-35) {\n var71 = 0.031566828492110836;\n } else {\n var71 = -0.0012534895812835874;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var72: number;\n if (input[4] > 2.4414009612931857) {\n if (input[123] > 1e-35) {\n var72 = -0.022743199998420272;\n } else {\n if (input[47] > 1e-35) {\n var72 = -0.02199867034393067;\n } else {\n if (input[3] > 3.238486181444842) {\n if (input[155] > 1e-35) {\n var72 = 0.015256601991879549;\n } else {\n if (input[23] > 1e-35) {\n var72 = 0.01997791344831838;\n } else {\n if (input[97] > 1e-35) {\n var72 = 0.024977281654938052;\n } else {\n if (input[218] > 1e-35) {\n var72 = 0.031730655567930977;\n } else {\n if (input[32] > 1e-35) {\n if (input[1] > 1e-35) {\n var72 = -0.05855958691798028;\n } else {\n var72 = -0.009630189044251312;\n }\n } else {\n if (input[195] > 1e-35) {\n var72 = -0.009842090802252708;\n } else {\n if (input[125] > 1e-35) {\n var72 = -0.030084333742373532;\n } else {\n var72 = -0.0009935375527704107;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[135] > 1e-35) {\n var72 = -0.006040875366017567;\n } else {\n if (input[43] > 1e-35) {\n var72 = -0.03616920022546756;\n } else {\n if (input[44] > 1e-35) {\n var72 = -0.014787601622259254;\n } else {\n if (input[0] > 1e-35) {\n var72 = 0.005949240867095038;\n } else {\n var72 = 0.0018435357767462809;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n if (input[3] > 1e-35) {\n var72 = -0.030610116678182732;\n } else {\n var72 = 0.01960307197844505;\n }\n } else {\n if (input[3] > 1.2424533248940002) {\n if (input[101] > 1e-35) {\n var72 = -0.04366907994393087;\n } else {\n if (input[28] > 1e-35) {\n if (input[194] > 1e-35) {\n var72 = 0.0927536258129216;\n } else {\n var72 = 0.00806369969474508;\n }\n } else {\n if (input[198] > 1e-35) {\n var72 = 0.03402296877725087;\n } else {\n var72 = -0.00033907517363096143;\n }\n }\n }\n } else {\n if (input[194] > 1e-35) {\n if (input[19] > 1e-35) {\n var72 = -0.16957712930341856;\n } else {\n if (input[28] > 1e-35) {\n var72 = -0.2078243840685859;\n } else {\n var72 = -0.01982072284112783;\n }\n }\n } else {\n if (input[134] > 1e-35) {\n var72 = -0.059093837808976674;\n } else {\n if (input[155] > 1e-35) {\n var72 = -0.11429749518431415;\n } else {\n if (input[1] > 1e-35) {\n if (input[123] > 1e-35) {\n var72 = 0.04159085402090426;\n } else {\n var72 = -0.0053579302271092874;\n }\n } else {\n var72 = -0.038428527597709254;\n }\n }\n }\n }\n }\n }\n }\n let var73: number;\n if (input[2] > 2.249904835165133) {\n if (input[53] > 1e-35) {\n var73 = -0.09149569302330776;\n } else {\n if (input[142] > 1e-35) {\n var73 = -0.020143603866796752;\n } else {\n if (input[29] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[4] > 2.740319461670996) {\n if (input[0] > 1e-35) {\n var73 = -0.005838073295705989;\n } else {\n var73 = 0.0025448179376697196;\n }\n } else {\n if (input[217] > 1e-35) {\n var73 = 0.010391363152324442;\n } else {\n if (input[6] > 3.9219243190762363) {\n if (input[7] > 0.9546729796082215) {\n var73 = 0.00016709708501075782;\n } else {\n var73 = -0.019274537854809464;\n }\n } else {\n if (input[7] > 0.9717523368299734) {\n if (input[2] > 4.848108675189105) {\n var73 = 0.0038332904395533517;\n } else {\n if (input[141] > 1e-35) {\n if (input[6] > 3.0677824455408698) {\n var73 = -0.12592300140122323;\n } else {\n var73 = -1.2073741246841418;\n }\n } else {\n var73 = -0.17682453022795175;\n }\n }\n } else {\n var73 = -0.004373737265888883;\n }\n }\n }\n }\n } else {\n var73 = -0.032810714691009164;\n }\n } else {\n if (input[18] > 1e-35) {\n var73 = -0.024280045660709612;\n } else {\n if (input[156] > 1e-35) {\n var73 = -0.023509654115095334;\n } else {\n if (input[1] > 1e-35) {\n if (input[141] > 1e-35) {\n var73 = -0.032438707623116556;\n } else {\n if (input[32] > 1e-35) {\n var73 = -0.061272201063817755;\n } else {\n var73 = 0.004415514992097752;\n }\n }\n } else {\n var73 = -0.0017176659108089432;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[0] > 1e-35) {\n if (input[6] > 6.288787065535392) {\n if (input[2] > 0.8958797346140276) {\n var73 = 0.008680085548304642;\n } else {\n if (input[29] > 1e-35) {\n var73 = 0.03767506445697859;\n } else {\n var73 = -0.0007537359215762705;\n }\n }\n } else {\n if (input[4] > 0.8958797346140276) {\n var73 = 0.0002799056937607271;\n } else {\n var73 = -0.039667032027283916;\n }\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n var73 = 0.002506908961838236;\n } else {\n if (input[29] > 1e-35) {\n if (input[7] > 0.950335336459789) {\n var73 = 0.0027367426972748597;\n } else {\n var73 = -0.021265206402010337;\n }\n } else {\n if (input[30] > 1e-35) {\n if (input[210] > 1e-35) {\n var73 = -0.03496264625173957;\n } else {\n var73 = -0.007705718616493613;\n }\n } else {\n if (input[138] > 1e-35) {\n var73 = -0.035840689909527164;\n } else {\n var73 = 0.0006855012949462712;\n }\n }\n }\n }\n }\n }\n let var74: number;\n if (input[2] > 5.418317700738354) {\n if (input[5] > 6.0051201133541365) {\n if (input[156] > 1e-35) {\n var74 = -0.024776046248283234;\n } else {\n var74 = -0.004761578172448051;\n }\n } else {\n if (input[8] > 1e-35) {\n var74 = -0.025343070913887773;\n } else {\n var74 = 0.012224469039913016;\n }\n }\n } else {\n if (input[150] > 1e-35) {\n var74 = -0.04079051452350429;\n } else {\n if (input[10] > 1e-35) {\n if (input[152] > 1e-35) {\n var74 = 0.019743419118584654;\n } else {\n if (input[186] > 1e-35) {\n var74 = -0.15575093795294756;\n } else {\n if (input[217] > 1e-35) {\n var74 = 0.0056968023991711995;\n } else {\n var74 = -0.004356449942923164;\n }\n }\n }\n } else {\n if (input[5] > 6.0051201133541365) {\n if (input[125] > 1e-35) {\n var74 = -0.01597803134795572;\n } else {\n if (input[151] > 1e-35) {\n var74 = -0.05058454115923059;\n } else {\n if (input[50] > 1e-35) {\n var74 = -0.03619853041443809;\n } else {\n if (input[49] > 1e-35) {\n var74 = -0.03261722685392842;\n } else {\n if (input[24] > 1e-35) {\n var74 = 0.011909155984778505;\n } else {\n if (input[2] > 2.012675845367575) {\n var74 = 0.0004933624031973823;\n } else {\n if (input[219] > 1e-35) {\n var74 = 0.015579421213152617;\n } else {\n var74 = 0.002812703494519415;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[113] > 1e-35) {\n if (input[24] > 1e-35) {\n var74 = 0.09675188599473092;\n } else {\n var74 = 0.0008025077587732017;\n }\n } else {\n if (input[204] > 1e-35) {\n if (input[9] > 1e-35) {\n if (input[5] > 3.772694874805912) {\n var74 = 0.02609533140492082;\n } else {\n if (input[29] > 1e-35) {\n var74 = -0.21256031284758028;\n } else {\n var74 = 0.09442590919716193;\n }\n }\n } else {\n var74 = -0.004086903422513798;\n }\n } else {\n if (input[24] > 1e-35) {\n if (input[5] > 3.979637980058199) {\n var74 = -0.011071875945121415;\n } else {\n if (input[209] > 1e-35) {\n var74 = -0.19367443751378252;\n } else {\n var74 = -0.04414838576908475;\n }\n }\n } else {\n if (input[178] > 1e-35) {\n var74 = -0.06538606241685795;\n } else {\n if (input[100] > 1e-35) {\n if (input[5] > 3.772694874805912) {\n var74 = -0.01294941588968201;\n } else {\n if (input[5] > 2.673553765358735) {\n var74 = 0.08150000027300734;\n } else {\n var74 = -0.08989919051554107;\n }\n }\n } else {\n var74 = -0.0032151101072856354;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var75: number;\n if (input[35] > 1e-35) {\n var75 = -0.05704221149718709;\n } else {\n if (input[91] > 1e-35) {\n var75 = -0.023832002943165256;\n } else {\n if (input[102] > 1e-35) {\n var75 = 0.015441451551750014;\n } else {\n if (input[3] > 4.993822430271426) {\n var75 = -0.020159490027748073;\n } else {\n if (input[4] > 2.3502401828962087) {\n if (input[144] > 1e-35) {\n var75 = -0.022873219553742163;\n } else {\n if (input[22] > 1e-35) {\n var75 = -0.01287591196884623;\n } else {\n if (input[47] > 1e-35) {\n if (input[18] > 1e-35) {\n var75 = 0.07657102696661595;\n } else {\n var75 = -0.0243921910773003;\n }\n } else {\n if (input[150] > 1e-35) {\n var75 = -0.043982850497096056;\n } else {\n if (input[138] > 1e-35) {\n if (input[25] > 1e-35) {\n var75 = -0.03740348349716821;\n } else {\n var75 = 0.008237493112057112;\n }\n } else {\n if (input[49] > 1e-35) {\n var75 = -0.03254806921800082;\n } else {\n if (input[53] > 1e-35) {\n var75 = -0.057370285686186163;\n } else {\n if (input[3] > 4.085941003063911) {\n if (input[37] > 1e-35) {\n var75 = -0.04084726667137505;\n } else {\n if (input[155] > 1e-35) {\n var75 = 0.0323666619020495;\n } else {\n var75 = -0.0038866525930422893;\n }\n }\n } else {\n if (input[118] > 1e-35) {\n if (input[18] > 1e-35) {\n var75 = -0.0975422096275863;\n } else {\n var75 = -0.014038224866250074;\n }\n } else {\n if (input[136] > 1e-35) {\n var75 = -0.03199938604211209;\n } else {\n var75 = 0.0014268928516615767;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[99] > 1e-35) {\n var75 = 0.018668567929263327;\n } else {\n if (input[5] > 7.334002872979111) {\n if (input[156] > 1e-35) {\n var75 = -0.05380541629812827;\n } else {\n if (input[210] > 1e-35) {\n if (input[30] > 1e-35) {\n var75 = -0.047112416583853595;\n } else {\n var75 = 0.00900546030963941;\n }\n } else {\n if (input[208] > 1e-35) {\n var75 = 0.02334424121914086;\n } else {\n if (input[158] > 1e-35) {\n var75 = 0.04595592178250823;\n } else {\n var75 = -0.006709820970668842;\n }\n }\n }\n }\n } else {\n if (input[204] > 1e-35) {\n if (input[5] > 3.772694874805912) {\n var75 = 0.009489783712825852;\n } else {\n if (input[3] > 2.249904835165133) {\n var75 = 0.09999429949553015;\n } else {\n var75 = -0.03961464289941561;\n }\n }\n } else {\n var75 = -0.001190853283470586;\n }\n }\n }\n }\n }\n }\n }\n }\n let var76: number;\n if (input[39] > 1e-35) {\n var76 = -0.011391872842603505;\n } else {\n if (input[190] > 1e-35) {\n var76 = -0.021093147889461955;\n } else {\n if (input[51] > 1e-35) {\n if (input[18] > 1e-35) {\n var76 = 0.08723256651643213;\n } else {\n var76 = -0.04233732133209843;\n }\n } else {\n if (input[19] > 1e-35) {\n var76 = 0.008078856044745801;\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[60] > 1e-35) {\n var76 = -0.022165860715145688;\n } else {\n if (input[129] > 1e-35) {\n if (input[3] > 3.314020688089767) {\n var76 = 0.019990677612126993;\n } else {\n var76 = -0.035520772730423776;\n }\n } else {\n if (input[153] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n var76 = -0.006946377120973384;\n } else {\n if (input[0] > 1e-35) {\n if (input[8] > 1e-35) {\n if (input[5] > 5.692045796563381) {\n var76 = 0.04230611914121616;\n } else {\n var76 = -0.1152833284663223;\n }\n } else {\n var76 = 0.03987788751961305;\n }\n } else {\n var76 = -0.02748865099804465;\n }\n }\n } else {\n if (input[46] > 1e-35) {\n if (input[18] > 1e-35) {\n var76 = 0.047655531405650486;\n } else {\n var76 = -0.022707509947190632;\n }\n } else {\n if (input[18] > 1e-35) {\n if (input[3] > 0.8958797346140276) {\n if (input[31] > 1e-35) {\n var76 = 0.1425984397283696;\n } else {\n if (input[143] > 1e-35) {\n var76 = 0.05597721538261218;\n } else {\n var76 = -0.02117927246804007;\n }\n }\n } else {\n var76 = 0.011077153043550766;\n }\n } else {\n if (input[143] > 1e-35) {\n var76 = -0.0158979963012007;\n } else {\n if (input[187] > 1e-35) {\n if (input[30] > 1e-35) {\n var76 = 0.02515771028113912;\n } else {\n var76 = -0.019084229614362958;\n }\n } else {\n if (input[49] > 1e-35) {\n if (input[1] > 1e-35) {\n var76 = 0.014623537050735559;\n } else {\n var76 = -0.05320125987679328;\n }\n } else {\n if (input[58] > 1e-35) {\n if (input[3] > 3.1132683346437333) {\n var76 = 0.021421346835282216;\n } else {\n var76 = -0.03287702034784505;\n }\n } else {\n if (input[16] > 1e-35) {\n var76 = 0.008645735809593434;\n } else {\n if (input[3] > 4.993822430271426) {\n var76 = -0.01889537207927676;\n } else {\n var76 = 0.00131546333396141;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[153] > 1e-35) {\n var76 = -0.09822789507794744;\n } else {\n var76 = -0.010292962989428067;\n }\n }\n }\n }\n }\n }\n let var77: number;\n if (input[11] > 1e-35) {\n if (input[156] > 1e-35) {\n if (input[4] > 3.1132683346437333) {\n var77 = -0.009153166060719259;\n } else {\n var77 = -0.035386636811765286;\n }\n } else {\n if (input[58] > 1e-35) {\n var77 = -0.03881024236774208;\n } else {\n if (input[153] > 1e-35) {\n if (input[7] > 0.12645023619128054) {\n var77 = -0.01286680669029116;\n } else {\n var77 = -0.0573874491021103;\n }\n } else {\n if (input[3] > 3.276966702012906) {\n if (input[38] > 1e-35) {\n var77 = -0.03084033316462023;\n } else {\n var77 = -0.00517175216868761;\n }\n } else {\n if (input[195] > 1e-35) {\n var77 = 0.01773824295809578;\n } else {\n if (input[131] > 1e-35) {\n var77 = -0.17828043850421407;\n } else {\n var77 = 0.0005554487984838318;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[7] > 0.14547530463198097) {\n if (input[105] > 1e-35) {\n var77 = -0.018589129226123456;\n } else {\n if (input[116] > 1e-35) {\n var77 = -0.0227108777687536;\n } else {\n if (input[24] > 1e-35) {\n var77 = 0.009520152980411787;\n } else {\n if (input[135] > 1e-35) {\n var77 = -0.004364970908897872;\n } else {\n if (input[0] > 1e-35) {\n if (input[18] > 1e-35) {\n var77 = -0.015737703364129243;\n } else {\n var77 = 0.003711277180349787;\n }\n } else {\n if (input[12] > 1e-35) {\n if (input[4] > 3.540854293052788) {\n if (input[155] > 1e-35) {\n var77 = 0.04655165952772795;\n } else {\n var77 = 0.009321761971665682;\n }\n } else {\n if (input[210] > 1e-35) {\n var77 = 0.018839890489201528;\n } else {\n if (input[129] > 1e-35) {\n var77 = -0.03111680952187252;\n } else {\n var77 = 0.0002649813454447912;\n }\n }\n }\n } else {\n if (input[23] > 1e-35) {\n var77 = 0.014110539528977999;\n } else {\n if (input[109] > 1e-35) {\n var77 = 0.014168740682742625;\n } else {\n var77 = -0.0008607565404007093;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[3] > 2.3502401828962087) {\n if (input[9] > 1e-35) {\n if (input[4] > 3.3842466058243152) {\n var77 = -0.004252607769147212;\n } else {\n var77 = 0.02017003996344357;\n }\n } else {\n if (input[16] > 1e-35) {\n var77 = 0.01594899805169211;\n } else {\n var77 = -0.006372071796745688;\n }\n }\n } else {\n if (input[12] > 1e-35) {\n var77 = -0.0251011457777017;\n } else {\n if (input[121] > 1e-35) {\n var77 = -0.07822588279288774;\n } else {\n var77 = -0.005026529762858;\n }\n }\n }\n }\n }\n let var78: number;\n if (input[7] > 0.8375851232899904) {\n if (input[155] > 1e-35) {\n if (input[3] > 1.2424533248940002) {\n var78 = 0.014982109981371684;\n } else {\n var78 = -0.08302064203662592;\n }\n } else {\n if (input[3] > 2.602003343538398) {\n if (input[125] > 1e-35) {\n var78 = -0.02862612402789537;\n } else {\n var78 = -0.0004831913476108919;\n }\n } else {\n if (input[42] > 1e-35) {\n var78 = -0.08030278175390543;\n } else {\n if (input[90] > 1e-35) {\n var78 = -0.11931838045625616;\n } else {\n var78 = 0.003328726909052652;\n }\n }\n }\n }\n } else {\n if (input[125] > 1e-35) {\n if (input[3] > 1e-35) {\n var78 = -0.03347653784336098;\n } else {\n var78 = 0.0381767649776156;\n }\n } else {\n if (input[3] > 2.4414009612931857) {\n if (input[3] > 3.1132683346437333) {\n if (input[137] > 1e-35) {\n var78 = 0.04078434374172937;\n } else {\n if (input[130] > 1e-35) {\n var78 = 0.04811471469938318;\n } else {\n if (input[152] > 1e-35) {\n var78 = 0.012079515899716571;\n } else {\n if (input[23] > 1e-35) {\n var78 = 0.017817807971301534;\n } else {\n if (input[122] > 1e-35) {\n var78 = 0.049338146544587284;\n } else {\n if (input[115] > 1e-35) {\n var78 = 0.026905923036994708;\n } else {\n if (input[10] > 1e-35) {\n var78 = -0.008135082370740723;\n } else {\n if (input[89] > 1e-35) {\n var78 = 0.023584069012120446;\n } else {\n if (input[95] > 1e-35) {\n var78 = 0.013988944683250695;\n } else {\n var78 = -0.002584756192745314;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[139] > 1e-35) {\n var78 = -0.04454469703180858;\n } else {\n if (input[99] > 1e-35) {\n if (input[3] > 2.524928003624769) {\n var78 = 0.010620580427538877;\n } else {\n var78 = 0.047779724434429495;\n }\n } else {\n if (input[131] > 1e-35) {\n var78 = -0.08155143867377633;\n } else {\n var78 = 0.0031488702256745843;\n }\n }\n }\n }\n } else {\n if (input[7] > 0.06275229375044648) {\n if (input[99] > 1e-35) {\n var78 = 0.016956254821045937;\n } else {\n if (input[90] > 1e-35) {\n var78 = -0.11685880917620971;\n } else {\n if (input[210] > 1e-35) {\n if (input[11] > 1e-35) {\n var78 = -0.040607887814632475;\n } else {\n var78 = -0.006287900824728332;\n }\n } else {\n var78 = -0.0018997472673294537;\n }\n }\n }\n } else {\n if (input[14] > 1e-35) {\n var78 = 0.02358706984105576;\n } else {\n var78 = -0.01737075534918072;\n }\n }\n }\n }\n }\n let var79: number;\n if (input[6] > 1e-35) {\n if (input[2] > 5.4049245766661995) {\n if (input[5] > 6.441743353550561) {\n if (input[29] > 1e-35) {\n if (input[4] > 2.673553765358735) {\n var79 = -0.007517267159018327;\n } else {\n var79 = -0.02379463821120899;\n }\n } else {\n var79 = -0.0026543290628044274;\n }\n } else {\n if (input[8] > 1e-35) {\n var79 = -0.022865480180725452;\n } else {\n var79 = 0.009005117181880752;\n }\n }\n } else {\n if (input[6] > 5.161920636569023) {\n if (input[0] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[2] > 2.012675845367575) {\n if (input[3] > 2.3502401828962087) {\n var79 = 0.0021573820428423146;\n } else {\n var79 = -0.0046125093600082965;\n }\n } else {\n if (input[3] > 3.314020688089767) {\n var79 = -0.005566488595229649;\n } else {\n if (input[6] > 6.288787065535392) {\n var79 = 0.012796965207082116;\n } else {\n var79 = -0.0023971957228440767;\n }\n }\n }\n } else {\n if (input[3] > 2.249904835165133) {\n if (input[2] > 1e-35) {\n var79 = -0.0003832411399288501;\n } else {\n if (input[1] > 1e-35) {\n var79 = -0.03148874544425103;\n } else {\n var79 = -0.3158553329522586;\n }\n }\n } else {\n if (input[2] > 1e-35) {\n var79 = 0.025981575700247922;\n } else {\n var79 = 0.052944809618023905;\n }\n }\n }\n } else {\n if (input[6] > 8.681774988134558) {\n if (input[3] > 2.970085626360216) {\n var79 = -0.0005280655103032829;\n } else {\n var79 = -0.009402467452152188;\n }\n } else {\n if (input[2] > 0.8958797346140276) {\n var79 = 0.0018798828715775142;\n } else {\n if (input[3] > 1.7005986908310777) {\n var79 = -0.0002583719758369029;\n } else {\n var79 = -0.014467497542301198;\n }\n }\n }\n }\n } else {\n if (input[128] > 1e-35) {\n var79 = -0.03075061856353219;\n } else {\n if (input[3] > 3.0201273556387074) {\n if (input[8] > 1e-35) {\n var79 = -0.03107874404542307;\n } else {\n var79 = -0.0063178690978266385;\n }\n } else {\n if (input[113] > 1e-35) {\n if (input[24] > 1e-35) {\n var79 = 0.10168122236339333;\n } else {\n var79 = 0.0027676566086997536;\n }\n } else {\n if (input[100] > 1e-35) {\n if (input[3] > 1.4978661367769956) {\n var79 = -0.019182725682091863;\n } else {\n if (input[3] > 1.2424533248940002) {\n var79 = 0.10007959215270637;\n } else {\n var79 = -0.049901874168813753;\n }\n }\n } else {\n if (input[12] > 1e-35) {\n var79 = -0.008354674563617942;\n } else {\n var79 = 0.000556773623388255;\n }\n }\n }\n }\n }\n }\n }\n } else {\n var79 = -0.06338083699889271;\n }\n let var80: number;\n if (input[14] > 1e-35) {\n if (input[5] > 7.841296344941067) {\n if (input[217] > 1e-35) {\n var80 = -0.03452197748259044;\n } else {\n if (input[141] > 1e-35) {\n var80 = -0.05526745933972476;\n } else {\n var80 = 0.003096257901065188;\n }\n }\n } else {\n var80 = 0.013468654879205778;\n }\n } else {\n if (input[90] > 1e-35) {\n var80 = -0.04633994478668718;\n } else {\n if (input[7] > 0.04507521918085865) {\n if (input[39] > 1e-35) {\n var80 = -0.011427282692256308;\n } else {\n if (input[188] > 1e-35) {\n var80 = -0.11824461537515621;\n } else {\n if (input[17] > 1e-35) {\n if (input[5] > 3.276966702012906) {\n var80 = 0.009014346731620665;\n } else {\n var80 = -0.10784986305366669;\n }\n } else {\n if (input[102] > 1e-35) {\n var80 = 0.014356846380168074;\n } else {\n if (input[109] > 1e-35) {\n var80 = 0.0100955463134877;\n } else {\n if (input[31] > 1e-35) {\n var80 = 0.025672511171270042;\n } else {\n if (input[127] > 1e-35) {\n var80 = -0.10904631172619624;\n } else {\n if (input[19] > 1e-35) {\n var80 = 0.007015456473363717;\n } else {\n if (input[60] > 1e-35) {\n var80 = -0.02409044800892067;\n } else {\n if (input[217] > 1e-35) {\n if (input[7] > 0.9914949911911836) {\n var80 = 0.02334115299069277;\n } else {\n if (input[1] > 1e-35) {\n var80 = -0.000029013080593250377;\n } else {\n var80 = 0.014307421165143329;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[42] > 1e-35) {\n var80 = -0.06673983904970003;\n } else {\n if (input[37] > 1e-35) {\n var80 = -0.05636396687178933;\n } else {\n if (input[32] > 1e-35) {\n var80 = -0.042854874962508754;\n } else {\n if (input[140] > 1e-35) {\n var80 = -0.014546243613252019;\n } else {\n if (input[119] > 1e-35) {\n var80 = 0.02592806792359847;\n } else {\n var80 = 0.0008331579108247542;\n }\n }\n }\n }\n }\n } else {\n if (input[12] > 1e-35) {\n var80 = 0.004348565717870661;\n } else {\n if (input[195] > 1e-35) {\n var80 = -0.016064193157584304;\n } else {\n if (input[210] > 1e-35) {\n var80 = -0.01896835246692864;\n } else {\n if (input[122] > 1e-35) {\n var80 = 0.06415669138405272;\n } else {\n if (input[219] > 1e-35) {\n var80 = -0.03191239858069586;\n } else {\n var80 = -0.0022170295258555585;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var80 = -0.00965022020696389;\n }\n }\n }\n let var81: number;\n if (input[55] > 1e-35) {\n var81 = -0.04649484416236924;\n } else {\n if (input[6] > 1e-35) {\n if (input[35] > 1e-35) {\n var81 = -0.04814595674860986;\n } else {\n if (input[173] > 1e-35) {\n var81 = -0.030965289355370126;\n } else {\n if (input[190] > 1e-35) {\n var81 = -0.01892908615035444;\n } else {\n if (input[50] > 1e-35) {\n var81 = -0.03023310323845746;\n } else {\n if (input[14] > 1e-35) {\n if (input[134] > 1e-35) {\n var81 = 0.029102388421738776;\n } else {\n if (input[217] > 1e-35) {\n var81 = -0.021829759931582565;\n } else {\n var81 = 0.005209049556942947;\n }\n }\n } else {\n if (input[90] > 1e-35) {\n if (input[3] > 3.276966702012906) {\n var81 = 0.007482519637019732;\n } else {\n if (input[28] > 1e-35) {\n var81 = 0.08823476156200263;\n } else {\n var81 = -0.1134870648564767;\n }\n }\n } else {\n if (input[17] > 1e-35) {\n if (input[5] > 3.156774023138548) {\n if (input[3] > 2.861792550976191) {\n if (input[134] > 1e-35) {\n var81 = 0.037573808092493166;\n } else {\n var81 = -0.008120569804875069;\n }\n } else {\n var81 = 0.015185866424900767;\n }\n } else {\n var81 = -0.10150107137017012;\n }\n } else {\n if (input[39] > 1e-35) {\n var81 = -0.011108691883331833;\n } else {\n if (input[4] > 2.4414009612931857) {\n if (input[123] > 1e-35) {\n var81 = -0.019406534412652932;\n } else {\n if (input[22] > 1e-35) {\n var81 = -0.011646225036274034;\n } else {\n if (input[118] > 1e-35) {\n if (input[1] > 1e-35) {\n var81 = 0.007977856608752276;\n } else {\n var81 = -0.038946271309380914;\n }\n } else {\n var81 = 0.0009257226566265858;\n }\n }\n }\n } else {\n if (input[101] > 1e-35) {\n if (input[6] > 5.769881059461895) {\n var81 = -0.06484570063989317;\n } else {\n var81 = 0.016294764421436982;\n }\n } else {\n if (input[29] > 1e-35) {\n if (input[204] > 1e-35) {\n if (input[5] > 5.859359688974663) {\n var81 = 0.036329398743295674;\n } else {\n var81 = -0.20474934656494398;\n }\n } else {\n if (input[4] > 1.7005986908310777) {\n var81 = -0.0005630875641286038;\n } else {\n if (input[5] > 3.5694334999727624) {\n if (input[19] > 1e-35) {\n var81 = 0.03322386202318951;\n } else {\n var81 = -0.01687696637036405;\n }\n } else {\n var81 = -0.10533305728771972;\n }\n }\n }\n } else {\n var81 = -0.0004901077590279651;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var81 = -0.05758869249681345;\n }\n }\n let var82: number;\n if (input[57] > 1e-35) {\n var82 = -0.043478488738181505;\n } else {\n if (input[53] > 1e-35) {\n var82 = -0.05188532777589009;\n } else {\n if (input[11] > 1e-35) {\n if (input[156] > 1e-35) {\n var82 = -0.01733439245316815;\n } else {\n if (input[58] > 1e-35) {\n var82 = -0.03508850349398082;\n } else {\n if (input[134] > 1e-35) {\n if (input[38] > 1e-35) {\n if (input[3] > 3.156774023138548) {\n var82 = -0.02641618586067251;\n } else {\n var82 = 0.0053883499998111746;\n }\n } else {\n var82 = -0.04111067521339709;\n }\n } else {\n if (input[46] > 1e-35) {\n var82 = -0.03960880739147387;\n } else {\n if (input[56] > 1e-35) {\n var82 = 0.02833430038101972;\n } else {\n if (input[3] > 4.548585836935273) {\n var82 = -0.028156779064728323;\n } else {\n var82 = -0.0006287807275955149;\n }\n }\n }\n }\n }\n }\n } else {\n if (input[105] > 1e-35) {\n var82 = -0.018589321466431944;\n } else {\n if (input[187] > 1e-35) {\n if (input[30] > 1e-35) {\n var82 = 0.021938681282791916;\n } else {\n var82 = -0.016917430307970042;\n }\n } else {\n if (input[7] > 0.015258684697466883) {\n if (input[132] > 1e-35) {\n var82 = 0.026815659384164206;\n } else {\n if (input[204] > 1e-35) {\n if (input[7] > 0.992067132663463) {\n var82 = -0.010565408217521758;\n } else {\n if (input[7] > 0.9738681190948303) {\n if (input[9] > 1e-35) {\n if (input[30] > 1e-35) {\n var82 = 0.09345774314045512;\n } else {\n var82 = -0.003460687191126055;\n }\n } else {\n var82 = 0.009778848673591349;\n }\n } else {\n var82 = 0.006207652194161698;\n }\n }\n } else {\n if (input[134] > 1e-35) {\n if (input[14] > 1e-35) {\n var82 = 0.026940863472122597;\n } else {\n var82 = 0.004032635910042969;\n }\n } else {\n if (input[16] > 1e-35) {\n if (input[156] > 1e-35) {\n var82 = -0.014571620220052964;\n } else {\n if (input[219] > 1e-35) {\n var82 = 0.03394257525872151;\n } else {\n if (input[189] > 1e-35) {\n var82 = -0.16441255476933125;\n } else {\n var82 = 0.006890416623408193;\n }\n }\n }\n } else {\n if (input[7] > 0.5866799179067689) {\n if (input[156] > 1e-35) {\n if (input[9] > 1e-35) {\n var82 = -0.002374233797129139;\n } else {\n var82 = 0.015343494638416642;\n }\n } else {\n var82 = 0.0007085956801478842;\n }\n } else {\n var82 = -0.0014226167854637043;\n }\n }\n }\n }\n }\n } else {\n var82 = -0.014931890774210171;\n }\n }\n }\n }\n }\n }\n let var83: number;\n if (input[52] > 1e-35) {\n var83 = -0.040552145534119004;\n } else {\n if (input[88] > 1e-35) {\n var83 = -0.11616238297789526;\n } else {\n if (input[147] > 1e-35) {\n if (input[21] > 1e-35) {\n var83 = 0.08405882357263977;\n } else {\n var83 = -0.028120036866471673;\n }\n } else {\n if (input[89] > 1e-35) {\n var83 = 0.013417411709807947;\n } else {\n if (input[138] > 1e-35) {\n if (input[25] > 1e-35) {\n var83 = -0.03104795267483152;\n } else {\n if (input[8] > 1e-35) {\n var83 = -0.013793892541819341;\n } else {\n var83 = 0.007067793368543704;\n }\n }\n } else {\n if (input[3] > 4.212100162283537) {\n if (input[37] > 1e-35) {\n var83 = -0.04169781427571004;\n } else {\n if (input[59] > 1e-35) {\n var83 = 0.039366779099462186;\n } else {\n if (input[190] > 1e-35) {\n var83 = -0.0746572875957972;\n } else {\n var83 = -0.0046665287028623895;\n }\n }\n }\n } else {\n if (input[31] > 1e-35) {\n if (input[3] > 3.3497501700808394) {\n var83 = -0.015043885860062665;\n } else {\n var83 = 0.04427790295514171;\n }\n } else {\n if (input[127] > 1e-35) {\n var83 = -0.09222397003880911;\n } else {\n if (input[188] > 1e-35) {\n var83 = -0.11791399942046604;\n } else {\n if (input[116] > 1e-35) {\n var83 = -0.022670774074606673;\n } else {\n if (input[21] > 1e-35) {\n if (input[118] > 1e-35) {\n var83 = -0.08590814127371893;\n } else {\n var83 = -0.009079159755287763;\n }\n } else {\n if (input[10] > 1e-35) {\n if (input[153] > 1e-35) {\n if (input[7] > 0.12025037553499339) {\n var83 = -0.010834658570263708;\n } else {\n var83 = -0.06942979142484561;\n }\n } else {\n if (input[59] > 1e-35) {\n var83 = -0.0368654965105411;\n } else {\n if (input[186] > 1e-35) {\n var83 = -0.13585047638050318;\n } else {\n var83 = -0.001475385731000911;\n }\n }\n }\n } else {\n if (input[11] > 1e-35) {\n if (input[47] > 1e-35) {\n var83 = -0.07021793045868131;\n } else {\n if (input[58] > 1e-35) {\n var83 = -0.03264322466138671;\n } else {\n if (input[153] > 1e-35) {\n if (input[7] > 0.4982752029697964) {\n var83 = -0.000719771928860618;\n } else {\n var83 = -0.02550581685370434;\n }\n } else {\n var83 = -0.001300530189452872;\n }\n }\n }\n } else {\n if (input[216] > 1e-35) {\n var83 = -0.04553949138490546;\n } else {\n var83 = 0.0013445292966782988;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var84: number;\n if (input[152] > 1e-35) {\n var84 = 0.005642349825665321;\n } else {\n if (input[108] > 1e-35) {\n if (input[1] > 1e-35) {\n var84 = 0.012759171568581189;\n } else {\n var84 = -0.0015650437871311187;\n }\n } else {\n if (input[102] > 1e-35) {\n var84 = 0.012533880283367552;\n } else {\n if (input[10] > 1e-35) {\n if (input[4] > 1.4978661367769956) {\n if (input[7] > 0.9888588760569341) {\n var84 = 0.007453521083396632;\n } else {\n var84 = -0.0036225862281260785;\n }\n } else {\n if (input[3] > 0.8958797346140276) {\n var84 = -0.0027177080775155366;\n } else {\n if (input[5] > 5.782284349061034) {\n var84 = -0.04454373321655838;\n } else {\n var84 = 0.021964247026786614;\n }\n }\n }\n } else {\n if (input[11] > 1e-35) {\n if (input[47] > 1e-35) {\n var84 = -0.06196070580382676;\n } else {\n if (input[121] > 1e-35) {\n if (input[1] > 1e-35) {\n var84 = -0.06122312462911518;\n } else {\n if (input[7] > 0.3847172300624272) {\n var84 = 0.03518239795956787;\n } else {\n if (input[3] > 2.4414009612931857) {\n var84 = 0.006811972713764457;\n } else {\n var84 = -0.0933556055347465;\n }\n }\n }\n } else {\n if (input[5] > 4.938058177869999) {\n var84 = -0.004012086267764631;\n } else {\n var84 = 0.01930669434547199;\n }\n }\n }\n } else {\n if (input[5] > 6.0051201133541365) {\n if (input[27] > 1e-35) {\n var84 = -0.012304580143719986;\n } else {\n var84 = 0.0013650712455989071;\n }\n } else {\n if (input[3] > 2.802901033147999) {\n var84 = -0.0083470520183599;\n } else {\n if (input[7] > 0.5811983411966435) {\n if (input[7] > 0.990877425524446) {\n if (input[219] > 1e-35) {\n if (input[3] > 1e-35) {\n var84 = 0.06211865200552023;\n } else {\n if (input[17] > 1e-35) {\n var84 = 0.06775644666502018;\n } else {\n var84 = -0.06866304616688222;\n }\n }\n } else {\n if (input[217] > 1e-35) {\n var84 = 0.059656960273077646;\n } else {\n var84 = -0.004328630560280456;\n }\n }\n } else {\n if (input[204] > 1e-35) {\n if (input[4] > 2.249904835165133) {\n var84 = 0.006371564018556469;\n } else {\n if (input[3] > 2.138333059508028) {\n var84 = 0.09486061534469152;\n } else {\n var84 = -0.09409330595635478;\n }\n }\n } else {\n if (input[4] > 2.602003343538398) {\n var84 = 0.011308844028341723;\n } else {\n if (input[100] > 1e-35) {\n var84 = 0.0439316487073224;\n } else {\n var84 = -0.003403233436702135;\n }\n }\n }\n }\n } else {\n var84 = -0.00960652384005499;\n }\n }\n }\n }\n }\n }\n }\n }\n let var85: number;\n if (input[144] > 1e-35) {\n if (input[18] > 1e-35) {\n var85 = 0.07197995497453837;\n } else {\n if (input[1] > 1e-35) {\n var85 = -0.001274320993832369;\n } else {\n var85 = -0.040032546534329444;\n }\n }\n } else {\n if (input[52] > 1e-35) {\n if (input[18] > 1e-35) {\n var85 = 0.09098124993319018;\n } else {\n var85 = -0.04537404774072243;\n }\n } else {\n if (input[40] > 1e-35) {\n var85 = -0.02515534903180516;\n } else {\n if (input[53] > 1e-35) {\n var85 = -0.04736675675905027;\n } else {\n if (input[178] > 1e-35) {\n var85 = -0.021374380471858013;\n } else {\n if (input[55] > 1e-35) {\n var85 = -0.04240162360893064;\n } else {\n if (input[51] > 1e-35) {\n if (input[18] > 1e-35) {\n var85 = 0.07999652271774131;\n } else {\n var85 = -0.036649228565504045;\n }\n } else {\n if (input[109] > 1e-35) {\n var85 = 0.009067075019741765;\n } else {\n if (input[54] > 1e-35) {\n if (input[1] > 1e-35) {\n var85 = 0.019160818735605257;\n } else {\n var85 = -0.05967997790089002;\n }\n } else {\n if (input[35] > 1e-35) {\n var85 = -0.043420689526233285;\n } else {\n if (input[173] > 1e-35) {\n var85 = -0.027561163630755333;\n } else {\n if (input[190] > 1e-35) {\n var85 = -0.016370101115869642;\n } else {\n if (input[14] > 1e-35) {\n if (input[217] > 1e-35) {\n var85 = -0.019735056448517897;\n } else {\n if (input[141] > 1e-35) {\n var85 = -0.028090004807030017;\n } else {\n var85 = 0.006865378253320941;\n }\n }\n } else {\n if (input[139] > 1e-35) {\n if (input[1] > 1e-35) {\n var85 = -0.032389864623829076;\n } else {\n var85 = 0.005458607214221278;\n }\n } else {\n if (input[60] > 1e-35) {\n var85 = -0.019089857559617188;\n } else {\n if (input[153] > 1e-35) {\n if (input[18] > 1e-35) {\n var85 = 0.015189336996079859;\n } else {\n if (input[19] > 1e-35) {\n var85 = 0.013745154147527805;\n } else {\n if (input[1] > 1e-35) {\n var85 = -0.005284271350108698;\n } else {\n var85 = -0.0374184512092477;\n }\n }\n }\n } else {\n if (input[18] > 1e-35) {\n if (input[99] > 1e-35) {\n var85 = -0.0595395395199616;\n } else {\n if (input[100] > 1e-35) {\n var85 = -0.09991342902311327;\n } else {\n var85 = -0.0042488091801234805;\n }\n }\n } else {\n var85 = 0.0006682804828197052;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var86: number;\n if (input[46] > 1e-35) {\n var86 = -0.012191380765172536;\n } else {\n if (input[88] > 1e-35) {\n var86 = -0.10266216005056819;\n } else {\n if (input[91] > 1e-35) {\n var86 = -0.018445844031974568;\n } else {\n if (input[50] > 1e-35) {\n var86 = -0.027431707051961525;\n } else {\n if (input[144] > 1e-35) {\n if (input[7] > 0.9945060383544003) {\n var86 = 0.03614842925379388;\n } else {\n var86 = -0.02095650990295711;\n }\n } else {\n if (input[4] > 2.4414009612931857) {\n if (input[123] > 1e-35) {\n if (input[3] > 3.0201273556387074) {\n var86 = -0.01053451990903616;\n } else {\n var86 = -0.05114195197878968;\n }\n } else {\n if (input[16] > 1e-35) {\n var86 = 0.007316468830803533;\n } else {\n if (input[9] > 1e-35) {\n var86 = 0.003316750172048933;\n } else {\n var86 = 0.00000860911526134492;\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n if (input[3] > 1e-35) {\n var86 = -0.02547358042212171;\n } else {\n var86 = 0.019472890771357998;\n }\n } else {\n if (input[186] > 1e-35) {\n var86 = -0.09288424685816356;\n } else {\n if (input[41] > 1e-35) {\n var86 = -0.1310231930206974;\n } else {\n if (input[42] > 1e-35) {\n var86 = -0.056216247465863484;\n } else {\n if (input[29] > 1e-35) {\n if (input[5] > 3.5694334999727624) {\n if (input[134] > 1e-35) {\n var86 = -0.054747915129536466;\n } else {\n if (input[1] > 1e-35) {\n if (input[131] > 1e-35) {\n var86 = -0.16815706432319097;\n } else {\n var86 = -0.002818043413853223;\n }\n } else {\n var86 = -0.041951940639575136;\n }\n }\n } else {\n if (input[7] > 0.960816451500545) {\n if (input[219] > 1e-35) {\n var86 = 0.10052885656939581;\n } else {\n var86 = -0.11599835225683999;\n }\n } else {\n var86 = 0.029922858316313545;\n }\n }\n } else {\n if (input[101] > 1e-35) {\n if (input[5] > 7.429817490674132) {\n var86 = -0.06576516230122952;\n } else {\n var86 = -0.0008540865426696243;\n }\n } else {\n if (input[210] > 1e-35) {\n if (input[114] > 1e-35) {\n var86 = 0.013062456952379193;\n } else {\n if (input[7] > 0.7267616382562012) {\n var86 = 0.0022613700798703854;\n } else {\n var86 = -0.03938763940013096;\n }\n }\n } else {\n if (input[59] > 1e-35) {\n if (input[12] > 1e-35) {\n var86 = 0.008501036224046256;\n } else {\n var86 = -0.06542467236134167;\n }\n } else {\n var86 = 0.002585754319607976;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var87: number;\n if (input[28] > 1e-35) {\n var87 = 0.008779900390406317;\n } else {\n if (input[7] > 0.9880960409521241) {\n if (input[8] > 1e-35) {\n var87 = -0.008991654120695218;\n } else {\n if (input[3] > 1e-35) {\n if (input[140] > 1e-35) {\n var87 = -0.02731072195122447;\n } else {\n var87 = 0.002008744895602654;\n }\n } else {\n if (input[217] > 1e-35) {\n var87 = 0.02359361264236281;\n } else {\n var87 = 0.007024522001417586;\n }\n }\n }\n } else {\n if (input[2] > 2.138333059508028) {\n if (input[3] > 2.4414009612931857) {\n if (input[125] > 1e-35) {\n var87 = -0.04199133736767654;\n } else {\n if (input[47] > 1e-35) {\n var87 = -0.027561033349225085;\n } else {\n if (input[3] > 4.085941003063911) {\n if (input[12] > 1e-35) {\n var87 = 0.007807873722550442;\n } else {\n if (input[152] > 1e-35) {\n var87 = 0.030689318204494505;\n } else {\n if (input[137] > 1e-35) {\n var87 = 0.06699720359975746;\n } else {\n var87 = -0.010441301216813357;\n }\n }\n }\n } else {\n if (input[118] > 1e-35) {\n var87 = -0.03153852460438172;\n } else {\n if (input[48] > 1e-35) {\n var87 = -0.03440026517387997;\n } else {\n var87 = 0.0015296602873888215;\n }\n }\n }\n }\n }\n } else {\n if (input[0] > 1e-35) {\n if (input[2] > 6.607325405747152) {\n var87 = -0.027110120892630915;\n } else {\n if (input[153] > 1e-35) {\n var87 = -0.017016088064422574;\n } else {\n var87 = -0.005723165911539293;\n }\n }\n } else {\n if (input[187] > 1e-35) {\n var87 = -0.031718114891806884;\n } else {\n var87 = -0.0005272212291525389;\n }\n }\n }\n } else {\n if (input[0] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[46] > 1e-35) {\n var87 = -0.09171631422683799;\n } else {\n var87 = 0.003327268948098216;\n }\n } else {\n if (input[3] > 2.3502401828962087) {\n if (input[125] > 1e-35) {\n var87 = -0.5887915327321841;\n } else {\n if (input[2] > 1e-35) {\n var87 = -0.006637502258168407;\n } else {\n var87 = -0.08424468641004934;\n }\n }\n } else {\n if (input[125] > 1e-35) {\n var87 = -0.06617256968162606;\n } else {\n var87 = 0.028846174454930092;\n }\n }\n }\n } else {\n if (input[2] > 1.2424533248940002) {\n if (input[15] > 1e-35) {\n var87 = -0.016616715415331784;\n } else {\n var87 = 0.002680237807803091;\n }\n } else {\n if (input[3] > 1e-35) {\n var87 = -0.0012589163812412535;\n } else {\n var87 = -0.015154395987664649;\n }\n }\n }\n }\n }\n }\n let var88: number;\n if (input[6] > 9.286096980078398) {\n if (input[4] > 2.970085626360216) {\n var88 = -0.001155963563974424;\n } else {\n var88 = -0.011949331884445141;\n }\n } else {\n if (input[6] > 6.3071868642287745) {\n if (input[2] > 5.150393035655617) {\n var88 = -0.0033183579364470086;\n } else {\n if (input[11] > 1e-35) {\n var88 = -0.0018887492076874403;\n } else {\n if (input[169] > 1e-35) {\n var88 = -0.09486398911649394;\n } else {\n var88 = 0.0025252552927441433;\n }\n }\n }\n } else {\n if (input[4] > 3.0677824455408698) {\n if (input[7] > 0.09963982551990838) {\n if (input[141] > 1e-35) {\n if (input[6] > 3.314020688089767) {\n var88 = 0.012137569190879735;\n } else {\n var88 = 0.09584425242224671;\n }\n } else {\n if (input[8] > 1e-35) {\n if (input[7] > 0.987306237235768) {\n if (input[2] > 0.8958797346140276) {\n var88 = -0.020817404206469048;\n } else {\n var88 = -0.06464699261956137;\n }\n } else {\n var88 = -0.008121005894366425;\n }\n } else {\n var88 = -0.002273798477153842;\n }\n }\n } else {\n if (input[4] > 3.5114340430413216) {\n var88 = -0.024199637055494112;\n } else {\n var88 = -0.0044500308011184275;\n }\n }\n } else {\n if (input[12] > 1e-35) {\n var88 = -0.00483411782477681;\n } else {\n if (input[5] > 3.156774023138548) {\n if (input[8] > 1e-35) {\n if (input[5] > 3.772694874805912) {\n if (input[6] > 3.795426061844291) {\n var88 = 0.0013628724281773107;\n } else {\n var88 = -0.04205266437322089;\n }\n } else {\n if (input[141] > 1e-35) {\n if (input[4] > 2.861792550976191) {\n if (input[5] > 3.417592293073651) {\n var88 = -0.15445392240959782;\n } else {\n if (input[2] > 2.970085626360216) {\n var88 = -0.5683130345409004;\n } else {\n var88 = -1.2639522532467855;\n }\n }\n } else {\n var88 = -0.12861577169349267;\n }\n } else {\n var88 = -0.08527127841498366;\n }\n }\n } else {\n if (input[4] > 2.4414009612931857) {\n if (input[7] > 0.29163353806150266) {\n var88 = 0.003881870206848933;\n } else {\n var88 = 0.01474849027472377;\n }\n } else {\n if (input[18] > 1e-35) {\n if (input[219] > 1e-35) {\n var88 = -0.07387984252991263;\n } else {\n var88 = -0.013089382916580447;\n }\n } else {\n var88 = -0.0008129634296833813;\n }\n }\n }\n } else {\n if (input[3] > 2.3502401828962087) {\n if (input[2] > 3.1132683346437333) {\n var88 = 0.019943967048858428;\n } else {\n var88 = -0.04278248600927625;\n }\n } else {\n if (input[17] > 1e-35) {\n var88 = -0.11809979934412335;\n } else {\n var88 = 0.03777084692378827;\n }\n }\n }\n }\n }\n }\n }\n let var89: number;\n if (input[57] > 1e-35) {\n var89 = -0.03805766278012468;\n } else {\n if (input[6] > 9.286096980078398) {\n if (input[2] > 3.725620842493839) {\n var89 = -0.010152097691926694;\n } else {\n var89 = -0.000726856757223527;\n }\n } else {\n if (input[25] > 1e-35) {\n if (input[4] > 2.917405368531303) {\n if (input[6] > 4.226807104886684) {\n if (input[5] > 8.866229029069968) {\n var89 = 0.016965184252348844;\n } else {\n var89 = -0.027524673351863413;\n }\n } else {\n var89 = -0.09999982742666325;\n }\n } else {\n if (input[219] > 1e-35) {\n var89 = -0.11642840619184194;\n } else {\n if (input[6] > 3.1984648276080736) {\n var89 = 0.02202934385365115;\n } else {\n var89 = -0.0758508504188626;\n }\n }\n }\n } else {\n if (input[17] > 1e-35) {\n if (input[5] > 3.276966702012906) {\n if (input[3] > 2.861792550976191) {\n if (input[38] > 1e-35) {\n var89 = 0.03529859841404316;\n } else {\n var89 = -0.005442656204983076;\n }\n } else {\n var89 = 0.013832633319757828;\n }\n } else {\n var89 = -0.07099090377505678;\n }\n } else {\n if (input[40] > 1e-35) {\n if (input[12] > 1e-35) {\n var89 = 0.020780509349314687;\n } else {\n var89 = -0.0412229778697227;\n }\n } else {\n if (input[178] > 1e-35) {\n if (input[6] > 4.832297822126891) {\n var89 = -0.012751356404573045;\n } else {\n var89 = -0.07365946414911166;\n }\n } else {\n if (input[6] > 1e-35) {\n if (input[91] > 1e-35) {\n var89 = -0.018973855754862178;\n } else {\n if (input[31] > 1e-35) {\n if (input[3] > 3.3497501700808394) {\n var89 = -0.019342018507399077;\n } else {\n var89 = 0.04336755184633714;\n }\n } else {\n if (input[52] > 1e-35) {\n var89 = -0.034601279556920723;\n } else {\n if (input[53] > 1e-35) {\n var89 = -0.04570921257037347;\n } else {\n if (input[4] > 2.4414009612931857) {\n if (input[22] > 1e-35) {\n var89 = -0.009909029766665835;\n } else {\n if (input[88] > 1e-35) {\n var89 = -0.13759996623650647;\n } else {\n var89 = 0.0010774168904012999;\n }\n }\n } else {\n if (input[90] > 1e-35) {\n var89 = -0.09942790916464699;\n } else {\n if (input[5] > 8.17933999189099) {\n var89 = -0.006237804261380787;\n } else {\n if (input[154] > 1e-35) {\n var89 = -0.02869365685254793;\n } else {\n if (input[41] > 1e-35) {\n var89 = -0.11951308633255478;\n } else {\n var89 = 0.0005720279396045617;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n var89 = -0.05091927304878396;\n }\n }\n }\n }\n }\n }\n }\n let var90: number;\n if (input[2] > 8.18910569469239) {\n var90 = -0.011281718118735835;\n } else {\n if (input[2] > 8.136957041085973) {\n var90 = 0.007639929297282146;\n } else {\n if (input[2] > 6.178980383851587) {\n var90 = -0.006867711027875817;\n } else {\n if (input[6] > 4.5379471377116305) {\n if (input[125] > 1e-35) {\n if (input[3] > 1e-35) {\n var90 = -0.026657037414316055;\n } else {\n var90 = 0.03822052894720058;\n }\n } else {\n if (input[89] > 1e-35) {\n var90 = 0.01442240494610187;\n } else {\n var90 = 0.0005482931472826037;\n }\n }\n } else {\n if (input[3] > 2.970085626360216) {\n if (input[8] > 1e-35) {\n var90 = -0.04157937378268839;\n } else {\n if (input[25] > 1e-35) {\n var90 = -0.07438346384769444;\n } else {\n var90 = -0.007688780027797844;\n }\n }\n } else {\n if (input[113] > 1e-35) {\n if (input[24] > 1e-35) {\n var90 = 0.10208422768618285;\n } else {\n var90 = -0.0025376848550412623;\n }\n } else {\n if (input[24] > 1e-35) {\n if (input[209] > 1e-35) {\n if (input[7] > 0.9738681190948303) {\n var90 = -0.18081467351794253;\n } else {\n var90 = 0.06403272706376394;\n }\n } else {\n var90 = -0.006045919721112658;\n }\n } else {\n if (input[100] > 1e-35) {\n if (input[3] > 1.4978661367769956) {\n var90 = -0.034372452343283254;\n } else {\n if (input[3] > 1.2424533248940002) {\n var90 = 0.10087241747333926;\n } else {\n var90 = -0.06270133551905664;\n }\n }\n } else {\n if (input[12] > 1e-35) {\n if (input[209] > 1e-35) {\n var90 = 0.02872327658284419;\n } else {\n var90 = -0.012940407270969699;\n }\n } else {\n if (input[5] > 3.276966702012906) {\n if (input[8] > 1e-35) {\n var90 = -0.02165149142042258;\n } else {\n if (input[3] > 2.249904835165133) {\n var90 = 0.011522668417532612;\n } else {\n var90 = -0.005129494488342788;\n }\n }\n } else {\n if (input[3] > 2.3502401828962087) {\n if (input[2] > 3.1132683346437333) {\n var90 = 0.018894357520732635;\n } else {\n var90 = -0.03443967069634786;\n }\n } else {\n if (input[19] > 1e-35) {\n if (input[0] > 1e-35) {\n var90 = 0.0868126244943877;\n } else {\n if (input[2] > 1.4978661367769956) {\n if (input[194] > 1e-35) {\n var90 = -0.16834554324370338;\n } else {\n var90 = 0.08799302490518951;\n }\n } else {\n var90 = 0.007907573815540844;\n }\n }\n } else {\n if (input[17] > 1e-35) {\n var90 = -0.07843101628051594;\n } else {\n var90 = 0.04322926522720053;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var91: number;\n if (input[7] > 0.987306237235768) {\n if (input[8] > 1e-35) {\n if (input[5] > 6.285066127789834) {\n var91 = 0.00006536595256810364;\n } else {\n if (input[153] > 1e-35) {\n var91 = -0.07687008855803332;\n } else {\n var91 = -0.015088524832702519;\n }\n }\n } else {\n if (input[18] > 1e-35) {\n var91 = -0.012556097563484098;\n } else {\n if (input[217] > 1e-35) {\n if (input[5] > 8.28387302567733) {\n var91 = -0.004574660978375117;\n } else {\n var91 = 0.02566519458840368;\n }\n } else {\n var91 = 0.003837771337656032;\n }\n }\n }\n } else {\n if (input[28] > 1e-35) {\n if (input[194] > 1e-35) {\n if (input[29] > 1e-35) {\n if (input[5] > 3.979637980058199) {\n var91 = 0.04675774128546983;\n } else {\n var91 = -0.16922871147253024;\n }\n } else {\n if (input[5] > 5.821564412917691) {\n var91 = 0.017788548280824237;\n } else {\n var91 = 0.101599048954043;\n }\n }\n } else {\n if (input[5] > 4.424828703319957) {\n var91 = 0.009470487487627452;\n } else {\n var91 = -0.046977132290520585;\n }\n }\n } else {\n if (input[95] > 1e-35) {\n var91 = 0.008579165333164537;\n } else {\n if (input[204] > 1e-35) {\n if (input[7] > 0.9782662069407232) {\n if (input[9] > 1e-35) {\n var91 = 0.0717824359443052;\n } else {\n var91 = 0.01776258010455891;\n }\n } else {\n var91 = 0.003970948558978321;\n }\n } else {\n if (input[208] > 1e-35) {\n if (input[1] > 1e-35) {\n var91 = 0.012428835257375037;\n } else {\n if (input[18] > 1e-35) {\n var91 = -0.08152843296689005;\n } else {\n var91 = -0.0059907248803252305;\n }\n }\n } else {\n if (input[109] > 1e-35) {\n var91 = 0.008117980905290326;\n } else {\n if (input[89] > 1e-35) {\n if (input[1] > 1e-35) {\n var91 = -0.08097766993639294;\n } else {\n var91 = 0.014258345453663996;\n }\n } else {\n if (input[62] > 1e-35) {\n var91 = 0.025185598552042956;\n } else {\n if (input[213] > 1e-35) {\n var91 = 0.01261362855232781;\n } else {\n if (input[138] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[29] > 1e-35) {\n var91 = 0.004355449069502461;\n } else {\n var91 = -0.03327693117307522;\n }\n } else {\n if (input[29] > 1e-35) {\n var91 = -0.024228224306581475;\n } else {\n if (input[5] > 5.244385543610066) {\n var91 = 0.01690188327986934;\n } else {\n var91 = -0.02426164440751183;\n }\n }\n }\n } else {\n var91 = -0.0016932467092565535;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var92: number;\n if (input[116] > 1e-35) {\n var92 = -0.018106356667092538;\n } else {\n if (input[24] > 1e-35) {\n if (input[113] > 1e-35) {\n if (input[5] > 4.658699722134796) {\n var92 = -0.0289267666661116;\n } else {\n var92 = 0.10225466717059267;\n }\n } else {\n if (input[5] > 3.979637980058199) {\n var92 = 0.007715497036238576;\n } else {\n if (input[209] > 1e-35) {\n var92 = -0.1596622066794057;\n } else {\n var92 = -0.02153459011172981;\n }\n }\n }\n } else {\n if (input[46] > 1e-35) {\n if (input[18] > 1e-35) {\n var92 = 0.044010040060630896;\n } else {\n var92 = -0.018791912393741998;\n }\n } else {\n if (input[39] > 1e-35) {\n var92 = -0.008648992983623099;\n } else {\n if (input[3] > 4.993822430271426) {\n var92 = -0.01442291433054286;\n } else {\n if (input[158] > 1e-35) {\n var92 = 0.023944934429097977;\n } else {\n if (input[21] > 1e-35) {\n var92 = -0.008731676115726167;\n } else {\n if (input[51] > 1e-35) {\n if (input[18] > 1e-35) {\n var92 = 0.07015276907667169;\n } else {\n var92 = -0.03981801316250594;\n }\n } else {\n if (input[152] > 1e-35) {\n if (input[12] > 1e-35) {\n if (input[7] > 0.9811887196001154) {\n var92 = 0.025342984951627335;\n } else {\n if (input[56] > 1e-35) {\n var92 = -0.039652717595259894;\n } else {\n var92 = -0.003499774006708361;\n }\n }\n } else {\n if (input[4] > 3.676220550121792) {\n var92 = 0.026612369959601385;\n } else {\n if (input[0] > 1e-35) {\n if (input[2] > 2.012675845367575) {\n var92 = 0.012259156005894655;\n } else {\n var92 = 0.04466570041636591;\n }\n } else {\n var92 = 0.002369030228609974;\n }\n }\n }\n } else {\n if (input[50] > 1e-35) {\n var92 = -0.02625338435100237;\n } else {\n if (input[198] > 1e-35) {\n if (input[5] > 3.156774023138548) {\n if (input[4] > 2.602003343538398) {\n var92 = 0.004706524615587467;\n } else {\n var92 = 0.03172381727140614;\n }\n } else {\n var92 = -0.08877100979833137;\n }\n } else {\n if (input[19] > 1e-35) {\n if (input[156] > 1e-35) {\n var92 = 0.047690620764284854;\n } else {\n var92 = 0.004980692597287184;\n }\n } else {\n if (input[188] > 1e-35) {\n var92 = -0.10330323519600788;\n } else {\n if (input[108] > 1e-35) {\n var92 = 0.006389080836282864;\n } else {\n if (input[217] > 1e-35) {\n var92 = 0.0034861135133741716;\n } else {\n var92 = -0.0005184951270632008;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var93: number;\n if (input[150] > 1e-35) {\n var93 = -0.03083355660591381;\n } else {\n if (input[6] > 8.681774988134558) {\n if (input[0] > 1e-35) {\n var93 = 0.0032708551521722813;\n } else {\n if (input[3] > 2.970085626360216) {\n var93 = -0.0008773771112515323;\n } else {\n var93 = -0.008194765714031488;\n }\n }\n } else {\n if (input[1] > 1e-35) {\n if (input[42] > 1e-35) {\n var93 = -0.0544661644610188;\n } else {\n if (input[114] > 1e-35) {\n var93 = 0.014743200719322279;\n } else {\n if (input[25] > 1e-35) {\n var93 = -0.03415156332118204;\n } else {\n if (input[121] > 1e-35) {\n if (input[0] > 1e-35) {\n var93 = -0.012241568524042012;\n } else {\n var93 = -0.08332027167107449;\n }\n } else {\n if (input[119] > 1e-35) {\n var93 = 0.02487058944439717;\n } else {\n if (input[210] > 1e-35) {\n if (input[4] > 2.602003343538398) {\n var93 = 0.003409540133128587;\n } else {\n if (input[7] > 0.985694415330804) {\n var93 = 0.014360134818665793;\n } else {\n var93 = -0.029939754177999198;\n }\n }\n } else {\n if (input[140] > 1e-35) {\n if (input[30] > 1e-35) {\n var93 = -0.07017324311241228;\n } else {\n var93 = -0.00954038893956995;\n }\n } else {\n if (input[32] > 1e-35) {\n var93 = -0.0321895511220355;\n } else {\n var93 = 0.0018389054792352236;\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[3] > 0.8958797346140276) {\n if (input[138] > 1e-35) {\n var93 = 0.014210083256713822;\n } else {\n if (input[3] > 2.970085626360216) {\n if (input[56] > 1e-35) {\n var93 = 0.03179391063657913;\n } else {\n if (input[132] > 1e-35) {\n var93 = 0.044860161753142676;\n } else {\n if (input[122] > 1e-35) {\n var93 = 0.056053352587009365;\n } else {\n if (input[44] > 1e-35) {\n var93 = 0.011126140459263092;\n } else {\n if (input[217] > 1e-35) {\n var93 = 0.015177735064648389;\n } else {\n if (input[30] > 1e-35) {\n var93 = 0.00292550151642784;\n } else {\n if (input[0] > 1e-35) {\n var93 = -0.01370614277688821;\n } else {\n var93 = -0.00467240699644943;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[30] > 1e-35) {\n if (input[17] > 1e-35) {\n var93 = 0.06455607454604466;\n } else {\n var93 = -0.018525791968354337;\n }\n } else {\n if (input[127] > 1e-35) {\n var93 = 0.058525937257934674;\n } else {\n var93 = 0.004550050432870272;\n }\n }\n }\n }\n } else {\n var93 = -0.024273015893662056;\n }\n }\n }\n }\n let var94: number;\n if (input[57] > 1e-35) {\n var94 = -0.03433295479723807;\n } else {\n if (input[35] > 1e-35) {\n var94 = -0.039185287251387806;\n } else {\n if (input[2] > 8.18910569469239) {\n var94 = -0.01005594457537474;\n } else {\n if (input[2] > 8.136957041085973) {\n var94 = 0.006899889609485921;\n } else {\n if (input[2] > 5.6542404955442525) {\n if (input[156] > 1e-35) {\n var94 = -0.021428903659715646;\n } else {\n var94 = -0.003794036359277691;\n }\n } else {\n if (input[6] > 4.3882378946731615) {\n if (input[125] > 1e-35) {\n var94 = -0.012625422706971806;\n } else {\n if (input[0] > 1e-35) {\n if (input[2] > 0.8958797346140276) {\n if (input[32] > 1e-35) {\n var94 = 0.024078606665492636;\n } else {\n if (input[6] > 6.9309832857755405) {\n if (input[2] > 2.012675845367575) {\n var94 = 0.00015676395930232578;\n } else {\n var94 = 0.008324926956588046;\n }\n } else {\n var94 = -0.0031526636810443134;\n }\n }\n } else {\n if (input[156] > 1e-35) {\n var94 = 0.053603289446623514;\n } else {\n if (input[6] > 5.912149824839399) {\n var94 = 0.022861200347258755;\n } else {\n if (input[128] > 1e-35) {\n if (input[9] > 1e-35) {\n var94 = -0.44322676747225076;\n } else {\n var94 = -0.07989645752877887;\n }\n } else {\n var94 = 0.005736631305989689;\n }\n }\n }\n }\n } else {\n if (input[6] > 9.286096980078398) {\n var94 = -0.005302861539231229;\n } else {\n if (input[133] > 1e-35) {\n var94 = -0.011410750972764748;\n } else {\n if (input[2] > 1e-35) {\n if (input[139] > 1e-35) {\n var94 = -0.01695599188677891;\n } else {\n if (input[12] > 1e-35) {\n if (input[129] > 1e-35) {\n var94 = -0.029257180272820173;\n } else {\n if (input[106] > 1e-35) {\n var94 = 0.03593102425808264;\n } else {\n if (input[59] > 1e-35) {\n var94 = 0.03336711951593411;\n } else {\n if (input[114] > 1e-35) {\n var94 = 0.021293721644930708;\n } else {\n var94 = 0.0031644417228525465;\n }\n }\n }\n }\n } else {\n if (input[140] > 1e-35) {\n if (input[2] > 2.802901033147999) {\n var94 = 0.005338088459754211;\n } else {\n var94 = -0.018863893195455395;\n }\n } else {\n if (input[59] > 1e-35) {\n if (input[20] > 1e-35) {\n var94 = -0.2145461556048109;\n } else {\n var94 = -0.013833058686928565;\n }\n } else {\n var94 = 0.0010745795613665528;\n }\n }\n }\n }\n } else {\n var94 = -0.003974960846380726;\n }\n }\n }\n }\n }\n } else {\n var94 = -0.004018386137909663;\n }\n }\n }\n }\n }\n }\n let var95: number;\n if (input[55] > 1e-35) {\n var95 = -0.038436881673730244;\n } else {\n if (input[49] > 1e-35) {\n if (input[1] > 1e-35) {\n var95 = 0.013340924551504776;\n } else {\n var95 = -0.04038081752369706;\n }\n } else {\n if (input[135] > 1e-35) {\n if (input[17] > 1e-35) {\n var95 = 0.02160784630817418;\n } else {\n if (input[6] > 4.722943345003718) {\n if (input[2] > 3.9981586158983733) {\n var95 = -0.012347824466576033;\n } else {\n var95 = -0.000545766507983511;\n }\n } else {\n if (input[4] > 3.0201273556387074) {\n if (input[2] > 1e-35) {\n var95 = -0.0252070573488502;\n } else {\n var95 = -0.13173630032620282;\n }\n } else {\n var95 = 0.009893647988200364;\n }\n }\n }\n } else {\n if (input[6] > 1e-35) {\n if (input[73] > 1e-35) {\n var95 = -0.05384174968342247;\n } else {\n if (input[52] > 1e-35) {\n if (input[1] > 1e-35) {\n var95 = 0.02326718288961822;\n } else {\n var95 = -0.04799167043714381;\n }\n } else {\n if (input[7] > 0.8453853180651066) {\n if (input[4] > 3.481121732133104) {\n if (input[12] > 1e-35) {\n if (input[59] > 1e-35) {\n var95 = 0.061286381265316374;\n } else {\n if (input[3] > 3.481121732133104) {\n var95 = 0.005424469650470853;\n } else {\n if (input[6] > 4.310776603370241) {\n var95 = 0.014609485744972962;\n } else {\n var95 = 0.06126754321077295;\n }\n }\n }\n } else {\n if (input[156] > 1e-35) {\n if (input[2] > 8.898092196194755) {\n var95 = -0.2427431056579565;\n } else {\n var95 = 0.018014774163852717;\n }\n } else {\n var95 = 0.0018695162213364096;\n }\n }\n } else {\n if (input[61] > 1e-35) {\n var95 = -0.07802947082997094;\n } else {\n if (input[45] > 1e-35) {\n var95 = -0.024426413301391545;\n } else {\n if (input[140] > 1e-35) {\n if (input[4] > 0.8958797346140276) {\n var95 = -0.021126260874271455;\n } else {\n if (input[6] > 4.03420147928485) {\n var95 = -0.08415757514826445;\n } else {\n if (input[3] > 1e-35) {\n var95 = 0.10708927158160722;\n } else {\n var95 = -0.24178647896179492;\n }\n }\n }\n } else {\n var95 = 0.0008522369825914582;\n }\n }\n }\n }\n } else {\n if (input[218] > 1e-35) {\n var95 = 0.02373187641553724;\n } else {\n if (input[57] > 1e-35) {\n var95 = -0.04729470896114382;\n } else {\n if (input[6] > 4.135134555718313) {\n var95 = -0.00014270136560779048;\n } else {\n var95 = -0.007024429214918294;\n }\n }\n }\n }\n }\n }\n } else {\n var95 = -0.08338039048086893;\n }\n }\n }\n }\n let var96: number;\n if (input[72] > 1e-35) {\n var96 = 0.056415744834310104;\n } else {\n if (input[102] > 1e-35) {\n var96 = 0.010312560108512227;\n } else {\n if (input[109] > 1e-35) {\n var96 = 0.007457767681676636;\n } else {\n if (input[208] > 1e-35) {\n if (input[4] > 3.0677824455408698) {\n if (input[18] > 1e-35) {\n var96 = -0.06595581480202953;\n } else {\n var96 = 0.0010087955639505731;\n }\n } else {\n var96 = 0.010976237400105874;\n }\n } else {\n if (input[4] > 2.4414009612931857) {\n if (input[123] > 1e-35) {\n if (input[2] > 4.5900436644025815) {\n var96 = -0.05474288807524913;\n } else {\n var96 = -0.010369052951168002;\n }\n } else {\n if (input[47] > 1e-35) {\n if (input[18] > 1e-35) {\n var96 = 0.06670108938458437;\n } else {\n if (input[20] > 1e-35) {\n var96 = 0.08555144132474565;\n } else {\n var96 = -0.021968528557862133;\n }\n }\n } else {\n if (input[48] > 1e-35) {\n if (input[18] > 1e-35) {\n var96 = 0.06392608504748652;\n } else {\n var96 = -0.02321056177872842;\n }\n } else {\n if (input[54] > 1e-35) {\n var96 = -0.03592967725793262;\n } else {\n if (input[6] > 5.519456907163478) {\n var96 = 0.0008682946366782881;\n } else {\n if (input[133] > 1e-35) {\n var96 = -0.029370515479889298;\n } else {\n if (input[4] > 3.0201273556387074) {\n var96 = -0.004567764283497172;\n } else {\n if (input[12] > 1e-35) {\n var96 = -0.008355751724201374;\n } else {\n if (input[113] > 1e-35) {\n var96 = 0.04158028065835193;\n } else {\n var96 = 0.005544170962219649;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[141] > 1e-35) {\n var96 = -0.01706283616408152;\n } else {\n if (input[186] > 1e-35) {\n var96 = -0.08075713781164345;\n } else {\n if (input[196] > 1e-35) {\n if (input[4] > 2.012675845367575) {\n var96 = -0.004591551989937031;\n } else {\n if (input[4] > 0.8958797346140276) {\n if (input[18] > 1e-35) {\n var96 = -0.1239344826496822;\n } else {\n var96 = 0.026355647530608275;\n }\n } else {\n var96 = -0.07955511774996737;\n }\n }\n } else {\n if (input[41] > 1e-35) {\n var96 = -0.10181506412232362;\n } else {\n if (input[42] > 1e-35) {\n var96 = -0.0453542732395041;\n } else {\n if (input[116] > 1e-35) {\n var96 = -0.040407946567398226;\n } else {\n if (input[158] > 1e-35) {\n var96 = 0.027239009428531448;\n } else {\n var96 = -0.002118967070037752;\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n let var97: number;\n if (input[174] > 1e-35) {\n var97 = -0.02339144841300339;\n } else {\n if (input[173] > 1e-35) {\n var97 = -0.02466576607302462;\n } else {\n if (input[60] > 1e-35) {\n var97 = -0.014400177078045;\n } else {\n if (input[187] > 1e-35) {\n var97 = -0.009580909976967153;\n } else {\n if (input[6] > 8.681774988134558) {\n var97 = -0.0018832004566674773;\n } else {\n if (input[1] > 1e-35) {\n if (input[42] > 1e-35) {\n if (input[10] > 1e-35) {\n var97 = -0.13287881120130746;\n } else {\n var97 = -0.03759084751116859;\n }\n } else {\n if (input[25] > 1e-35) {\n var97 = -0.029737667621816583;\n } else {\n if (input[119] > 1e-35) {\n var97 = 0.022639692376110337;\n } else {\n if (input[98] > 1e-35) {\n var97 = 0.014991063146855506;\n } else {\n if (input[195] > 1e-35) {\n if (input[6] > 3.417592293073651) {\n var97 = 0.008961268500787772;\n } else {\n var97 = -0.023240187732927162;\n }\n } else {\n if (input[61] > 1e-35) {\n if (input[7] > 0.428769371249852) {\n var97 = -0.08413653233956772;\n } else {\n var97 = 0.0010489731231787087;\n }\n } else {\n if (input[140] > 1e-35) {\n if (input[3] > 0.8958797346140276) {\n if (input[5] > 4.855921334140645) {\n if (input[44] > 1e-35) {\n var97 = -0.009299863216357543;\n } else {\n var97 = -0.0613782065666655;\n }\n } else {\n var97 = -0.06705655672927394;\n }\n } else {\n if (input[5] > 3.772694874805912) {\n var97 = 0.0008635593500817348;\n } else {\n var97 = 0.08361268069705163;\n }\n }\n } else {\n var97 = 0.001087642897550713;\n }\n }\n }\n }\n }\n }\n }\n } else {\n if (input[98] > 1e-35) {\n var97 = -0.021712258264119783;\n } else {\n if (input[3] > 0.8958797346140276) {\n if (input[105] > 1e-35) {\n var97 = -0.039681509263849626;\n } else {\n if (input[195] > 1e-35) {\n if (input[18] > 1e-35) {\n var97 = -0.07079074829049314;\n } else {\n var97 = -0.008109353986158243;\n }\n } else {\n if (input[210] > 1e-35) {\n if (input[18] > 1e-35) {\n var97 = -0.10610285355896108;\n } else {\n var97 = -0.009292320249100847;\n }\n } else {\n if (input[157] > 1e-35) {\n var97 = 0.03507595269407085;\n } else {\n if (input[97] > 1e-35) {\n var97 = 0.0249669535461336;\n } else {\n if (input[48] > 1e-35) {\n var97 = -0.027595291123779366;\n } else {\n var97 = 0.0011643902717306173;\n }\n }\n }\n }\n }\n }\n } else {\n var97 = -0.0211420439263067;\n }\n }\n }\n }\n }\n }\n }\n }\n let var98: number;\n if (input[138] > 1e-35) {\n if (input[1] > 1e-35) {\n if (input[42] > 1e-35) {\n if (input[3] > 3.5114340430413216) {\n var98 = -0.022448598781455772;\n } else {\n var98 = -0.07031164685918086;\n }\n } else {\n if (input[2] > 1e-35) {\n if (input[2] > 2.740319461670996) {\n var98 = 0.00894455632762117;\n } else {\n var98 = -0.003454709734759444;\n }\n } else {\n if (input[0] > 1e-35) {\n var98 = 0.060858110677215166;\n } else {\n var98 = -0.03435493609374257;\n }\n }\n }\n } else {\n if (input[3] > 2.602003343538398) {\n if (input[2] > 0.8958797346140276) {\n var98 = 0.0168978378983998;\n } else {\n var98 = -0.009237748165804088;\n }\n } else {\n var98 = -0.016931758267026403;\n }\n }\n } else {\n if (input[3] > 4.424828703319957) {\n var98 = -0.005659352703826067;\n } else {\n if (input[24] > 1e-35) {\n if (input[113] > 1e-35) {\n if (input[6] > 4.460127707454046) {\n var98 = -0.023722482692479133;\n } else {\n var98 = 0.10064484300766507;\n }\n } else {\n if (input[6] > 4.03420147928485) {\n var98 = 0.007526717802235146;\n } else {\n if (input[209] > 1e-35) {\n if (input[4] > 2.970085626360216) {\n var98 = 0.11711852031495243;\n } else {\n var98 = -0.15067622815741855;\n }\n } else {\n var98 = -0.011085192149895408;\n }\n }\n }\n } else {\n if (input[108] > 1e-35) {\n var98 = 0.0059255171206349135;\n } else {\n if (input[19] > 1e-35) {\n if (input[156] > 1e-35) {\n var98 = 0.04454460743043898;\n } else {\n if (input[37] > 1e-35) {\n var98 = -0.14161163738926447;\n } else {\n if (input[4] > 1.4978661367769956) {\n if (input[4] > 1.7005986908310777) {\n if (input[217] > 1e-35) {\n var98 = -0.020705364221039385;\n } else {\n var98 = 0.006460529078997639;\n }\n } else {\n if (input[0] > 1e-35) {\n if (input[98] > 1e-35) {\n var98 = 0.10347448218504114;\n } else {\n var98 = -0.04090123141769794;\n }\n } else {\n if (input[6] > 5.636572136251498) {\n var98 = -0.001212671493834005;\n } else {\n if (input[2] > 1.8688348091416842) {\n var98 = -0.15821279618670178;\n } else {\n var98 = -0.03563734739460456;\n }\n }\n }\n }\n } else {\n var98 = 0.027924859655082585;\n }\n }\n }\n } else {\n if (input[57] > 1e-35) {\n var98 = -0.03743904649648422;\n } else {\n if (input[35] > 1e-35) {\n var98 = -0.0414066369468363;\n } else {\n if (input[46] > 1e-35) {\n var98 = -0.011240341460759123;\n } else {\n var98 = -0.0003091959047563666;\n }\n }\n }\n }\n }\n }\n }\n }\n let var99: number;\n if (input[14] > 1e-35) {\n if (input[5] > 7.841296344941067) {\n if (input[141] > 1e-35) {\n var99 = -0.04382809259971909;\n } else {\n if (input[217] > 1e-35) {\n if (input[4] > 3.417592293073651) {\n var99 = -0.05008164665262682;\n } else {\n var99 = 0.0007032387608254502;\n }\n } else {\n if (input[190] > 1e-35) {\n var99 = -0.19371592847895003;\n } else {\n var99 = 0.0017489801221668277;\n }\n }\n }\n } else {\n if (input[129] > 1e-35) {\n var99 = -0.24591656603456258;\n } else {\n var99 = 0.011026730387591234;\n }\n }\n } else {\n if (input[72] > 1e-35) {\n var99 = 0.05658163433406649;\n } else {\n if (input[90] > 1e-35) {\n if (input[4] > 3.5114340430413216) {\n var99 = 0.017141361021852975;\n } else {\n if (input[28] > 1e-35) {\n var99 = 0.07243997319099477;\n } else {\n var99 = -0.08677988948169385;\n }\n }\n } else {\n if (input[138] > 1e-35) {\n var99 = 0.0038201430289573884;\n } else {\n if (input[23] > 1e-35) {\n if (input[4] > 2.917405368531303) {\n var99 = 0.014990462643385919;\n } else {\n var99 = -0.013592080985068531;\n }\n } else {\n if (input[217] > 1e-35) {\n if (input[4] > 1.8688348091416842) {\n var99 = 0.0022421195021632245;\n } else {\n if (input[4] > 1.2424533248940002) {\n var99 = 0.03891295508085918;\n } else {\n if (input[4] > 0.8958797346140276) {\n var99 = -0.08902318396862074;\n } else {\n var99 = 0.02476911275463073;\n }\n }\n }\n } else {\n if (input[2] > 3.1132683346437333) {\n if (input[29] > 1e-35) {\n if (input[19] > 1e-35) {\n var99 = 0.023731839695418987;\n } else {\n if (input[5] > 7.366761104104307) {\n if (input[4] > 3.417592293073651) {\n if (input[6] > 6.633975895571033) {\n if (input[8] > 1e-35) {\n var99 = 0.016171629088047517;\n } else {\n if (input[134] > 1e-35) {\n var99 = 0.03196373735768742;\n } else {\n var99 = -0.006820341969572339;\n }\n }\n } else {\n var99 = -0.02712238491085242;\n }\n } else {\n var99 = -0.016309188486296804;\n }\n } else {\n var99 = -0.0019386576944297078;\n }\n }\n } else {\n if (input[156] > 1e-35) {\n var99 = -0.03079416196682616;\n } else {\n if (input[123] > 1e-35) {\n var99 = -0.020888866054988395;\n } else {\n if (input[4] > 3.238486181444842) {\n var99 = -0.0027078359220281674;\n } else {\n if (input[141] > 1e-35) {\n var99 = -0.029581214969996845;\n } else {\n var99 = 0.002299670778244013;\n }\n }\n }\n }\n }\n } else {\n var99 = 0.0001804027795430786;\n }\n }\n }\n }\n }\n }\n }\n const var100: number = sigmoid(\n var0 +\n var1 +\n var2 +\n var3 +\n var4 +\n var5 +\n var6 +\n var7 +\n var8 +\n var9 +\n var10 +\n var11 +\n var12 +\n var13 +\n var14 +\n var15 +\n var16 +\n var17 +\n var18 +\n var19 +\n var20 +\n var21 +\n var22 +\n var23 +\n var24 +\n var25 +\n var26 +\n var27 +\n var28 +\n var29 +\n var30 +\n var31 +\n var32 +\n var33 +\n var34 +\n var35 +\n var36 +\n var37 +\n var38 +\n var39 +\n var40 +\n var41 +\n var42 +\n var43 +\n var44 +\n var45 +\n var46 +\n var47 +\n var48 +\n var49 +\n var50 +\n var51 +\n var52 +\n var53 +\n var54 +\n var55 +\n var56 +\n var57 +\n var58 +\n var59 +\n var60 +\n var61 +\n var62 +\n var63 +\n var64 +\n var65 +\n var66 +\n var67 +\n var68 +\n var69 +\n var70 +\n var71 +\n var72 +\n var73 +\n var74 +\n var75 +\n var76 +\n var77 +\n var78 +\n var79 +\n var80 +\n var81 +\n var82 +\n var83 +\n var84 +\n var85 +\n var86 +\n var87 +\n var88 +\n var89 +\n var90 +\n var91 +\n var92 +\n var93 +\n var94 +\n var95 +\n var96 +\n var97 +\n var98 +\n var99\n );\n return [1.0 - var100, var100];\n}\nfunction sigmoid(x: number): number {\n if (x < 0.0) {\n const z: number = Math.exp(x);\n return z / (1.0 + z);\n }\n return 1.0 / (1.0 + Math.exp(-x));\n}\n","import {v4} from 'uuid';\nimport {URI} from 'vscode-uri';\nimport {Context} from '../context';\nimport {TelemetryData} from '../telemetry';\nimport {IPosition, IRange, ITextDocument, LocationFactory} from '../textDocument';\nimport {CompletionResult, ResultType} from './ghostText';\nimport {ITextEditorOptions, normalizeIndentCharacter} from './normalizeIndent';\n\nexport interface CopilotCompletion {\n uuid: string;\n text: string;\n range: IRange;\n file: URI;\n telemetry: TelemetryData;\n displayText: string;\n position: IPosition;\n offset: number;\n index: number;\n resultType: ResultType;\n}\n\nexport function completionsFromGhostTextResults(\n ctx: Context,\n completionResults: CompletionResult[],\n resultType: ResultType,\n document: ITextDocument,\n position: IPosition,\n textEditorOptions?: ITextEditorOptions,\n lastShownCompletionIndex?: number\n): CopilotCompletion[] {\n const locationFactory = ctx.get(LocationFactory);\n const currentLine = document.lineAt(position);\n let completions = completionResults.map(result => {\n let range;\n let text = '';\n if (textEditorOptions) {\n result.completion = normalizeIndentCharacter(\n textEditorOptions,\n result.completion,\n currentLine.isEmptyOrWhitespace\n );\n }\n if (result.completion.displayNeedsWsOffset && currentLine.isEmptyOrWhitespace) {\n // Deindenting case\n range = locationFactory.range(locationFactory.position(position.line, 0), position);\n text = result.completion.completionText;\n } else if (currentLine.isEmptyOrWhitespace && result.completion.completionText.startsWith(currentLine.text)) {\n //If we're at the empty line include leading whitespaces in completion and define range from start of the line\n //This enables stable behavior or deleting whitespaces\n range = locationFactory.range(locationFactory.position(position.line, 0), position);\n text = result.completion.completionText;\n } else {\n //Try to extend the suggestion range and text with current word, to reduce jitter while deleting/backspacing\n const wordRange = document.getWordRangeAtPosition(position);\n if (result.isMiddleOfTheLine) {\n //For middle-of-the-line suggestions we want to replace whole line with the completion\n const line = document.lineAt(position);\n const rangeFromStart = locationFactory.range(locationFactory.position(position.line, 0), position);\n const textBefore = document.getText(rangeFromStart);\n //If middle-of-the-line suggestion contains rest of the line as suffix include it in the range of the suggestion\n range = result.coversSuffix ? line.range : rangeFromStart;\n text = textBefore + result.completion.displayText;\n } else if (wordRange) {\n const word = document.getText(wordRange);\n range = locationFactory.range(wordRange.start, position);\n text = word + result.completion.completionText;\n } else {\n const rangeFromStart = locationFactory.range(locationFactory.position(position.line, 0), position);\n const textBefore = document.getText(rangeFromStart);\n range = rangeFromStart;\n text = textBefore + result.completion.displayText;\n }\n }\n\n const completion: CopilotCompletion = {\n uuid: v4(),\n text,\n range,\n file: document.uri,\n index: result.completion.completionIndex,\n telemetry: result.telemetry,\n displayText: result.completion.displayText,\n position,\n offset: document.offsetAt(position),\n resultType,\n };\n return completion;\n });\n //If we are in typing as suggested flow, we want to put the last displayed completion at the top of the list to keep it selected\n if (resultType === ResultType.TypingAsSuggested && lastShownCompletionIndex !== undefined) {\n const lastShownCompletion = completions.find(predicate => predicate.index === lastShownCompletionIndex);\n if (lastShownCompletion) {\n const restCompletions = completions.filter(predicate => predicate.index !== lastShownCompletionIndex);\n completions = [lastShownCompletion, ...restCompletions];\n }\n }\n return completions;\n}\n","import {Context} from '../context';\nimport {Features} from '../experiments/features';\nimport {TelemetryData} from '../telemetry';\n\nexport async function getDebounceLimit(ctx: Context, telemetryData: TelemetryData): Promise {\n // Middle of the road debounce based on the inlineDebounceMs experiment\n const baseDebounce = 75;\n\n let expDebounce: number;\n const debouncePredict = await ctx.get(Features).debouncePredict();\n if (debouncePredict && telemetryData.measurements['contextualFilterScore']) {\n // exp has debouncePredict set, and we have a valid score available to compute expDebounce.\n const acceptProbability = telemetryData.measurements['contextualFilterScore'];\n const sigmoidMin = 25;\n const sigmoidRange = 250;\n const sigmoidShift = 0.3475;\n const sigmoidSlope = 7;\n expDebounce = sigmoidMin + sigmoidRange / (1 + Math.pow(acceptProbability / sigmoidShift, sigmoidSlope));\n } else {\n expDebounce = await ctx.get(Features).debounceMs();\n }\n\n return expDebounce > 0 ? expDebounce : baseDebounce;\n}\n","import {isSupportedLanguageId} from '@github/copilot-promptlib';\nimport {SHA256} from 'crypto-js';\nimport * as uuid from 'uuid';\nimport {keyForPrompt} from '../common/cache';\nimport {ICancellationToken} from '../common/cancellation';\nimport {Debouncer} from '../common/debounce';\nimport {asyncIterableFromArray, asyncIterableMapFilter} from '../common/iterableHelpers';\nimport {\n BlockMode,\n BlockModeConfig,\n ConfigKey,\n getConfig,\n shouldDoParsingTrimming,\n shouldDoServerTrimming,\n} from '../config';\nimport {Context} from '../context';\nimport {UserErrorNotifier} from '../error/userErrorNotifier';\nimport {Features, FeaturesFilterArgs} from '../experiments/features';\nimport {HybridInference, RoutingModel} from '../hybridInference/hybridInference';\nimport {Language, LanguageDetection} from '../language/languageDetection';\nimport {LogLevel, Logger} from '../logger';\nimport {isAbortError} from '../networking';\nimport {getEngineURL} from '../openai/config';\nimport {CopilotUiKind, FinishedCallback, OpenAIFetcher, PostOptions, extractEngineName} from '../openai/fetch';\nimport {APIChoice, getTemperatureForSamples} from '../openai/openai';\nimport {StatusReporter} from '../progress';\nimport {ContextIndentation, contextIndentation, isBlockBodyFinished, isEmptyBlockStart} from '../prompt/parseBlock';\nimport {Prompt, PromptResponsePresent, extractPrompt, trimLastLine} from '../prompt/prompt';\nimport {\n ComputationStatus,\n MaybeRepoInfo,\n extractRepoInfoInBackground,\n getDogFood,\n getUserKind,\n tryGetGitHubNWO,\n} from '../prompt/repository';\nimport {ghostTextScoreConfidence, ghostTextScoreQuantile} from '../suggestions/restraint';\nimport {checkSuffix, postProcessChoice} from '../suggestions/suggestions';\nimport {TelemetryData, telemetrizePromptLength, telemetry} from '../telemetry';\nimport {isRunningInTest, shouldFailForDebugPurposes} from '../testing/runtimeMode';\nimport {IPosition, ITextDocument, LocationFactory} from '../textDocument';\nimport {CompletionCacheContents, CompletionsCache} from './completionsCache';\nimport {contextualFilterScore} from './contextualFilter';\nimport {getDebounceLimit} from './debounce';\nimport {GhostTextResultWithTelemetry, mkBasicResultTelemetry, mkCanceledResultTelemetry} from './telemetry';\n\nexport const ghostTextLogger = new Logger(LogLevel.INFO, 'ghostText');\n\nexport interface GhostCompletion {\n completionIndex: number;\n completionText: string;\n displayText: string;\n displayNeedsWsOffset: boolean;\n}\n\nexport interface CompletionResult {\n completion: GhostCompletion;\n telemetry: TelemetryData;\n isMiddleOfTheLine: boolean;\n coversSuffix: boolean;\n}\n\nexport enum ResultType {\n Network,\n Cache,\n TypingAsSuggested,\n Cycling,\n GptC,\n}\n\n// TODO:(hponde) this state is so that continuing to type will reuse results. It should be\n// more like a trie or a prefix tree instead. But works fine since it mitigates when the user\n// is typing a log in one file\nlet lastPrefix: string | undefined = undefined;\nlet lastSuffix: string | undefined = undefined;\nlet lastPromptHash: string | undefined = undefined;\n\nasync function genericGetCompletionsFromNetwork(\n ctx: Context,\n requestContext: RequestContext,\n baseTelemetryData: TelemetryData,\n cancellationToken: ICancellationToken | undefined,\n finishedCb: FinishedCallback,\n what: string,\n processChoices: (\n numGhostCompletions: number,\n requestStart: number,\n processingTime: number,\n choicesStream: AsyncIterable\n ) => Promise>\n): Promise> {\n ghostTextLogger.debug(ctx, `Getting ${what} from network`);\n\n // copy the base telemetry data\n baseTelemetryData = baseTelemetryData.extendedBy();\n\n const numGhostCompletions = await getNumGhostCompletions(ctx, requestContext);\n const temperature = getTemperatureForSamples(ctx, numGhostCompletions);\n\n const postOptions: PostOptions = {\n stream: true,\n n: numGhostCompletions,\n temperature: temperature,\n extra: {\n language: requestContext.languageId,\n next_indent: requestContext.indentation.next ?? 0,\n trim_by_indentation: shouldDoServerTrimming(requestContext.blockMode),\n prompt_tokens: requestContext.prompt.prefixTokens ?? 0,\n suffix_tokens: requestContext.prompt.suffixTokens ?? 0,\n },\n };\n if (!requestContext.multiline) {\n // If we are not in multiline mode, we get the server to truncate the results. This does mean that we\n // also cache a single line result which will be reused even if we are later in multiline mode. This is\n // an acceptable trade-off as the transition should be relatively rare and truncating on the server is\n // more efficient.\n // Note that this also means we don't need to truncate when creating the GhostAPIChoice object below.\n postOptions['stop'] = ['\\n'];\n }\n\n if (requestContext.multiline && requestContext.multiLogitBias) {\n postOptions['logit_bias'] = {'50256': -100};\n }\n\n const requestStart = Date.now();\n\n // extend telemetry data\n const newProperties: {[key: string]: string} = {\n endpoint: 'completions',\n uiKind: CopilotUiKind.GhostText,\n isCycling: JSON.stringify(requestContext.isCycling),\n temperature: JSON.stringify(temperature),\n n: JSON.stringify(numGhostCompletions),\n stop: JSON.stringify(postOptions['stop']) ?? 'unset',\n logit_bias: JSON.stringify(postOptions['logit_bias'] ?? null),\n };\n\n const newMeasurements: {[key: string]: number} = telemetrizePromptLength(requestContext.prompt);\n\n Object.assign(baseTelemetryData.properties, newProperties);\n Object.assign(baseTelemetryData.measurements, newMeasurements);\n\n try {\n const completionParams = {\n prompt: requestContext.prompt,\n languageId: requestContext.languageId,\n repoInfo: requestContext.repoInfo,\n ourRequestId: requestContext.ourRequestId,\n engineUrl: requestContext.engineURL,\n count: numGhostCompletions,\n uiKind: CopilotUiKind.GhostText,\n postOptions,\n };\n if (requestContext.delayMs > 0) {\n await new Promise(resolve => setTimeout(resolve, requestContext.delayMs));\n }\n const res = await ctx\n .get(OpenAIFetcher)\n .fetchAndStreamCompletions(ctx, completionParams, baseTelemetryData, finishedCb, cancellationToken);\n if (res.type === 'failed') {\n return {\n type: 'failed',\n reason: res.reason,\n telemetryData: mkBasicResultTelemetry(baseTelemetryData),\n };\n }\n\n if (res.type === 'canceled') {\n ghostTextLogger.debug(ctx, 'Cancelled after awaiting fetchCompletions');\n return {\n type: 'canceled',\n reason: res.reason,\n telemetryData: mkCanceledResultTelemetry(baseTelemetryData),\n };\n }\n\n return processChoices(numGhostCompletions, requestStart, res.getProcessingTime(), res.choices);\n } catch (err: any) {\n // If we cancelled a network request, we don't want to log an error\n if (isAbortError(err)) {\n return {\n type: 'canceled',\n reason: 'network request aborted',\n telemetryData: mkCanceledResultTelemetry(baseTelemetryData, {\n cancelledNetworkRequest: true,\n }),\n };\n } else {\n ghostTextLogger.exception(ctx, err, `Error on ghost text request`);\n ctx.get(UserErrorNotifier).notifyUser(ctx, err);\n if (shouldFailForDebugPurposes(ctx)) {\n throw err;\n }\n // not including err in this result because it'll end up in standard telemetry\n return {\n type: 'failed',\n reason: 'non-abort error on ghost text request',\n telemetryData: mkBasicResultTelemetry(baseTelemetryData),\n };\n }\n }\n}\n\n/** Requests new completion from OpenAI, should be called if and only if the completions for given prompt were not cached before.\n * It returns only first completion, additional completions are added to the caches in the background.\n * Copies from the base telemetry data are used as the basis for each choice's telemetry.\n */\nasync function getCompletionsFromNetwork(\n ctx: Context,\n requestContext: RequestContext,\n baseTelemetryData: TelemetryData,\n cancellationToken: ICancellationToken | undefined,\n finishedCb: FinishedCallback\n): Promise> {\n return genericGetCompletionsFromNetwork(\n ctx,\n requestContext,\n baseTelemetryData,\n cancellationToken,\n finishedCb,\n 'completions',\n async (\n numGhostCompletions,\n requestStart,\n processingTime,\n choicesStream\n ): Promise> => {\n const choicesIterator = choicesStream[Symbol.asyncIterator]();\n\n const firstRes = await choicesIterator.next();\n\n if (firstRes.done) {\n ghostTextLogger.debug(ctx, 'All choices redacted');\n return {\n type: 'empty',\n reason: 'all choices redacted',\n telemetryData: mkBasicResultTelemetry(baseTelemetryData),\n };\n }\n if (cancellationToken?.isCancellationRequested) {\n ghostTextLogger.debug(ctx, 'Cancelled after awaiting redactedChoices iterator');\n return {\n type: 'canceled',\n reason: 'after awaiting redactedChoices iterator',\n telemetryData: mkCanceledResultTelemetry(baseTelemetryData),\n };\n }\n\n const firstChoice: APIChoice = firstRes.value;\n\n if (firstChoice === undefined) {\n // This is probably unreachable given the firstRes.done check above\n ghostTextLogger.debug(ctx, 'Got undefined choice from redactedChoices iterator');\n return {\n type: 'empty',\n reason: 'got undefined choice from redactedChoices iterator',\n telemetryData: mkBasicResultTelemetry(baseTelemetryData),\n };\n }\n\n telemetryPerformance(ctx, 'performance', firstChoice, requestStart, processingTime);\n\n const remainingChoices = numGhostCompletions - 1;\n\n ghostTextLogger.debug(ctx, `Awaited first result, id: ${firstChoice.choiceIndex}`);\n // Adds first result to cache\n addToCache(ctx, requestContext, {multiline: requestContext.multiline, choices: [firstChoice]});\n\n const remainingPromise = [];\n for (let index = 0; index < remainingChoices; index++) {\n remainingPromise.push(choicesIterator.next());\n }\n\n //Create promise for all other results, don't `await` it (unless in test mode) but handle asynchronously with `.then()`\n const cacheDone = Promise.all(remainingPromise).then(async results => {\n if (await ctx.get(Features).fastCancellation()) {\n // Finish up the async iterator so that it closes the network connection.\n choicesIterator.next();\n }\n ghostTextLogger.debug(ctx, `Awaited remaining results, number of results: ${results.length}`);\n const apiChoices = [];\n for (const innerChoice of results) {\n const redactedChoice = innerChoice.value;\n if (redactedChoice === undefined) {\n continue;\n }\n ghostTextLogger.info(ctx, `GhostText later completion: [${redactedChoice.completionText}]`);\n // NOTE: If the completion has multiple new lines or whitespace at the end, we want to trim that.\n if (redactedChoice.completionText.trimEnd()) {\n // Collect only unique displayTexts\n if (\n apiChoices.findIndex(\n v => v.completionText.trim() === redactedChoice.completionText.trim()\n ) !== -1\n ) {\n continue;\n }\n // Collect only different than first choice\n if (redactedChoice.completionText.trim() === firstChoice.completionText.trim()) {\n continue;\n }\n apiChoices.push(redactedChoice);\n }\n }\n //Append results to current completions cache, and network cache\n if (apiChoices.length > 0) {\n appendToCache(ctx, requestContext, {multiline: requestContext.multiline, choices: apiChoices});\n }\n });\n if (isRunningInTest(ctx)) {\n await cacheDone;\n }\n // Because we ask the server to stop at \\n above, we don't need to force single line here\n return {\n type: 'success',\n value: makeGhostAPIChoice(firstRes.value, {forceSingleLine: false}),\n telemetryData: mkBasicResultTelemetry(baseTelemetryData),\n telemetryBlob: baseTelemetryData,\n };\n }\n );\n}\n\n/** Requests new completion from OpenAI, should be called if and only if we are in the servers-side termination mode, and it's follow-up cycling request\n * It returns all requested completions\n * Copies from the base telemetry data are used as the basis for each choice's telemetry.\n */\nasync function getAllCompletionsFromNetwork(\n ctx: Context,\n requestContext: RequestContext,\n baseTelemetryData: TelemetryData,\n cancellationToken: ICancellationToken | undefined,\n finishedCb: FinishedCallback\n): Promise> {\n return genericGetCompletionsFromNetwork(\n ctx,\n requestContext,\n baseTelemetryData,\n cancellationToken,\n finishedCb,\n 'all completions',\n async (\n numGhostCompletions,\n requestStart,\n processingTime,\n choicesStream\n ): Promise> => {\n const apiChoices: APIChoice[] = [];\n for await (const choice of choicesStream) {\n if (cancellationToken?.isCancellationRequested) {\n ghostTextLogger.debug(ctx, 'Cancelled after awaiting choices iterator');\n return {\n type: 'canceled',\n reason: 'after awaiting choices iterator',\n telemetryData: mkCanceledResultTelemetry(baseTelemetryData),\n };\n }\n if (choice.completionText.trimEnd()) {\n // Collect only unique displayTexts\n if (apiChoices.findIndex(v => v.completionText.trim() === choice.completionText.trim()) !== -1) {\n continue;\n }\n apiChoices.push(choice);\n }\n }\n //Append results to current completions cache, and network cache\n if (apiChoices.length > 0) {\n appendToCache(ctx, requestContext, {multiline: requestContext.multiline, choices: apiChoices});\n\n telemetryPerformance(ctx, 'cyclingPerformance', apiChoices[0], requestStart, processingTime);\n }\n return {\n type: 'success',\n value: apiChoices,\n telemetryData: mkBasicResultTelemetry(baseTelemetryData),\n telemetryBlob: baseTelemetryData,\n };\n }\n );\n}\n\nfunction makeGhostAPIChoice(choice: APIChoice, options: {forceSingleLine: boolean}): APIChoice {\n const ghostChoice = {...choice} as APIChoice;\n ghostChoice.completionText = choice.completionText.trimEnd();\n if (options.forceSingleLine) {\n ghostChoice.completionText = ghostChoice.completionText.split('\\n')[0];\n }\n return ghostChoice;\n}\n\n/**\n * This returns the number of completions that should be requested. If only a\n * single completion is returned, the user can initiate a cycling (follow-up)\n * request manually afterwards, which will try to fetch additional completions.\n */\nasync function getNumGhostCompletions(ctx: Context, requestContext: RequestContext): Promise {\n const override = await ctx.get(Features).overrideNumGhostCompletions();\n if (override) {\n // We want to return a total of at least 3 completions between the\n // original request and the cycling request.\n return requestContext.isCycling ? Math.max(0, 3 - override) : override;\n }\n // For tree-sitter languages, if we are requesting multi-line completions,\n // always request 3 (configurable via advanced setting).\n if (shouldDoParsingTrimming(requestContext.blockMode) && requestContext.multiline) {\n return getConfig(ctx, ConfigKey.InlineSuggestCount);\n }\n // Otherwise, 1 for the first request, 2 for the cycling request.\n if (requestContext.isCycling) {\n return 2;\n } else {\n return 1;\n }\n}\n\ntype GhostTextStrategy = {\n blockMode: BlockMode;\n requestMultiline: boolean;\n isCyclingRequest: boolean;\n finishedCb: FinishedCallback;\n};\n\nasync function getGhostTextStrategy(\n ctx: Context,\n document: ITextDocument,\n position: IPosition,\n prompt: PromptResponsePresent,\n isCycling: boolean,\n inlineSuggestion: boolean,\n preIssuedTelemetryData: TelemetryData,\n requestMultilineExploration: boolean\n): Promise {\n const blockMode = await ctx.get(BlockModeConfig).forLanguage(ctx, document.languageId);\n switch (blockMode) {\n case BlockMode.Server:\n return {\n blockMode: BlockMode.Server,\n requestMultiline: true,\n isCyclingRequest: isCycling,\n finishedCb: async text => undefined,\n };\n case BlockMode.Parsing:\n case BlockMode.ParsingAndServer:\n default: {\n // we shouldn't drop through to here, but in case we do, be explicit about the behaviour\n const requestMultiline = await shouldRequestMultiline(\n ctx,\n document,\n position,\n inlineSuggestion,\n preIssuedTelemetryData,\n requestMultilineExploration\n );\n if (requestMultiline) {\n return {\n blockMode: blockMode,\n requestMultiline: true,\n isCyclingRequest: false, // In multiline mode, we always get the full number of completions up front\n finishedCb: async (text: string) => {\n // Note that `trailingWs` contains *any* trailing whitespace from the prompt, but the prompt itself\n // is only trimmed if the entire last line is whitespace. We have to account for that here when we\n // check whether the block body is finished.\n //\n // TODO(Issue #1681): Clean up this behavior\n let adjustedPosition;\n if (prompt.trailingWs.length > 0 && !prompt.prompt.prefix.endsWith(prompt.trailingWs)) {\n // Prompt was adjusted, so adjust the position to match\n adjustedPosition = ctx\n .get(LocationFactory)\n .position(position.line, Math.max(position.character - prompt.trailingWs.length, 0));\n } else {\n // Otherwise, just use the original position\n adjustedPosition = position;\n }\n return isBlockBodyFinished(ctx, document, adjustedPosition, text);\n },\n };\n }\n // not multiline\n return {\n blockMode: blockMode,\n requestMultiline: false,\n isCyclingRequest: isCycling,\n finishedCb: async text => undefined,\n };\n }\n }\n}\n\n// Note that it's important to construct this at global scope as the debouncer has some state.\nconst ghostTextDebouncer = new Debouncer();\n\nexport async function getGhostText(\n ctx: Context,\n document: ITextDocument,\n position: IPosition,\n isCycling: boolean,\n preIssuedTelemetryData: TelemetryData,\n cancellationToken?: ICancellationToken\n): Promise> {\n const prompt = await extractPrompt(ctx, document, position);\n if (prompt.type === 'copilotNotAvailable') {\n ghostTextLogger.debug(ctx, 'Copilot not available, due to the .copilotignore settings');\n return {type: 'abortedBeforeIssued', reason: 'Copilot not available due to the .copilotignore settings'};\n }\n if (prompt.type === 'contextTooShort') {\n ghostTextLogger.debug(ctx, 'Breaking, not enough context');\n return {type: 'abortedBeforeIssued', reason: 'Not enough context'};\n }\n\n if (cancellationToken?.isCancellationRequested) {\n ghostTextLogger.info(ctx, 'Cancelled after extractPrompt');\n return {type: 'abortedBeforeIssued', reason: 'Cancelled after extractPrompt'};\n }\n\n const inlineSuggestion = isInlineSuggestion(document, position);\n if (inlineSuggestion === undefined) {\n ghostTextLogger.debug(ctx, 'Breaking, invalid middle of the line');\n return {type: 'abortedBeforeIssued', reason: 'Invalid middle of the line'};\n }\n\n const statusBarItem = ctx.get(StatusReporter);\n const locationFactory = ctx.get(LocationFactory);\n\n // Compute the request context (including which engine to use) already here\n // Pro: Know (+ telemetrize) which engine we would have used even if we don't need to make a request\n // Con: Unnecessary work if we have a cached result -- but then the work should be small anyways (already extracted the repo, already asked TAS)\n const repoInfo = extractRepoInfoInBackground(ctx, document.fileName);\n const repoNwo = tryGetGitHubNWO(repoInfo) ?? '';\n const dogFood = getDogFood(repoInfo);\n const userKind = await getUserKind(ctx);\n\n const featuresFilterArgs: FeaturesFilterArgs = {repoNwo, userKind, dogFood, fileType: document.languageId};\n\n const requestMultilineExploration = await ctx.get(Features).requestMultilineExploration(featuresFilterArgs);\n let ghostTextStrategy = await getGhostTextStrategy(\n ctx,\n document,\n position,\n prompt,\n isCycling,\n inlineSuggestion,\n preIssuedTelemetryData,\n requestMultilineExploration\n );\n\n if (cancellationToken?.isCancellationRequested) {\n ghostTextLogger.info(ctx, 'Cancelled after requestMultiline');\n return {type: 'abortedBeforeIssued', reason: 'Cancelled after requestMultiline'};\n }\n const [prefix] = trimLastLine(document.getText(locationFactory.range(locationFactory.position(0, 0), position)));\n\n let choices = getLocalInlineSuggestion(ctx, prefix, prompt.prompt, ghostTextStrategy.requestMultiline);\n\n const ourRequestId = uuid.v4();\n\n const engineURL = await getEngineURL(\n ctx,\n tryGetGitHubNWO(repoInfo),\n document.languageId,\n dogFood,\n userKind,\n preIssuedTelemetryData\n );\n const delayMs = await ctx.get(Features).beforeRequestWaitMs(featuresFilterArgs);\n const multiLogitBias = await ctx.get(Features).multiLogitBias(featuresFilterArgs);\n let requestContext: RequestContext = {\n blockMode: ghostTextStrategy.blockMode,\n languageId: document.languageId,\n repoInfo: repoInfo,\n engineURL: engineURL,\n ourRequestId,\n prefix,\n prompt: prompt.prompt,\n multiline: ghostTextStrategy.requestMultiline,\n indentation: contextIndentation(document, position),\n isCycling,\n delayMs,\n multiLogitBias,\n };\n\n const debouncePredict = await ctx.get(Features).debouncePredict();\n const contextualFilterEnable = await ctx.get(Features).contextualFilterEnable();\n const contextualFilterAcceptThreshold = await ctx.get(Features).contextualFilterAcceptThreshold();\n const contextualFilterEnableTree = await ctx.get(Features).contextualFilterEnableTree();\n const contextualFilterExplorationTraffic = await ctx.get(Features).contextualFilterExplorationTraffic();\n let computeContextualFilterScore = false;\n if (debouncePredict || contextualFilterEnable) {\n computeContextualFilterScore = true;\n }\n const detectedLanguage = await ctx.get(LanguageDetection).detectLanguage(document);\n\n const hybridInference = ctx.get(HybridInference);\n await hybridInference.initialize(featuresFilterArgs);\n const routingModel = await hybridInference.route(document, prompt.prompt, featuresFilterArgs);\n\n const oldRequestContext = {...requestContext};\n const oldGhostTextStrategy = {...ghostTextStrategy};\n if (routingModel === RoutingModel.GPTC) {\n requestContext.engineURL = 'gpt-c';\n requestContext.isCycling = false;\n requestContext.multiline = false;\n ghostTextStrategy.isCyclingRequest = false;\n }\n\n // this will be used as basis for the choice telemetry data\n const telemetryData = telemetryIssued(\n ctx,\n document,\n detectedLanguage,\n requestContext,\n position,\n prompt,\n preIssuedTelemetryData,\n computeContextualFilterScore,\n contextualFilterEnableTree\n );\n\n const isLocalEnough =\n (ghostTextStrategy.isCyclingRequest && (choices?.[0].length ?? 0) > 1) ||\n (!ghostTextStrategy.isCyclingRequest && choices !== undefined);\n if (isLocalEnough) {\n ghostTextLogger.info(ctx, 'Found inline suggestions locally');\n } else {\n // No local choices, go to network\n statusBarItem?.setProgress();\n if (ghostTextStrategy.isCyclingRequest) {\n const networkChoices = await getAllCompletionsFromNetwork(\n ctx,\n requestContext,\n telemetryData,\n cancellationToken,\n ghostTextStrategy.finishedCb\n );\n\n // TODO: if we already had some choices cached from the initial non-cycling request,\n // and then the cycling request returns no results for some reason, we need to still\n // return the original choices to the editor to avoid the ghost text disappearing completely.\n // However this should be telemetrised according to the result of the cycling request itself,\n // i.e. failure/empty (or maybe canceled).\n //\n // Right now this is awkward to orchestrate in the code and we don't handle it, incorrectly\n // returning `ghostText.produced` instead. Cycling is a manual action and hence uncommon,\n // so this shouldn't cause much inaccuracy, but we still should fix this.\n if (networkChoices.type === 'success') {\n const resultChoices = choices?.[0] ?? [];\n networkChoices.value.forEach(c => {\n // Collect only unique displayTexts\n if (resultChoices.findIndex(v => v.completionText.trim() === c.completionText.trim()) !== -1) {\n return;\n }\n resultChoices.push(c);\n });\n choices = [resultChoices, ResultType.Cycling];\n } else {\n if (choices === undefined) {\n statusBarItem?.removeProgress();\n return networkChoices;\n }\n }\n } else {\n const debounceLimit = await getDebounceLimit(ctx, telemetryData);\n try {\n await ghostTextDebouncer.debounce(debounceLimit);\n } catch {\n // we got cancelled by the debouncer: don't return anything\n // also don't remove progress, because the call that cancelled us will have set it\n // and now \"owns\" removing it.\n return {\n type: 'canceled',\n reason: 'by debouncer',\n telemetryData: mkCanceledResultTelemetry(telemetryData),\n };\n }\n if (cancellationToken?.isCancellationRequested) {\n ghostTextLogger.info(ctx, 'Cancelled during debounce');\n return {\n type: 'canceled',\n reason: 'during debounce',\n telemetryData: mkCanceledResultTelemetry(telemetryData),\n };\n }\n\n if (contextualFilterEnable && telemetryData.measurements['contextualFilterScore']) {\n // contextual filter is enabled, and we have a valid score [0,1] available to make a decision.\n // we are going to explore over contextualFilterExplorationTraffic% of traffic below contextualFilterAcceptThreshold.\n if (\n telemetryData.measurements['contextualFilterScore'] < contextualFilterAcceptThreshold / 100 &&\n Math.random() < 1 - contextualFilterExplorationTraffic / 100\n ) {\n ghostTextLogger.info(ctx, 'Cancelled by contextual filter');\n return {\n type: 'canceled',\n reason: 'contextualFilterScore below threshold',\n telemetryData: mkCanceledResultTelemetry(telemetryData),\n };\n }\n }\n\n // Hybrid inference: Ask GPT-C if the earlier hybridInference.route() call said so.\n if (routingModel === RoutingModel.GPTC) {\n const [completionResult, requestId] = await hybridInference.getGhostText(\n document,\n prompt.prompt,\n ourRequestId,\n telemetryData,\n featuresFilterArgs\n );\n\n if (completionResult.type !== 'success') {\n statusBarItem?.removeProgress();\n return completionResult;\n } else if (completionResult.value.length) {\n // Process the completion only if it's not empty, otherwise, fall back to an AOAI request.\n const ghostCompletion = adjustLeadingWhitespace(0, completionResult.value, prompt.trailingWs);\n\n const result: CompletionResult = {\n completion: ghostCompletion,\n telemetry: completionResult.telemetryBlob,\n isMiddleOfTheLine: false,\n coversSuffix: false,\n };\n\n statusBarItem?.removeProgress();\n\n // Add suggestion to existing network cache\n const gptcSuggestionToCache: APIChoice = {\n choiceIndex: 0,\n completionText: result.completion.completionText,\n requestId: requestId!,\n telemetryData: result.telemetry,\n // Placeholder values.\n tokens: [],\n meanAlternativeLogProb: undefined,\n meanLogProb: undefined,\n modelInfo: undefined,\n numTokens: 0,\n blockFinished: false,\n };\n addToCache(ctx, requestContext, {\n multiline: oldRequestContext.multiline, // Store the same multiline flag as the original request\n choices: [gptcSuggestionToCache],\n });\n\n return {\n type: 'success',\n value: [[result], ResultType.GptC],\n telemetryData: completionResult.telemetryData,\n telemetryBlob: completionResult.telemetryBlob,\n };\n } else {\n requestContext = {...oldRequestContext};\n ghostTextStrategy = {...oldGhostTextStrategy};\n telemetryData.measurements = {\n ...telemetryData.measurements,\n ...completionResult.telemetryBlob.measurements,\n };\n telemetryData.properties['gptcFallback'] = JSON.stringify(true);\n }\n }\n\n const c = await getCompletionsFromNetwork(\n ctx,\n requestContext,\n telemetryData,\n cancellationToken,\n ghostTextStrategy.finishedCb\n );\n\n if (c.type !== 'success') {\n statusBarItem?.removeProgress();\n return c;\n }\n choices = [[c.value], ResultType.Network];\n }\n statusBarItem?.removeProgress();\n }\n if (choices === undefined) {\n return {\n type: 'failed',\n reason: 'internal error: choices should be defined after network call',\n telemetryData: mkBasicResultTelemetry(telemetryData),\n };\n }\n const [choicesArray, resultType] = choices;\n\n const postProcessedChoices: AsyncIterable = asyncIterableMapFilter(\n asyncIterableFromArray(choicesArray),\n async (choice: APIChoice) =>\n postProcessChoice(ctx, 'ghostText', document, position, choice, inlineSuggestion, ghostTextLogger)\n );\n\n const results: CompletionResult[] = [];\n for await (const choice of postProcessedChoices) {\n const hasSuffix = inlineSuggestion && checkSuffix(document, position, choice);\n\n if (cancellationToken?.isCancellationRequested) {\n ghostTextLogger.info(ctx, 'Cancelled after post processing completions');\n return {\n type: 'canceled',\n reason: 'after post processing completions',\n telemetryData: mkCanceledResultTelemetry(telemetryData),\n };\n }\n\n // Do this to get a new object for each choice\n const choiceTelemetryData = telemetryWithAddData(ctx, choice);\n\n // We want to use `newTrailingWs` as the trailing whitespace\n const ghostCompletion = adjustLeadingWhitespace(choice.choiceIndex, choice.completionText, prompt.trailingWs);\n const res = {\n completion: ghostCompletion,\n telemetry: choiceTelemetryData,\n isMiddleOfTheLine: inlineSuggestion,\n coversSuffix: hasSuffix,\n };\n results.push(res);\n }\n\n return {\n type: 'success',\n value: [results, resultType],\n telemetryData: mkBasicResultTelemetry(telemetryData),\n telemetryBlob: telemetryData,\n };\n}\n\n/**\n * Attempt to get InlineSuggestion locally, in one of two ways:\n * 1. If the user is typing the letters already displayed as inline suggestion.\n * 2. If we have a previously cached inline suggestion for this prompt and requestMultiline.\n */\nfunction getLocalInlineSuggestion(\n ctx: Context,\n prefix: string,\n prompt: Prompt,\n requestMultiline: boolean\n): [APIChoice[], ResultType] | undefined {\n const choicesTyping = getCompletionsForUserTyping(ctx, prefix, prompt, requestMultiline);\n if (choicesTyping && choicesTyping.length > 0) {\n return [choicesTyping, ResultType.TypingAsSuggested];\n }\n\n const choicesCache = getCompletionsFromCache(ctx, prefix, prompt, requestMultiline);\n if (choicesCache && choicesCache.length > 0) {\n return [choicesCache, ResultType.Cache];\n }\n\n return undefined;\n}\n\n/** Info for requesting and caching completions. */\ninterface RequestContext {\n /** How block trimming should be done. */\n blockMode: BlockMode;\n /** The language of the file. */\n languageId: string;\n /** Information about the repository the file is in, if available. */\n repoInfo: MaybeRepoInfo;\n /** The engine used for the request. */\n engineURL: string;\n /** A request id we choose in the hope that the model will use it in responses */\n ourRequestId: string;\n /** The text content up to the cursor. */\n prefix: string;\n /** The prompt to send to the model. */\n prompt: Prompt;\n /** Whether this request should be able to generate multiple lines. */\n multiline: boolean;\n /** Indentation (tabs or spaces) on/before and after the cursor. */\n indentation: ContextIndentation;\n /** Follow up request happening when user requested cycling */\n isCycling: boolean;\n /** Delay before making the request */\n delayMs: number;\n /** Include a logit_bias suppression parameter for EOT tokens if multiline */\n multiLogitBias: boolean;\n}\n\n/** Checks if the position is valid inline suggestion position. Returns `undefined` if it's position where ghost text shouldn't be displayed */\nfunction isInlineSuggestion(document: ITextDocument, position: IPosition) {\n //Checks if we're in the position for the middle of the line suggestion\n const isMiddleOfLine = isMiddleOfTheLine(position, document);\n const isValidMiddleOfLine = isValidMiddleOfTheLinePosition(position, document);\n\n if (isMiddleOfLine && !isValidMiddleOfLine) {\n return;\n }\n\n const isInlineSuggestion = isMiddleOfLine && isValidMiddleOfLine;\n return isInlineSuggestion;\n}\n\n/** Checks if position is NOT at the end of the line */\nfunction isMiddleOfTheLine(selectionPosition: IPosition, doc: ITextDocument): boolean {\n // must be end of line or trailing whitespace\n const line = doc.lineAt(selectionPosition);\n if (line.text.substr(selectionPosition.character).trim().length != 0) {\n return true;\n }\n\n return false;\n}\n\n/** Checks if position is valid for the middle of the line suggestion */\nfunction isValidMiddleOfTheLinePosition(selectionPosition: IPosition, doc: ITextDocument): boolean {\n const line = doc.lineAt(selectionPosition);\n const endOfLine = line.text.substr(selectionPosition.character).trim();\n return /^\\s*[)}\\]\"'`]*\\s*[:{;,]?\\s*$/.test(endOfLine);\n}\n\n/** Randomly choose between multiline (true) or single line (false) */\nfunction exploreMultilineRandom() {\n return Math.random() > 0.5 ? true : false;\n}\n\nasync function shouldRequestMultiline(\n ctx: Context,\n document: ITextDocument,\n position: IPosition,\n inlineSuggestion: boolean,\n preIssuedTelemetryData: TelemetryData,\n requestMultilineExploration: boolean\n): Promise {\n if (requestMultilineExploration) {\n const isEmptyBlockStartDocumentPosition = await isEmptyBlockStart(document, position);\n const isEmptyBlockStartDocumentPositionRangeEnd = await isEmptyBlockStart(\n document,\n document.lineAt(position).range.end\n );\n\n preIssuedTelemetryData.properties.isEmptyBlockStartDocumentPosition =\n isEmptyBlockStartDocumentPosition.toString();\n preIssuedTelemetryData.properties.isEmptyBlockStartDocumentPositionRangeEnd =\n isEmptyBlockStartDocumentPositionRangeEnd.toString();\n preIssuedTelemetryData.properties.inlineSuggestion = inlineSuggestion.toString();\n preIssuedTelemetryData.measurements.documentLineCount = document.lineCount;\n preIssuedTelemetryData.measurements.positionLine = position.line;\n }\n\n // Parsing long files for multiline completions is slow, so we only do\n // it for files with less than 8000 lines\n // See https://github.com/github/copilot-client/issues/647\n if (document.lineCount >= 8000) {\n telemetry(\n ctx,\n 'ghostText.longFileMultilineSkip',\n TelemetryData.createAndMarkAsIssued({\n languageId: document.languageId,\n lineCount: String(document.lineCount),\n currentLine: String(position.line),\n })\n );\n } else {\n if (!inlineSuggestion && isSupportedLanguageId(document.languageId)) {\n // Can only check block-level nodes of languages we support\n let requestMultiline = await isEmptyBlockStart(document, position);\n\n // Explore if not multiline and EXP exploration flag is set.\n if (!requestMultiline && requestMultilineExploration) {\n requestMultiline = exploreMultilineRandom();\n }\n return requestMultiline;\n } else if (inlineSuggestion && isSupportedLanguageId(document.languageId)) {\n //If we are inline, check if we would suggest multiline for current position or if we would suggest a multiline completion if we were at the end of the line\n\n let requestMultiline =\n (await isEmptyBlockStart(document, position)) ||\n (await isEmptyBlockStart(document, document.lineAt(position).range.end));\n\n // Explore if not multiline and EXP exploration flag is set.\n if (!requestMultiline && requestMultilineExploration) {\n requestMultiline = exploreMultilineRandom();\n }\n return requestMultiline;\n }\n }\n return false;\n}\n\n/** When we find a completion, keep track of the context it was made for\n * so that if the user continues typing, we can reuse the results.\n */\nfunction recordLastSuccessfulCompletionContext(prefix: string, suffix: string, promptHash: string) {\n lastPrefix = prefix;\n lastSuffix = suffix;\n lastPromptHash = promptHash;\n}\n\n/** Add completions to network cache, should be used after successful network call. */\nfunction addToCache(ctx: Context, requestContext: RequestContext, contents: CompletionCacheContents) {\n const promptHash = keyForPrompt(requestContext.prompt);\n recordLastSuccessfulCompletionContext(requestContext.prefix, requestContext.prompt.suffix, promptHash);\n ctx.get(CompletionsCache).set(promptHash, contents);\n ghostTextLogger.debug(\n ctx,\n `Cached ghost text for key: ${promptHash}, multiline: ${contents.multiline}, number of suggestions: ${contents.choices.length}`\n );\n}\n\n/** Appends completions to existing entry in network cache or creates new entry, should be used after successful network call. */\nfunction appendToCache(ctx: Context, requestContext: RequestContext, newContents: CompletionCacheContents) {\n const promptHash = keyForPrompt(requestContext.prompt);\n const existing = ctx.get(CompletionsCache).get(promptHash);\n if (existing && existing.multiline === newContents.multiline) {\n ctx.get(CompletionsCache).set(promptHash, {\n multiline: existing.multiline,\n choices: existing.choices.concat(newContents.choices),\n });\n } else {\n ctx.get(CompletionsCache).set(promptHash, newContents);\n }\n ghostTextLogger.debug(\n ctx,\n `Appended cached ghost text for key: ${promptHash}, multiline: ${newContents.multiline}, number of suggestions: ${newContents.choices.length}`\n );\n}\n\nfunction getCachedChoices(ctx: Context, promptHash: string, multiline: boolean): APIChoice[] | undefined {\n const contents = ctx.get(CompletionsCache).get(promptHash);\n if (!contents) {\n return undefined;\n }\n if (multiline && !contents.multiline) {\n // If we've cached a single-line completion but are now in multiline mode,\n // we want to refetch it.\n // On the other hand if we've cached a multiline completion and are now in single-line mode,\n // it's ok to reuse it.\n return undefined;\n }\n return contents.choices;\n}\n\nfunction adjustLeadingWhitespace(index: number, text: string, ws: string): GhostCompletion {\n if (ws.length > 0) {\n if (text.startsWith(ws)) {\n // Remove common prefix so that it can display in the correct position\n return {\n completionIndex: index,\n completionText: text,\n displayText: text.substr(ws.length),\n displayNeedsWsOffset: false,\n };\n } else {\n // The idea here is that we do want the display to be as close to the final position as possible\n const textLeftWs = text.substr(0, text.length - text.trimLeft().length);\n if (ws.startsWith(textLeftWs)) {\n // NOTE: It's possible that `ws` is a bit too over-indented. Example:\n // def foo(n):\n // if n > 0:\n // print(f\"n is positive: {n}\")\n // [cursor is here after new line]\n //\n // completion: \" else:\"\n return {\n completionIndex: index,\n completionText: text,\n displayText: text.trimLeft(),\n displayNeedsWsOffset: true,\n };\n } else {\n // We don't know any better so just send `text` back\n return {completionIndex: index, completionText: text, displayText: text, displayNeedsWsOffset: false};\n }\n }\n } else {\n // If we do not know leading whitespace or if it is an empty string, just return input text\n return {completionIndex: index, completionText: text, displayText: text, displayNeedsWsOffset: false};\n }\n}\n\n/** Returns completions for *user-is-typing-as-suggested* flow */\nfunction getCompletionsForUserTyping(ctx: Context, prefix: string, prompt: Prompt, multiline: boolean) {\n const prefixMatches = lastPrefix ? prefix.startsWith(lastPrefix) : false;\n const suffixMatches = lastSuffix != undefined ? prompt.suffix == lastSuffix : false;\n if (!lastPrefix || !lastPromptHash || !prefixMatches || !suffixMatches) {\n return undefined;\n }\n\n const lastCachedCompletion = getCachedChoices(ctx, lastPromptHash, multiline);\n if (!lastCachedCompletion) {\n return undefined;\n }\n const remainingPrefix = prefix.substring(lastPrefix.length);\n\n ghostTextLogger.debug(ctx, `Getting completions for user-typing flow - remaining prefix: ${remainingPrefix}`);\n\n const completionsToReturn: APIChoice[] = [];\n lastCachedCompletion.forEach(element => {\n // NOTE: make sure to return a new object\n const completionToReturn = makeGhostAPIChoice(element, {forceSingleLine: false});\n if (completionToReturn.completionText.startsWith(remainingPrefix)) {\n completionToReturn.completionText = completionToReturn.completionText.substring(remainingPrefix.length);\n completionsToReturn.push(completionToReturn);\n }\n });\n return completionsToReturn;\n}\n\n/** Returns all completions from the network cache for given promptHash */\nfunction getCompletionsFromCache(\n ctx: Context,\n prefix: string,\n prompt: Prompt,\n multiline: boolean\n): APIChoice[] | undefined {\n const promptHash = keyForPrompt(prompt);\n ghostTextLogger.debug(ctx, `Trying to get completions from cache for key: ${promptHash}`);\n const cachedChoice = getCachedChoices(ctx, promptHash, multiline);\n if (cachedChoice) {\n ghostTextLogger.debug(ctx, `Got completions from cache for key: ${promptHash}`);\n const completionsToReturn: APIChoice[] = [];\n cachedChoice.forEach(element => {\n // NOTE: make sure to return a new object\n const completionToReturn = makeGhostAPIChoice(element, {forceSingleLine: !multiline});\n completionsToReturn.push(completionToReturn);\n });\n\n const result = completionsToReturn.filter(e => e.completionText);\n if (result.length > 0) {\n recordLastSuccessfulCompletionContext(prefix, prompt.suffix, promptHash);\n }\n return result;\n }\n}\n\n/** Return a copy of the choice's telemetry data with extra information added */\nfunction telemetryWithAddData(ctx: Context, choice: APIChoice): TelemetryData {\n const requestId = choice.requestId;\n const properties: {[key: string]: string} = {\n choiceIndex: choice.choiceIndex.toString(),\n };\n const measurements: {[key: string]: number} = {\n numTokens: choice.numTokens,\n compCharLen: choice.completionText.length,\n numLines: choice.completionText.split('\\n').length,\n };\n // Add assessments\n if (choice.meanLogProb) {\n measurements.meanLogProb = choice.meanLogProb;\n }\n if (choice.meanAlternativeLogProb) {\n measurements.meanAlternativeLogProb = choice.meanAlternativeLogProb;\n }\n\n const extendedTelemetry = choice.telemetryData.extendedBy(properties, measurements);\n extendedTelemetry.extendWithRequestId(requestId);\n // Compute confidence\n extendedTelemetry.measurements.confidence = ghostTextScoreConfidence(ctx, extendedTelemetry);\n extendedTelemetry.measurements.quantile = ghostTextScoreQuantile(ctx, extendedTelemetry);\n ghostTextLogger.debug(\n ctx,\n `Extended telemetry for ${choice.telemetryData.properties.headerRequestId} with retention confidence ${extendedTelemetry.measurements.confidence} (expected as good or better than about ${extendedTelemetry.measurements.quantile} of all suggestions)`\n );\n return extendedTelemetry;\n}\n\n/** Create new telemetry data based on baseTelemetryData and send `ghostText.issued` event */\nfunction telemetryIssued(\n ctx: Context,\n document: ITextDocument,\n detectedLanguage: Language,\n requestContext: RequestContext,\n position: IPosition,\n prompt: PromptResponsePresent,\n baseTelemetryData: TelemetryData,\n computeContextualFilterScore: boolean,\n contextualFilterEnableTree: boolean\n): TelemetryData {\n const locationFactory = ctx.get(LocationFactory);\n const currentLine = document.lineAt(position.line);\n const lineBeforeCursor = document.getText(locationFactory.range(currentLine.range.start, position));\n const restOfLine = document.getText(locationFactory.range(position, currentLine.range.end));\n\n // base ghostText telemetry data\n const properties: {[key: string]: string} = {\n languageId: document.languageId,\n beforeCursorWhitespace: JSON.stringify(lineBeforeCursor.trim() === ''),\n afterCursorWhitespace: JSON.stringify(restOfLine.trim() === ''),\n };\n if (document.languageId !== detectedLanguage.languageId) {\n properties.detectedLanguageId = detectedLanguage.languageId;\n properties.fileExtension = detectedLanguage.fileExtension;\n }\n const measurements: {[key: string]: number} = {\n ...telemetrizePromptLength(prompt.prompt),\n promptEndPos: document.offsetAt(position),\n documentLength: document.getText().length,\n delayMs: requestContext.delayMs,\n };\n const telemetryData = baseTelemetryData.extendedBy(properties, measurements);\n\n // Add background about prompt creation\n telemetryData.properties.promptChoices = JSON.stringify(\n prompt.promptChoices,\n // stringify map -> object\n (key, value) =>\n value instanceof Map ? Array.from(value.entries()).reduce((acc, [k, v]) => ({...acc, [k]: v}), {}) : value\n );\n telemetryData.properties.promptBackground = JSON.stringify(\n prompt.promptBackground,\n // stringify map -> object\n (key, value) => (value instanceof Map ? Array.from(value.values()) : value)\n );\n\n const typeFileHashCode = Array.from(prompt.neighborSource.entries()).map(typeFiles => [\n typeFiles[0],\n typeFiles[1].map(f => SHA256(f).toString()), // file name is sensitive. We just keep SHA256 of the file name.\n ]);\n telemetryData.properties.neighborSource = JSON.stringify(typeFileHashCode);\n telemetryData.measurements.promptComputeTimeMs = prompt.computeTimeMs;\n\n if (computeContextualFilterScore) {\n telemetryData.measurements.contextualFilterScore = contextualFilterScore(\n ctx,\n telemetryData,\n prompt.prompt,\n contextualFilterEnableTree\n );\n }\n\n // Add repository information\n const repoInfo = requestContext.repoInfo;\n telemetryData.properties.gitRepoInformation =\n repoInfo === undefined ? 'unavailable' : repoInfo === ComputationStatus.PENDING ? 'pending' : 'available';\n if (repoInfo !== undefined && repoInfo !== ComputationStatus.PENDING) {\n telemetryData.properties.gitRepoUrl = repoInfo.url;\n telemetryData.properties.gitRepoHost = repoInfo.hostname;\n telemetryData.properties.gitRepoOwner = repoInfo.owner;\n telemetryData.properties.gitRepoName = repoInfo.repo;\n telemetryData.properties.gitRepoPath = repoInfo.pathname;\n }\n telemetryData.properties.engineName = extractEngineName(ctx, requestContext.engineURL);\n\n // Add requestMultiline information\n telemetryData.properties.isMultiline = JSON.stringify(requestContext.multiline);\n telemetryData.properties.blockMode = requestContext.blockMode;\n telemetryData.properties.isCycling = JSON.stringify(requestContext.isCycling);\n telemetryData.properties.headerRequestId = requestContext.ourRequestId;\n\n // telemetrize the issued event\n telemetry(ctx, 'ghostText.issued', telemetryData);\n\n return telemetryData;\n}\n\nfunction telemetryPerformance(\n ctx: Context,\n performanceKind: string,\n choice: APIChoice,\n requestStart: number,\n processingTimeMs: number\n) {\n const requestTimeMs = Date.now() - requestStart;\n const deltaMs = requestTimeMs - processingTimeMs;\n\n const telemetryData = choice.telemetryData.extendedBy(\n {},\n {\n completionCharLen: choice.completionText.length,\n requestTimeMs: requestTimeMs,\n processingTimeMs: processingTimeMs,\n deltaMs: deltaMs,\n // Choice properties\n meanLogProb: choice.meanLogProb || NaN,\n meanAlternativeLogProb: choice.meanAlternativeLogProb || NaN,\n numTokens: choice.numTokens,\n }\n );\n telemetryData.extendWithRequestId(choice.requestId);\n telemetry(ctx, `ghostText.${performanceKind}`, telemetryData);\n}\n","import {GhostCompletion} from './ghostText';\n\nexport interface ITextEditorOptions {\n tabSize?: number | string;\n insertSpaces?: boolean | string;\n}\n\nexport function normalizeIndentCharacter(\n options: ITextEditorOptions,\n completion: GhostCompletion,\n isEmptyLine: boolean\n): GhostCompletion {\n function replace(text: string, toReplace: string, replacer: (numberOfRemovedChars: number) => string): string {\n const regex = new RegExp(`^(${toReplace})+`, 'g');\n\n return text\n .split('\\n')\n .map(line => {\n const trimmed = line.replace(regex, '');\n const removedCharacters = line.length - trimmed.length;\n return replacer(removedCharacters) + trimmed;\n })\n .join('\\n');\n }\n\n //Get the \"size\" of indentation\n let indentSize: number;\n if (options.tabSize === undefined || typeof options.tabSize === 'string') {\n //Undefined or string case never happens when getting the indent size. This case is just for making TS typechecker happy.\n indentSize = 4;\n } else {\n indentSize = options.tabSize;\n }\n\n //If editor indentation is set to tabs\n if (options.insertSpaces === false) {\n const r = (txt: string) =>\n replace(txt, ' ', n => '\\t'.repeat(Math.floor(n / indentSize)) + ' '.repeat(n % indentSize));\n completion.displayText = r(completion.displayText);\n completion.completionText = r(completion.completionText);\n }\n //If editor indentation is set to spaces\n else if (options.insertSpaces === true) {\n const r = (txt: string) => replace(txt, '\\t', n => ' '.repeat(n * indentSize));\n completion.displayText = r(completion.displayText);\n completion.completionText = r(completion.completionText);\n if (isEmptyLine) {\n const re = (txt: string) => {\n const spacesAtStart = txt.length - txt.trimLeft().length;\n const remainder = spacesAtStart % indentSize;\n if (remainder !== 0 && spacesAtStart > 0) {\n const toReplace = ' '.repeat(remainder);\n return replace(txt, toReplace, n => ' '.repeat((Math.floor(n / indentSize) + 1) * indentSize));\n } else return txt;\n };\n\n completion.displayText = re(completion.displayText);\n completion.completionText = re(completion.completionText);\n }\n }\n\n return completion;\n}\n","import {Context} from '../context';\nimport {telemetry, TelemetryData, telemetryRaw} from '../telemetry';\nimport {ContextualFilterManager} from './contextualFilter';\n\n/** Send `.shown` event */\nexport function telemetryShown(\n ctx: Context,\n insertionCategory: string,\n telemetryData: TelemetryData,\n fromCache: boolean\n) {\n telemetryData.markAsDisplayed();\n const eventName = fromCache ? `${insertionCategory}.shownFromCache` : `${insertionCategory}.shown`;\n telemetry(ctx, eventName, telemetryData);\n}\n\n/** Send `.accepted` event */\nexport function telemetryAccepted(ctx: Context, insertionCategory: string, telemetryData: TelemetryData) {\n const telemetryName = insertionCategory + '.accepted';\n\n const cfManager = ctx.get(ContextualFilterManager);\n cfManager.previousLabel = 1; // used to compute yt_1\n cfManager.previousLabelTimestamp = Date.now(); // used to compute dt_1\n\n telemetry(ctx, telemetryName, telemetryData);\n}\n\n/** Send `.rejected` event */\nexport function telemetryRejected(ctx: Context, insertionCategory: string, telemetryData: TelemetryData) {\n const telemetryName = insertionCategory + '.rejected';\n\n const cfManager = ctx.get(ContextualFilterManager);\n cfManager.previousLabel = 0; // used to compute yt_1\n cfManager.previousLabelTimestamp = Date.now(); // used to compute dt_1\n\n telemetry(ctx, telemetryName, telemetryData);\n}\n\n/** Cut down telemetry type for \"result\" telemetry, to avoid too much data load on Azure Monitor.\n *\n */\ntype BasicResultTelemetry = {\n headerRequestId: string;\n copilot_trackingId: string;\n};\n\n/**\n * For `ghostText.canceled` we include all fields for backwards compatibility, as this event had it initially,\n * Note that we now send the event from more places, but it still makes sense to be consistent.\n */\ntype CanceledResultTelemetry = {\n telemetryBlob: TelemetryData;\n cancelledNetworkRequest?: boolean; // omitted is equivalent to false\n};\n\n/**\n * When we request ghost text, we also send a `ghostText.issued` telemetry event. To measure\n * Copilot's overall reliability, we want to make sure we consistently send a matching \"result\" event.\n *\n * This type allows us to keep track of what happened during the pipeline that produces ghost text results,\n * and use the TypeScript type system to reduce the chances of accidentally forgetting to send the result event.\n *\n * At the end of that pipeline, we will either have a final ghost text result and we can send a `ghostText.produced`\n * message, or something will have prevented us producing a result and we can send an alternative mesages.\n */\nexport type GhostTextResultWithTelemetry =\n /**\n * A result was produced successfully. If this is the final ghost text result,\n * we should send the result message `ghostText.produced`.\n */\n | {\n type: 'success';\n value: T;\n telemetryData: BasicResultTelemetry;\n // This is needed to populate the telemetryBlob in `ghostText.canceled` if this happens later.\n telemetryBlob: TelemetryData;\n }\n /**\n * We decided not to request ghost text this time. No `ghostText.issued` message\n * was sent so there is no need send any result telemetry.\n */\n | {type: 'abortedBeforeIssued'; reason: string}\n /**\n * We requested ghost text, but we decided to cancel mid-way, for example because the\n * user kept typing. This will turn into a `ghostText.canceled` result message.\n * Note: this uses the preferred American spelling \"canceled\" rather than \"cancelled\",\n * because the telemetry message has always done that, even though it may be inconsistent\n * with log messages and code comments etc.\n */\n | {type: 'canceled'; reason: string; telemetryData: CanceledResultTelemetry}\n /**\n * We requested ghost text, but didn't come up with any results for some \"expected\"\n * reason, such as slur redaction or snippy. This will turn into a `ghostText.empty`\n * result message.\n */\n | {type: 'empty'; reason: string; telemetryData: BasicResultTelemetry}\n /**\n * We requested ghost text, but didn't come up with any results because something\n * unexpected went wrong. This will turn into a `ghostText.failed` result message.\n */\n | {type: 'failed'; reason: string; telemetryData: BasicResultTelemetry};\n\nexport function mkCanceledResultTelemetry(\n telemetryBlob: TelemetryData,\n extraFlags: {cancelledNetworkRequest?: boolean} = {}\n): CanceledResultTelemetry {\n return {\n ...extraFlags,\n telemetryBlob,\n };\n}\n\nexport function mkBasicResultTelemetry(telemetryBlob: TelemetryData): BasicResultTelemetry {\n return {\n headerRequestId: telemetryBlob.properties['headerRequestId'],\n copilot_trackingId: telemetryBlob.properties['copilot_trackingId'],\n };\n}\n\n/**\n * Given a ghost text result, send the appropriate \"result\" telemetry, if any, and return the\n * result value if one was produced.\n */\nexport async function handleGhostTextResultTelemetry(\n ctx: Context,\n result: GhostTextResultWithTelemetry\n): Promise {\n if (result.type === 'success') {\n telemetryRaw(ctx, 'ghostText.produced', result.telemetryData, {});\n return result.value;\n }\n if (result.type === 'abortedBeforeIssued') {\n // we never sent `ghostText.issued`, so no need to send a result message\n return;\n }\n if (result.type === 'canceled') {\n // For backwards compatibility, we send a \"fat\" telemetry message in this case.\n telemetry(\n ctx,\n `ghostText.canceled`,\n result.telemetryData.telemetryBlob.extendedBy({\n reason: result.reason,\n cancelledNetworkRequest: result.telemetryData.cancelledNetworkRequest ? 'true' : 'false',\n })\n );\n return;\n }\n telemetryRaw(ctx, `ghostText.${result.type}`, {...result.telemetryData, reason: result.reason}, {});\n}\n","import {HeaderContributor, ReqHeaders} from './networking';\n\nexport class HeaderContributors {\n private readonly contributors: HeaderContributor[] = [];\n\n add(contributor: HeaderContributor) {\n this.contributors.push(contributor);\n }\n\n remove(contributor: HeaderContributor) {\n const index = this.contributors.indexOf(contributor);\n\n if (index === -1) {\n return;\n }\n\n this.contributors.splice(index, 1);\n }\n\n contributeHeaders(headers: ReqHeaders) {\n for (const contributor of this.contributors) {\n contributor.contributeHeaderValues(headers);\n }\n }\n\n size() {\n return this.contributors.length;\n }\n}\n","import {randomUUID} from 'crypto';\nimport {Context} from '../context';\nimport {Features, FeaturesFilterArgs} from '../experiments/features';\nimport {GhostTextResultWithTelemetry, mkBasicResultTelemetry} from '../ghostText/telemetry';\nimport {LogLevel, Logger} from '../logger';\nimport {CopilotUiKind, RequestId} from '../openai/openai';\nimport {Prompt} from '../prompt/prompt';\nimport * as telemetry from '../telemetry';\nimport {ITextDocument} from '../textDocument';\nimport {getNoThresholdConfig} from './hybridInferenceConfig';\nimport type {GPTCRouter, GptCModelInference, LanguageId} from './types';\n\n// Mapping between the routing model's reason codes and their string representations, see RoutingReason enum in ./types.d.ts.\nconst HybridInferenceRoutingReason = {\n 0: 'language-unsupported',\n 1: 'too-short',\n 2: 'new-line',\n 3: 'syntax-unsupported',\n 4: 'low-confidence',\n 5: 'high-confidence',\n};\n\ntype GetGhostTextResultType = Extract<\n GhostTextResultWithTelemetry,\n {type: 'success'} | {type: 'abortedBeforeIssued'}\n>;\n\nexport enum RoutingModel {\n BASE = 'base',\n GPTC = 'gpt-c',\n}\n\nexport function registerHybridInference(ctx: Context) {\n ctx.set(HybridInference, new HybridInferenceImpl(ctx));\n}\n\nexport abstract class HybridInference {\n abstract route(\n document: ITextDocument,\n prompt: Prompt,\n featuresFilterArgs: FeaturesFilterArgs\n ): Promise;\n abstract getGhostText(\n document: ITextDocument,\n prompt: Prompt,\n headerRequestId: string,\n telemetryObject: telemetry.TelemetryData,\n featuresFilterArgs: FeaturesFilterArgs\n ): Promise<[GetGhostTextResultType, RequestId | undefined]>;\n abstract initialize(featuresFilterArgs: FeaturesFilterArgs): Promise;\n}\n\nexport class HybridInferenceImpl extends HybridInference {\n private routingModel: GPTCRouter | undefined;\n private inferenceModel: GptCModelInference | undefined;\n\n private isInitialized = false;\n private loadingFailureReason: string | undefined;\n\n private logger: Logger;\n\n static instance: HybridInferenceImpl | undefined;\n\n constructor(private ctx: Context) {\n super();\n this.logger = new Logger(LogLevel.DEBUG, 'hybridInference');\n }\n\n public async initialize(featuresFilterArgs: FeaturesFilterArgs) {\n if (this.isInitialized) {\n return;\n }\n\n this.isInitialized = true;\n\n const {enabled} = await this.isEnabled(featuresFilterArgs);\n if (!enabled) {\n return;\n }\n\n try {\n // Check if there are any issues loading the necessary dependencies.\n this.loadingFailureReason = 'error-loading-onnxruntime';\n require('onnxruntime-node');\n\n this.loadingFailureReason = 'error-loading-routing-model';\n const routingLogic: {GPTCRouter: typeof GPTCRouter} = require('@vsintellicode/routing-logic');\n\n this.loadingFailureReason = 'error-loading-inference-model';\n const completionsWrapper: {\n GptCModelInference: typeof GptCModelInference;\n } = require('@vsintellicode/completions-wrapper');\n\n this.loadingFailureReason = 'error-loading-inference-model-configuration';\n const noThresholdConfig = getNoThresholdConfig();\n\n this.logger.debug(this.ctx, 'Hybrid inference packages were successfully loaded.');\n\n // Check if there are any issues initializing the routing and inference models.\n this.loadingFailureReason = 'error-initializing-routing-model';\n this.routingModel = await routingLogic.GPTCRouter.loadAsync();\n\n this.loadingFailureReason = 'error-initializing-inference-model';\n this.inferenceModel = await completionsWrapper.GptCModelInference.createInstance(\n noThresholdConfig // Turn off all thresholds for GPT-C inference.\n );\n\n this.logger.debug(this.ctx, 'Routing and inference models were successfully initialized.');\n\n this.loadingFailureReason = undefined;\n } catch (error) {\n this.logger.debug(\n this.ctx,\n `Issue when initializing hybrid inference - loadingFailureReason: ${\n this.loadingFailureReason\n } - error: ${(error as Error).message}`\n );\n\n telemetry.telemetryException(this.ctx, error, 'hybridInference.exception', {\n loadingFailureReason: this.loadingFailureReason!,\n });\n }\n }\n\n private async isEnabled(\n featuresFilterArgs: FeaturesFilterArgs\n ): Promise<{enabled: boolean; routingThreshold: number}> {\n return {\n enabled: await this.ctx.get(Features).hybridInference(featuresFilterArgs),\n routingThreshold: await this.ctx.get(Features).hybridInferenceThreshold(featuresFilterArgs),\n };\n }\n\n private sendRoutingTelemetry(\n telemetryData: telemetry.TelemetryData,\n modelSelection: RoutingModel,\n routingReason = 'success',\n prediction = -1.0\n ) {\n this.logger.debug(\n this.ctx,\n `Routing to ${modelSelection} model, reason: ${routingReason}, prediction: ${prediction}`\n );\n\n const routingTelemetryData = telemetryData.extendedBy(\n {\n modelSelection,\n routingReason,\n },\n {\n prediction,\n deltaMs: telemetry.now() - telemetryData.issuedTime,\n }\n );\n telemetry.telemetry(this.ctx, 'ghostText.modelRouting', routingTelemetryData);\n }\n\n /**\n * Call the routing model to determine if this completion request should be sent to the Azure-hosted model or to the local GPT-C instance.\n * Return the RoutingModel enum value corresponding to the model to be used.\n * This assumes that the hybrid inference instance has been initialized with an earlier `initialize()` call, otherwise exit early.\n *\n * @param document The document that the completion request is for.\n * @param prompt The computed prompt object.\n * @param position The position of the cursor.\n *\n * @returns The RoutingModel enum value corresponding to the model to be used: `RoutingModel.BASE` or `RoutingModel.GPTC`.\n */\n public async route(\n document: ITextDocument,\n prompt: Prompt,\n featuresFilterArgs: FeaturesFilterArgs\n ): Promise {\n const {enabled, routingThreshold} = await this.isEnabled(featuresFilterArgs);\n if (!enabled) {\n return RoutingModel.BASE;\n }\n\n if (!this.isInitialized) {\n return RoutingModel.BASE;\n }\n\n const telemetryData = telemetry.TelemetryData.createAndMarkAsIssued();\n\n if (this.loadingFailureReason) {\n this.sendRoutingTelemetry(telemetryData, RoutingModel.BASE, this.loadingFailureReason);\n return RoutingModel.BASE;\n }\n\n const response = await this.routingModel!.routeAsync(\n prompt.prefix,\n document.languageId,\n // Pass the routing threshold only if it's valid\n routingThreshold > 0 ? routingThreshold : undefined\n );\n const model = response.shouldUseGptC ? RoutingModel.GPTC : RoutingModel.BASE;\n\n this.sendRoutingTelemetry(\n telemetryData,\n model,\n HybridInferenceRoutingReason[response.reasonCode],\n response.confidence\n );\n\n return model;\n }\n\n /**\n * Request a suggestion from the local inference model.\n * This assumes that the hybrid inference instance has been initialized with an earlier `initialize()` call, otherwise exit early.\n *\n * @param document The document that the completion request is for.\n * @param prompt The computed prompt object.\n * @param headerRequestId The request id that Copilot associated to that completion.\n *\n * @returns A result object with either the completion, or the reason why we couldn't get a completion.\n */\n public async getGhostText(\n document: ITextDocument,\n prompt: Prompt,\n headerRequestId: string,\n telemetryObject: telemetry.TelemetryData,\n featuresFilterArgs: FeaturesFilterArgs\n ): Promise<[GetGhostTextResultType, RequestId | undefined]> {\n const {enabled} = await this.isEnabled(featuresFilterArgs);\n if (!enabled) {\n return [{type: 'abortedBeforeIssued', reason: 'Hybrid inference not enabled.'}, undefined];\n }\n\n if (!this.isInitialized) {\n return [{type: 'abortedBeforeIssued', reason: 'Hybrid inference not initialized.'}, undefined];\n }\n\n const requestId: RequestId = {\n headerRequestId: headerRequestId,\n completionId: randomUUID(),\n created: telemetry.now(),\n serverExperiments: 'gpt-c',\n deploymentId: 'gpt-c',\n };\n\n let telemetryBlob = telemetryObject.extendedBy(\n {\n endpoint: 'gpt-c',\n engineName: 'gpt-c',\n uiKind: CopilotUiKind.GhostText,\n },\n telemetry.telemetrizePromptLength(prompt)\n );\n telemetryBlob.extendWithRequestId(requestId);\n\n // Send engine.prompt telemetry event\n telemetry.logEnginePrompt(this.ctx, prompt, telemetryBlob);\n\n const result = await this.inferenceModel!.run(prompt.prefix, document.languageId as LanguageId, true);\n const completion = result?.processed ?? '';\n\n this.logger.debug(this.ctx, `Get ghost text for ${document.uri.fsPath}: ${JSON.stringify(result)}`);\n\n telemetryBlob = telemetryBlob.extendedBy({}, {...result?.metadata});\n\n telemetry.logEngineCompletion(this.ctx, completion, {text: completion, tokens: []}, requestId, 0);\n\n return [\n {\n type: 'success',\n value: completion,\n telemetryData: mkBasicResultTelemetry(telemetryBlob),\n telemetryBlob,\n },\n requestId,\n ];\n }\n}\n","import type {DictSettingsStorage, SettingsBackingDict, SettingsStorage} from './types';\n\n/**\n * Creates a GPT-C configuration with no threshold values.\n * @returns SettingsStorage with no threshold values.\n */\nexport function getNoThresholdConfig(): SettingsStorage {\n const completionsWrapper: {\n SettingsStorage: SettingsStorage;\n DictSettingsStorage: typeof DictSettingsStorage;\n SettingsBackingDict: SettingsBackingDict;\n } = require('@vsintellicode/completions-wrapper');\n\n const configuration = {\n 'intellicode-completions.internal.langSpecificFirstTokenThreshold': {\n cpp: 0,\n csharp: 0,\n java: 0,\n javascript: 0,\n javascriptreact: 0,\n python: 0,\n typescript: 0,\n typescriptreact: 0,\n },\n 'intellicode-completions.internal.langSpecificCumulativeProbabilityThreshold': {\n cpp: 0,\n csharp: 0,\n java: 0,\n javascript: 0,\n javascriptreact: 0,\n python: 0,\n typescript: 0,\n typescriptreact: 0,\n },\n } as SettingsBackingDict;\n\n const configuredSettings = new completionsWrapper.DictSettingsStorage(configuration);\n\n return configuredSettings;\n}\n","import {HybridInference, RoutingModel} from './hybridInference';\n\nexport class NoopHybridInference extends HybridInference {\n route(): Promise {\n return Promise.resolve(RoutingModel.BASE);\n }\n\n getGhostText(): Promise<[{type: 'abortedBeforeIssued'; reason: string}, undefined]> {\n return Promise.resolve([{type: 'abortedBeforeIssued', reason: 'Hybrid inference not enabled'}, undefined]);\n }\n\n initialize(): Promise {\n return Promise.resolve();\n }\n}\n","import {Context} from './context';\nimport {telemetry} from './telemetry';\n\nexport abstract class InstallationManager {\n /**\n * Call at extension / agent startup. Checks to see if this is a new installation or\n * upgrade and calls `handleNewInstall` or `handleUpgrade` accordingly.\n */\n async startup(ctx: Context): Promise {\n if (await this.isNewInstall(ctx)) {\n await this.handleInstall(ctx, await this.wasPreviouslyInstalled(ctx));\n await this.markInstalled(ctx);\n } else if (await this.isNewUpgrade(ctx)) {\n await this.handleUpgrade(ctx);\n await this.markUpgraded(ctx);\n }\n }\n\n protected abstract isNewInstall(ctx: Context): Promise;\n\n protected abstract markInstalled(ctx: Context): Promise;\n\n protected abstract wasPreviouslyInstalled(ctx: Context): Promise;\n\n protected abstract isNewUpgrade(ctx: Context): Promise;\n\n protected abstract markUpgraded(ctx: Context): Promise;\n\n /**\n * Call when the extension / agent will be uninstalled.\n */\n async uninstall(ctx: Context): Promise {\n return await this.handleUninstall(ctx);\n }\n\n /**\n * Perform any work needed after an initial install.\n */\n protected async handleInstall(ctx: Context, previouslyInstalled: boolean): Promise {\n if (previouslyInstalled) {\n telemetry(ctx, 'installed.reinstall');\n } else {\n telemetry(ctx, 'installed.new');\n }\n }\n\n /**\n * Perform any work needed after an upgrade.\n */\n protected async handleUpgrade(ctx: Context): Promise {\n telemetry(ctx, 'installed.upgrade');\n }\n\n /**\n * Perform any work needed before uninstall.\n */\n protected async handleUninstall(ctx: Context): Promise {\n telemetry(ctx, 'uninstalled');\n }\n}\n","// This file is generated by running 'npm run generate_languages'\n// a map of all known languages (see languageCommentMarkers) with their extensions and filenames as they are defined in linguist\nexport const knownLanguages: {[language: string]: {extensions: string[]; filenames?: string[]}} = {\n abap: {\n extensions: ['.abap'],\n },\n bat: {\n extensions: ['.bat', '.cmd'],\n },\n bibtex: {\n extensions: ['.bib', '.bibtex'],\n },\n blade: {\n extensions: ['.blade', '.blade.php'],\n },\n c: {\n extensions: ['.c', '.cats', '.h', '.idc'],\n },\n csharp: {\n extensions: ['.cake', '.cs', '.csx', '.linq'],\n },\n cpp: {\n extensions: [\n '.c++',\n '.cc',\n '.cp',\n '.cpp',\n '.cxx',\n '.h',\n '.h++',\n '.hh',\n '.hpp',\n '.hxx',\n '.inc',\n '.inl',\n '.ino',\n '.ipp',\n '.ixx',\n '.re',\n '.tcc',\n '.tpp',\n '.i',\n ],\n },\n css: {\n extensions: ['.css', '.wxss'],\n },\n clojure: {\n extensions: ['.bb', '.boot', '.cl2', '.clj', '.cljc', '.cljs', '.cljs.hl', '.cljscm', '.cljx', '.edn', '.hic'],\n filenames: ['riemann.config'],\n },\n ql: {\n extensions: ['.ql', '.qll'],\n },\n coffeescript: {\n extensions: ['._coffee', '.cake', '.cjsx', '.coffee', '.iced'],\n filenames: ['Cakefile'],\n },\n dart: {\n extensions: ['.dart'],\n },\n dockerfile: {\n extensions: ['.dockerfile'],\n filenames: ['Containerfile', 'Dockerfile'],\n },\n html: {\n extensions: [\n '.ect',\n '.ejs',\n '.ejs.t',\n '.jst',\n '.hta',\n '.htm',\n '.html',\n '.html.hl',\n '.html5',\n '.inc',\n '.jsp',\n '.tpl',\n '.twig',\n '.wxml',\n '.xht',\n '.xhtml',\n '.phtml',\n '.liquid',\n ],\n },\n elixir: {\n extensions: ['.ex', '.exs'],\n filenames: ['mix.lock'],\n },\n erlang: {\n extensions: ['.app.src', '.erl', '.es', '.escript', '.hrl', '.xrl', '.yrl'],\n filenames: ['Emakefile', 'rebar.config', 'rebar.config.lock', 'rebar.lock'],\n },\n fsharp: {\n extensions: ['.fs', '.fsi', '.fsx'],\n },\n go: {\n extensions: ['.go'],\n },\n groovy: {\n extensions: ['.gradle', '.groovy', '.grt', '.gtpl', '.gvy', '.jenkinsfile'],\n filenames: ['Jenkinsfile', 'Jenkinsfile'],\n },\n terraform: {\n extensions: ['.hcl', '.nomad', '.tf', '.tfvars', '.workflow'],\n },\n erb: {\n extensions: ['.erb', '.erb.deface', '.rhtml'],\n },\n razor: {\n extensions: ['.cshtml', '.razor'],\n },\n haml: {\n extensions: ['.haml', '.haml.deface'],\n },\n handlebars: {\n extensions: ['.handlebars', '.hbs'],\n },\n haskell: {\n extensions: ['.hs', '.hs-boot', '.hsc'],\n },\n ini: {\n extensions: ['.cfg', '.dof', '.ini', '.lektorproject', '.prefs', '.pro', '.properties', '.url'],\n filenames: ['.coveragerc', '.flake8', '.pylintrc', 'buildozer.spec', 'pylintrc'],\n },\n jsonc: {\n extensions: [\n '.code-snippets',\n '.code-workspace',\n '.jsonc',\n '.sublime-build',\n '.sublime-commands',\n '.sublime-completions',\n '.sublime-keymap',\n '.sublime-macro',\n '.sublime-menu',\n '.sublime-mousemap',\n '.sublime-project',\n '.sublime-settings',\n '.sublime-theme',\n '.sublime-workspace',\n '.sublime_metrics',\n '.sublime_session',\n ],\n filenames: [\n '.babelrc',\n '.devcontainer.json',\n '.eslintrc.json',\n '.jscsrc',\n '.jshintrc',\n '.jslintrc',\n 'api-extractor.json',\n 'devcontainer.json',\n 'jsconfig.json',\n 'language-configuration.json',\n 'launch.json',\n 'settings.json',\n 'tsconfig.json',\n 'tslint.json',\n ],\n },\n java: {\n extensions: ['.jav', '.java', '.jsh'],\n },\n javascript: {\n extensions: [\n '._js',\n '.bones',\n '.cjs',\n '.es',\n '.es6',\n '.frag',\n '.gs',\n '.jake',\n '.javascript',\n '.js',\n '.jsb',\n '.jscad',\n '.jsfl',\n '.jslib',\n '.jsm',\n '.jspre',\n '.jss',\n '.mjs',\n '.njs',\n '.pac',\n '.sjs',\n '.ssjs',\n '.xsjs',\n '.xsjslib',\n ],\n filenames: ['Jakefile'],\n },\n julia: {\n extensions: ['.jl'],\n },\n python: {\n extensions: [\n '.ipynb',\n '.cgi',\n '.codon',\n '.fcgi',\n '.gyp',\n '.gypi',\n '.lmi',\n '.py',\n '.py3',\n '.pyde',\n '.pyi',\n '.pyp',\n '.pyt',\n '.pyw',\n '.rpy',\n '.smk',\n '.spec',\n '.tac',\n '.wsgi',\n '.xpy',\n ],\n filenames: ['Notebook', '.gclient', 'DEPS', 'SConscript', 'SConstruct', 'Snakefile', 'wscript'],\n },\n kotlin: {\n extensions: ['.kt', '.ktm', '.kts'],\n },\n less: {\n extensions: ['.less'],\n },\n lua: {\n extensions: ['.fcgi', '.lua', '.luau', '.nse', '.p8', '.pd_lua', '.rbxs', '.rockspec', '.wlua'],\n filenames: ['.luacheckrc'],\n },\n makefile: {\n extensions: ['.d', '.mak', '.make', '.makefile', '.mk', '.mkfile'],\n filenames: [\n 'BSDmakefile',\n 'GNUmakefile',\n 'Kbuild',\n 'Makefile',\n 'Makefile.am',\n 'Makefile.boot',\n 'Makefile.frag',\n 'Makefile.in',\n 'Makefile.inc',\n 'Makefile.wat',\n 'makefile',\n 'makefile.sco',\n 'mkfile',\n ],\n },\n markdown: {\n extensions: [\n '.livemd',\n '.markdown',\n '.md',\n '.mdown',\n '.mdwn',\n '.mdx',\n '.mkd',\n '.mkdn',\n '.mkdown',\n '.ronn',\n '.scd',\n '.workbook',\n ],\n filenames: ['contents.lr'],\n },\n 'objective-c': {\n extensions: ['.h', '.m'],\n },\n 'objective-cpp': {\n extensions: ['.mm'],\n },\n php: {\n extensions: ['.aw', '.ctp', '.fcgi', '.inc', '.php', '.php3', '.php4', '.php5', '.phps', '.phpt'],\n filenames: ['.php', '.php_cs', '.php_cs.dist', 'Phakefile'],\n },\n perl: {\n extensions: ['.al', '.cgi', '.fcgi', '.perl', '.ph', '.pl', '.plx', '.pm', '.psgi', '.t'],\n filenames: ['.latexmkrc', 'Makefile.PL', 'Rexfile', 'ack', 'cpanfile', 'latexmkrc'],\n },\n powershell: {\n extensions: ['.ps1', '.psd1', '.psm1'],\n },\n pug: {\n extensions: ['.jade', '.pug'],\n },\n r: {\n extensions: ['.r', '.rd', '.rsx'],\n filenames: ['.Rprofile', 'expr-dist'],\n },\n ruby: {\n extensions: [\n '.builder',\n '.eye',\n '.fcgi',\n '.gemspec',\n '.god',\n '.jbuilder',\n '.mspec',\n '.pluginspec',\n '.podspec',\n '.prawn',\n '.rabl',\n '.rake',\n '.rb',\n '.rbi',\n '.rbuild',\n '.rbw',\n '.rbx',\n '.ru',\n '.ruby',\n '.spec',\n '.thor',\n '.watchr',\n ],\n filenames: [\n '.irbrc',\n '.pryrc',\n '.simplecov',\n 'Appraisals',\n 'Berksfile',\n 'Brewfile',\n 'Buildfile',\n 'Capfile',\n 'Dangerfile',\n 'Deliverfile',\n 'Fastfile',\n 'Gemfile',\n 'Guardfile',\n 'Jarfile',\n 'Mavenfile',\n 'Podfile',\n 'Puppetfile',\n 'Rakefile',\n 'Snapfile',\n 'Steepfile',\n 'Thorfile',\n 'Vagrantfile',\n 'buildfile',\n ],\n },\n rust: {\n extensions: ['.rs', '.rs.in'],\n },\n scss: {\n extensions: ['.scss'],\n },\n sql: {\n extensions: ['.cql', '.ddl', '.inc', '.mysql', '.prc', '.sql', '.tab', '.udf', '.viw'],\n },\n sass: {\n extensions: ['.sass'],\n },\n scala: {\n extensions: ['.kojo', '.sbt', '.sc', '.scala'],\n },\n shellscript: {\n extensions: [\n '.bash',\n '.bats',\n '.cgi',\n '.command',\n '.fcgi',\n '.ksh',\n '.sh',\n '.sh.in',\n '.tmux',\n '.tool',\n '.zsh',\n '.zsh-theme',\n ],\n filenames: [\n '.bash_aliases',\n '.bash_functions',\n '.bash_history',\n '.bash_logout',\n '.bash_profile',\n '.bashrc',\n '.cshrc',\n '.flaskenv',\n '.kshrc',\n '.login',\n '.profile',\n '.zlogin',\n '.zlogout',\n '.zprofile',\n '.zshenv',\n '.zshrc',\n '9fs',\n 'PKGBUILD',\n 'bash_aliases',\n 'bash_logout',\n 'bash_profile',\n 'bashrc',\n 'cshrc',\n 'gradlew',\n 'kshrc',\n 'login',\n 'man',\n 'profile',\n 'zlogin',\n 'zlogout',\n 'zprofile',\n 'zshenv',\n 'zshrc',\n ],\n },\n slim: {\n extensions: ['.slim'],\n },\n solidity: {\n extensions: ['.sol'],\n },\n stylus: {\n extensions: ['.styl'],\n },\n svelte: {\n extensions: ['.svelte'],\n },\n swift: {\n extensions: ['.swift'],\n },\n typescriptreact: {\n extensions: ['.tsx'],\n },\n latex: {\n extensions: [\n '.aux',\n '.bbx',\n '.cbx',\n '.cls',\n '.dtx',\n '.ins',\n '.lbx',\n '.ltx',\n '.mkii',\n '.mkiv',\n '.mkvi',\n '.sty',\n '.tex',\n '.toc',\n ],\n },\n typescript: {\n extensions: ['.cts', '.mts', '.ts'],\n },\n verilog: {\n extensions: ['.v', '.veo'],\n },\n vb: {\n extensions: ['.vb', '.vbhtml', '.Dsr', '.bas', '.cls', '.ctl', '.frm'],\n },\n vue: {\n extensions: ['.nvue', '.vue'],\n },\n xml: {\n extensions: [\n '.adml',\n '.admx',\n '.ant',\n '.axaml',\n '.axml',\n '.builds',\n '.ccproj',\n '.ccxml',\n '.clixml',\n '.cproject',\n '.cscfg',\n '.csdef',\n '.csl',\n '.csproj',\n '.ct',\n '.depproj',\n '.dita',\n '.ditamap',\n '.ditaval',\n '.dll.config',\n '.dotsettings',\n '.filters',\n '.fsproj',\n '.fxml',\n '.glade',\n '.gml',\n '.gmx',\n '.grxml',\n '.gst',\n '.hzp',\n '.iml',\n '.ivy',\n '.jelly',\n '.jsproj',\n '.kml',\n '.launch',\n '.mdpolicy',\n '.mjml',\n '.mm',\n '.mod',\n '.mxml',\n '.natvis',\n '.ncl',\n '.ndproj',\n '.nproj',\n '.nuspec',\n '.odd',\n '.osm',\n '.pkgproj',\n '.plist',\n '.pluginspec',\n '.proj',\n '.props',\n '.ps1xml',\n '.psc1',\n '.pt',\n '.qhelp',\n '.rdf',\n '.res',\n '.resx',\n '.rss',\n '.sch',\n '.scxml',\n '.sfproj',\n '.shproj',\n '.srdf',\n '.storyboard',\n '.sublime-snippet',\n '.svg',\n '.targets',\n '.tml',\n '.ui',\n '.urdf',\n '.ux',\n '.vbproj',\n '.vcxproj',\n '.vsixmanifest',\n '.vssettings',\n '.vstemplate',\n '.vxml',\n '.wixproj',\n '.workflow',\n '.wsdl',\n '.wsf',\n '.wxi',\n '.wxl',\n '.wxs',\n '.x3d',\n '.xacro',\n '.xaml',\n '.xib',\n '.xlf',\n '.xliff',\n '.xmi',\n '.xml',\n '.xml.dist',\n '.xmp',\n '.xproj',\n '.xsd',\n '.xspec',\n '.xul',\n '.zcml',\n ],\n filenames: [\n '.classpath',\n '.cproject',\n '.project',\n 'App.config',\n 'NuGet.config',\n 'Settings.StyleCop',\n 'Web.Debug.config',\n 'Web.Release.config',\n 'Web.config',\n 'packages.config',\n ],\n },\n xsl: {\n extensions: ['.xsl', '.xslt'],\n },\n yaml: {\n extensions: [\n '.mir',\n '.reek',\n '.rviz',\n '.sublime-syntax',\n '.syntax',\n '.yaml',\n '.yaml-tmlanguage',\n '.yaml.sed',\n '.yml',\n '.yml.mysql',\n ],\n filenames: ['.clang-format', '.clang-tidy', '.gemrc', 'CITATION.cff', 'glide.lock', 'yarn.lock'],\n },\n javascriptreact: {\n extensions: ['.jsx'],\n },\n};\n","import {LRUCacheMap} from '../common/cache';\nimport {Context} from '../context';\nimport {INotebookDocument, ITextDocument} from '../textDocument';\nimport {TextDocumentManager} from '../textDocumentManager';\nimport {knownLanguages} from './generatedLanguages';\nimport {knownFileExtensions, knownTemplateLanguageExtensions, templateLanguageLimitations} from './languages';\nimport path = require('path');\n\nexport class Language {\n constructor(\n public readonly languageId: string,\n public readonly isGuess: boolean,\n public readonly fileExtension: string\n ) {}\n}\n\nexport abstract class LanguageDetection {\n abstract detectLanguage(doc: ITextDocument): Promise;\n}\n\nexport function primeLanguageDetectionCache(ctx: Context, doc: ITextDocument) {\n ctx.get(LanguageDetection).detectLanguage(doc);\n}\n\nexport function getLanguageDetection(ctx: Context): LanguageDetection {\n return new CachingLanguageDetection(new FilenameAndExensionLanguageDetection(), new NotebookLanguageDetection(ctx));\n}\n\nclass CachingLanguageDetection extends LanguageDetection {\n private readonly cache = new LRUCacheMap(100);\n\n constructor(private readonly delegate: LanguageDetection, private readonly notebookDelegate: LanguageDetection) {\n super();\n }\n\n public async detectLanguage(doc: ITextDocument): Promise {\n const filename = path.basename(doc.fileName);\n if (isNotebook(filename)) {\n return this.notebookDelegate.detectLanguage(doc);\n }\n return this.detectLanguageForRegularFile(filename, doc);\n }\n\n private async detectLanguageForRegularFile(filename: string, doc: ITextDocument): Promise {\n let language = this.cache.get(filename);\n if (!language) {\n language = await this.delegate.detectLanguage(doc);\n if (!language.isGuess) {\n this.cache.set(filename, language);\n }\n }\n return language;\n }\n}\n\nfunction isNotebook(filename: string) {\n return filename.endsWith('.ipynb');\n}\n\nclass NotebookLanguageDetection extends LanguageDetection {\n constructor(private readonly ctx: Context) {\n super();\n }\n\n async detectLanguage(doc: ITextDocument): Promise {\n const textDocumentManager = this.ctx.get(TextDocumentManager);\n const notebook = textDocumentManager.findNotebook(doc);\n if (notebook) {\n return this.detectCellLanguage(doc, notebook);\n }\n // use python as fallback e.g. in case of agent\n return new Language('python', false, '.ipynb');\n }\n\n private detectCellLanguage(doc: ITextDocument, notebook: INotebookDocument): Language {\n const activeCell = notebook.getCells().find(cell => cell.document.uri === doc.uri);\n if (activeCell) {\n const metadata = activeCell.metadata;\n if (metadata?.custom?.metadata?.vscode?.languageId) {\n return new Language(metadata.custom.metadata.vscode.languageId, false, '.ipynb');\n } else if (activeCell.kind === 2) {\n return new Language('python', false, '.ipynb');\n }\n return new Language('markdown', false, '.ipynb');\n }\n return new Language('unknown', false, '.ipynb');\n }\n}\n\ntype LanguageIdWithGuessing = {languageId: string; isGuess: boolean};\n\nclass FilenameAndExensionLanguageDetection extends LanguageDetection {\n private readonly languageIdByExtensionTracker = new LanguageIdTracker();\n\n public async detectLanguage(doc: ITextDocument): Promise {\n const filename = path.basename(doc.fileName);\n const extension = path.extname(filename).toLowerCase();\n const extensionWithoutTemplate = this.extensionWithoutTemplateLanguage(filename, extension);\n const languageIdWithGuessing = this.detectLanguageId(filename, extensionWithoutTemplate);\n return new Language(\n languageIdWithGuessing.languageId,\n languageIdWithGuessing.isGuess,\n this.computeFullyQualifiedExtension(extension, extensionWithoutTemplate)\n );\n }\n\n private extensionWithoutTemplateLanguage(filename: string, extension: string): string {\n if (knownTemplateLanguageExtensions.includes(extension)) {\n const filenameWithoutExtension = filename.substring(0, filename.lastIndexOf('.'));\n const extensionWithoutTemplate = path.extname(filenameWithoutExtension).toLowerCase();\n const isTemplateLanguage =\n extensionWithoutTemplate.length > 0 &&\n knownFileExtensions.includes(extensionWithoutTemplate) &&\n this.isExtensionValidForTemplateLanguage(extension, extensionWithoutTemplate);\n if (isTemplateLanguage) {\n return extensionWithoutTemplate;\n }\n }\n return extension;\n }\n\n private isExtensionValidForTemplateLanguage(extension: string, extensionWithoutTemplate: string): boolean {\n const limitations = templateLanguageLimitations[extension];\n return !limitations || limitations.includes(extensionWithoutTemplate);\n }\n\n private detectLanguageId(filename: string, extension: string): LanguageIdWithGuessing {\n const candidatesByExtension = [];\n for (const language in knownLanguages) {\n const info = knownLanguages[language];\n if (info.filenames && info.filenames!.includes(filename)) {\n return {languageId: language, isGuess: false};\n }\n if (info.extensions.includes(extension)) {\n candidatesByExtension.push(language);\n }\n }\n return this.determineLanguageIdByCandidates(candidatesByExtension);\n }\n\n private determineLanguageIdByCandidates(candidates: string[]): LanguageIdWithGuessing {\n if (candidates.length === 1) {\n this.languageIdByExtensionTracker.track(candidates[0]);\n return {languageId: candidates[0], isGuess: false};\n } else if (candidates.length > 1) {\n return this.determineMostSeenLanguages(candidates);\n }\n return {languageId: 'unknown', isGuess: true};\n }\n\n private determineMostSeenLanguages(candidates: string[]): LanguageIdWithGuessing {\n const mostSeenLanguageId = this.languageIdByExtensionTracker.mostRecentLanguageId(candidates);\n if (mostSeenLanguageId) {\n return {languageId: mostSeenLanguageId, isGuess: true};\n }\n return {languageId: candidates[0], isGuess: true};\n }\n\n private computeFullyQualifiedExtension(extension: string, extensionWithoutTemplate: string): string {\n if (extension !== extensionWithoutTemplate) {\n return extensionWithoutTemplate + extension;\n }\n return extension;\n }\n}\n\nclass LanguageIdTracker {\n private readonly seenLanguages = new LRUCacheMap(25);\n\n public track(languageId: string) {\n this.seenLanguages.set(languageId, this.preciseTimestamp());\n }\n\n // simple Date is not precise enough and causes trouble when running tests\n private preciseTimestamp(): bigint {\n return process.hrtime.bigint();\n }\n\n public mostRecentLanguageId(candidates: string[]): string | undefined {\n const mostRecentIds = candidates\n .map(languageId => {\n return {id: languageId, seen: this.seenLanguages.get(languageId)};\n })\n .filter(candidate => candidate.seen)\n .sort((a, b) => Number(b.seen) - Number(a.seen))\n .map(candidate => candidate.id);\n if (mostRecentIds.length > 0) {\n return mostRecentIds[0];\n }\n return undefined;\n }\n}\n","import {knownLanguages} from './generatedLanguages';\n\nexport const knownTemplateLanguageExtensions = [\n '.ejs',\n '.erb',\n '.haml',\n '.hbs',\n '.j2',\n '.jinja',\n '.jinja2',\n '.liquid',\n '.mustache',\n '.njk',\n '.php',\n '.pug',\n '.slim',\n '.webc',\n];\n\nexport const templateLanguageLimitations: {[extension: string]: string[]} = {\n '.php': ['.blade'],\n};\n\nexport type LanguageInfo = {\n extensions: string[];\n filenames?: string[];\n};\n\nexport const knownFileExtensions = Object.keys(knownLanguages).flatMap(language => knownLanguages[language].extensions);\n","import {Console} from 'console';\nimport {Clock} from './clock';\nimport {ConfigKey, getConfig, isProduction} from './config';\nimport {Context} from './context';\nimport {TelemetryData, telemetryError, telemetryException} from './telemetry';\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n}\n\nexport class LogVerbose {\n constructor(readonly logVerbose: boolean) {}\n}\n\nexport function verboseLogging(ctx: Context): boolean {\n return ctx.get(LogVerbose).logVerbose;\n}\n\nexport interface LoggerInterface {\n debug(ctx: Context, msg: string, ...extra: any[]): void;\n info(ctx: Context, msg: string, ...extra: any[]): void;\n warn(ctx: Context, msg: string, ...extra: any[]): void;\n error(ctx: Context, msg: string, ...extra: any[]): void;\n\n setLevel(level: LogLevel): void;\n}\n\ninterface Console {\n log(...args: any[]): void;\n warn(...args: any[]): void;\n error(...args: any[]): void;\n}\n\nexport abstract class LogTarget {\n abstract logIt(ctx: Context, level: LogLevel, metadataStr: string, ...extra: any[]): void;\n shouldLog(ctx: Context, level: LogLevel): boolean | undefined {\n return undefined;\n }\n}\n\nexport class ConsoleLog extends LogTarget {\n constructor(private readonly console: Console) {\n super();\n }\n\n logIt(ctx: Context, level: LogLevel, metadataStr: string, ...extra: any[]) {\n // Note we don't log INFO or DEBUG messages into console (unless in verbose mode).\n // They are still logged in the output channel.\n if (verboseLogging(ctx) || level == LogLevel.ERROR) {\n this.console.error(metadataStr, ...extra);\n } else if (level == LogLevel.WARN) {\n this.console.warn(metadataStr, ...extra);\n }\n }\n}\nexport class OutputChannelLog extends LogTarget {\n constructor(private readonly output: {appendLine: (line: string) => void}) {\n super();\n }\n logIt(ctx: Context, level: LogLevel, metadataStr: string, ...extra: any[]) {\n this.output.appendLine(`${metadataStr} ${extra.map(toPlainText)}`);\n }\n}\n\nexport class MultiLog extends LogTarget {\n constructor(private readonly targets: LogTarget[]) {\n super();\n }\n logIt(ctx: Context, level: LogLevel, metadataStr: string, ...extra: any[]) {\n this.targets.forEach(t => t.logIt(ctx, level, metadataStr, ...extra));\n }\n}\n\nexport class Logger implements LoggerInterface {\n minLoggedLevel: LogLevel;\n context: string;\n\n constructor(minLoggedLevel: LogLevel, context: string) {\n this.minLoggedLevel = minLoggedLevel;\n this.context = context;\n }\n\n public setLevel(level: LogLevel) {\n this.minLoggedLevel = level;\n }\n\n private stringToLevel(s: string | undefined): LogLevel | undefined {\n return LogLevel[s as keyof typeof LogLevel];\n }\n\n private log(ctx: Context, level: LogLevel, ...extra: any[]) {\n const levelString = LogLevel[level];\n\n const logTarget = ctx.get(LogTarget);\n const targetOverride = logTarget.shouldLog(ctx, level);\n\n if (targetOverride === false) {\n return;\n }\n if (targetOverride === undefined && !this.shouldLog(ctx, level, this.context)) {\n return;\n }\n\n // Generate timezone aware timestamp\n const timestamp = ctx.get(Clock).now().toISOString();\n\n const metadataStr = `[${levelString}] [${this.context}] [${timestamp}]`;\n\n logTarget.logIt(ctx, level, metadataStr, ...extra);\n }\n\n private sendErrorTelemetry(ctx: Context, name: string, secureMessage: string, standardMessage: string) {\n // send full content to secure telemetry\n telemetryError(\n ctx,\n name,\n TelemetryData.createAndMarkAsIssued({\n context: this.context,\n level: LogLevel[LogLevel.ERROR],\n message: secureMessage,\n }),\n true\n );\n\n // send content that excludes customer data to standard telemetry\n telemetryError(\n ctx,\n name,\n TelemetryData.createAndMarkAsIssued({\n context: this.context,\n level: LogLevel[LogLevel.ERROR],\n message: standardMessage,\n }),\n false\n );\n }\n\n private telemetryMessage(...extra: any[]): string {\n return extra.length > 0 ? JSON.stringify(extra) : 'no msg';\n }\n\n private shouldLog(ctx: Context, level: LogLevel, category: string): boolean {\n if (verboseLogging(ctx)) {\n return true;\n }\n\n const levels = getConfig(ctx, ConfigKey.DebugFilterLogCategories);\n //If any config is set, show only the configured categories\n if (levels.length > 0 && !levels.includes(category)) {\n return false;\n }\n\n if (isProduction(ctx)) {\n return level >= this.minLoggedLevel;\n }\n // In dev builds, take log level override user pref into account.\n const overrides = getConfig<{[context: string]: string}>(ctx, ConfigKey.DebugOverrideLogLevels);\n const minLevel =\n this.stringToLevel(overrides['*']) ?? this.stringToLevel(overrides[this.context]) ?? this.minLoggedLevel;\n return level >= minLevel;\n }\n\n public debug(ctx: Context, ...extra: any[]) {\n this.log(ctx, LogLevel.DEBUG, ...extra);\n }\n\n public info(ctx: Context, ...extra: any[]) {\n this.log(ctx, LogLevel.INFO, ...extra);\n }\n\n public warn(ctx: Context, ...extra: any[]) {\n this.log(ctx, LogLevel.WARN, ...extra);\n }\n\n /**\n * Logs an error message and reports an error to telemetry. This is appropriate for generic\n * error logging, which might not be associated with an exception. Prefer `exception()` when\n * logging exception details.\n */\n public error(ctx: Context, ...extra: any[]) {\n this.sendErrorTelemetry(ctx, 'log', this.telemetryMessage(...extra), '[redacted]');\n this.log(ctx, LogLevel.ERROR, ...extra);\n }\n\n /**\n * Logs an error message and reports the exception to telemetry. Prefer this method over\n * `error()` when logging exception details.\n *\n * @param ctx The context\n * @param error The Error object that was thrown\n * @param message An optional message for context (e.g. \"Request error\"). Must not contain customer data. **Do not include stack trace or messages from the error object.**\n */\n public exception(ctx: Context, error: unknown, message?: string) {\n const prefix = message ? `${message}: ` : '';\n const safeError: Error = error instanceof Error ? error : new Error('Non-error thrown: ' + error);\n telemetryException(ctx, safeError, message ?? 'Error');\n this.log(ctx, LogLevel.ERROR, `${prefix}(${safeError.constructor.name}) ${safeError.message}`);\n }\n}\n\nexport function toPlainText(x: unknown): string {\n switch (typeof x) {\n case 'object':\n return JSON.stringify(x);\n default:\n return String(x);\n }\n}\n\nexport const logger = new Logger(LogLevel.INFO, 'default');\n","import crypto = require('crypto');\nimport {networkInterfaces} from 'os';\nimport * as uuid from 'uuid';\n\n//Copied from https://github.com/microsoft/vscode/blob/f145c79a932676e19741bdb8550dba5ad4ab6274/src/vs/base/node/macAddress.ts\nconst invalidMacAddresses = new Set(['00:00:00:00:00:00', 'ff:ff:ff:ff:ff:ff', 'ac:de:48:00:11:22']);\n\nfunction validateMacAddress(candidate: string): boolean {\n const tempCandidate = candidate.replace(/-/g, ':').toLowerCase();\n return !invalidMacAddresses.has(tempCandidate);\n}\n\nfunction getMac(): string {\n const ifaces = networkInterfaces();\n for (const name in ifaces) {\n const networkInterface = ifaces[name];\n if (networkInterface) {\n for (const {mac} of networkInterface) {\n if (validateMacAddress(mac)) {\n return mac;\n }\n }\n }\n }\n\n throw new Error('Unable to retrieve mac address (unexpected format)');\n}\n\n//Copied from https://github.com/microsoft/vscode/blob/f145c79a932676e19741bdb8550dba5ad4ab6274/src/vs/base/node/id.ts\nlet machineId: string;\n\nfunction getMacMachineId(): string | undefined {\n try {\n const macAddress = getMac();\n return crypto.createHash('sha256').update(macAddress, 'utf8').digest('hex');\n } catch (err) {\n return undefined;\n }\n}\n\nexport function getMachineId(): string {\n if (!machineId) {\n const id = getMacMachineId();\n machineId = id || uuid.v4();\n }\n return machineId;\n}\n","import {RootCertificateReader} from './certificateReaders';\n\nexport class CertificateReaderCache {\n private readonly cache: Map = new Map();\n\n get(platform: NodeJS.Platform): RootCertificateReader | undefined {\n return this.cache.get(platform);\n }\n\n set(platform: NodeJS.Platform, reader: RootCertificateReader): void {\n this.cache.set(platform, reader);\n }\n}\n","import child_process = require('child_process');\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport * as path from 'path';\nimport {CopilotTokenNotifier} from '../auth/copilotTokenNotifier';\nimport {Context} from '../context';\nimport {Logger, LogLevel} from '../logger';\nimport {CertificateReaderCache} from './certificateReaderCache';\n\nconst certLogger = new Logger(LogLevel.WARN, 'certificates');\n\nexport abstract class RootCertificateReader {\n abstract getAllRootCAs(): Promise;\n}\n\nexport const getRootCertificateReader = (\n ctx: Context,\n platform: NodeJS.Platform = process.platform\n): RootCertificateReader => {\n return new FeatureAwareCertificateReader(\n ctx.get(CopilotTokenNotifier),\n createRealReader(platform, ctx),\n new EmptyRootCertificateReader()\n );\n};\n\nclass FeatureAwareCertificateReader extends RootCertificateReader {\n private delegate: RootCertificateReader;\n constructor(\n notifier: CopilotTokenNotifier,\n private readonly realReader: RootCertificateReader,\n private readonly noopReader: RootCertificateReader\n ) {\n super();\n this.delegate = realReader;\n notifier.on('onCopilotToken', token => {\n this.delegate = token.getTokenValue('ssc') === '1' ? this.realReader : this.noopReader;\n });\n }\n\n getAllRootCAs(): Promise {\n return this.delegate.getAllRootCAs();\n }\n}\n\nconst createRealReader = (platform: NodeJS.Platform, ctx: Context) => {\n const cachedReader = ctx.get(CertificateReaderCache).get(platform);\n if (cachedReader) return cachedReader;\n const realReader = createPlatformRootCertificateReader(platform);\n const envReader = new EnvironmentVariableRootCertificateReader(realReader);\n const cachingReader = new CachingRootCertificateReader(envReader);\n const errorHandlingReader = new ErrorHandlingCertificateReader(ctx, cachingReader);\n ctx.get(CertificateReaderCache).set(platform, errorHandlingReader);\n return errorHandlingReader;\n};\n\nconst createPlatformRootCertificateReader = (platform: NodeJS.Platform) => {\n switch (platform) {\n case 'linux':\n return new LinuxRootCertificateReader();\n case 'darwin':\n return new MacRootCertificateReader();\n case 'win32':\n return new WindowsRootCertificateReader();\n default:\n return new UnsupportedPlatformRootCertificateReader();\n }\n};\n\nclass ErrorHandlingCertificateReader extends RootCertificateReader {\n constructor(private readonly ctx: Context, private readonly delegate: RootCertificateReader) {\n super();\n }\n\n async getAllRootCAs(): Promise {\n try {\n return await this.delegate.getAllRootCAs();\n } catch (ex) {\n certLogger.warn(this.ctx, `Failed to read root certificates: ${ex}`);\n return [];\n }\n }\n}\n\nclass CachingRootCertificateReader extends RootCertificateReader {\n private certificates: string[] | undefined;\n\n constructor(private readonly delegate: RootCertificateReader) {\n super();\n }\n\n async getAllRootCAs(): Promise {\n if (!this.certificates) {\n this.certificates = await this.delegate.getAllRootCAs();\n }\n return this.certificates;\n }\n}\n\nclass EnvironmentVariableRootCertificateReader extends RootCertificateReader {\n constructor(private readonly delegate: RootCertificateReader) {\n super();\n }\n\n async getAllRootCAs(): Promise {\n const certs = await this.delegate.getAllRootCAs();\n const extraCertsFile = process.env.NODE_EXTRA_CA_CERTS;\n if (!extraCertsFile) return certs;\n const extraCerts = await readCertsFromFile(extraCertsFile);\n return certs.concat(extraCerts);\n }\n}\n\nclass LinuxRootCertificateReader extends RootCertificateReader {\n override async getAllRootCAs(): Promise {\n let rootCAs: string[] = [];\n for (const certPath of ['/etc/ssl/certs/ca-certificates.crt', '/etc/ssl/certs/ca-bundle.crt']) {\n const certs = await readCertsFromFile(certPath);\n rootCAs = rootCAs.concat(certs);\n }\n return rootCAs;\n }\n}\n\nclass MacRootCertificateReader extends RootCertificateReader {\n override async getAllRootCAs(): Promise {\n const macCa = require('@roamhq/mac-ca');\n return macCa.all(macCa.der2.pem).filter((c: any) => c !== undefined);\n }\n}\n\nclass WindowsRootCertificateReader extends RootCertificateReader {\n private exePath: string | undefined;\n\n override async getAllRootCAs(): Promise {\n return new Promise((resolve, reject) => {\n const originalImpl = this.setupExecFileWithLargeBuffer(reject);\n try {\n const winCa = require('win-ca/api');\n if (!this.exePath) {\n this.exePath = this.setupCertificateFallbackExecutable();\n }\n winCa.exe(this.exePath);\n const rootCAs: string[] = [];\n winCa({\n format: winCa.der2.pem,\n fallback: true,\n async: true,\n ondata: (crt: any) => rootCAs.push(crt),\n onend: () => resolve(rootCAs),\n });\n } catch (err: any) {\n reject(err);\n } finally {\n (child_process as any).execFile = originalImpl;\n }\n });\n }\n\n private setupExecFileWithLargeBuffer(onError: (err: any) => void) {\n const realImpl = child_process.execFile;\n (child_process as any).execFile = function (\n command: string,\n args: string[],\n callback: (error: Error | null, stdout: string, stderr: string) => void\n ) {\n return realImpl(\n command,\n args,\n {\n maxBuffer: 1024 * 1024 * 12,\n },\n function (error) {\n callback(error, '', ''); // unused by win-ca\n onError(error);\n }\n );\n };\n return realImpl;\n }\n\n // win-ca uses a fallback executable to read the root certificates on Windows.\n // This executable is bundled with the agent and needs to be extraced into a file in order for the operating system to actually run it.\n setupCertificateFallbackExecutable() {\n let base = __dirname;\n if (path.basename(__dirname) === 'dist') {\n base = path.dirname(__dirname);\n }\n const exe = path.join(base, 'dist', 'roots.exe');\n const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'copilot-'));\n const tempExe = path.join(tempDir, 'copilot-find-certificates.exe');\n fs.copyFileSync(exe, tempExe);\n fs.chmodSync(tempExe, 0o755);\n return tempExe;\n }\n}\n\n// this class was introduced to test the error handling of the certificate reader\nclass UnsupportedPlatformRootCertificateReader extends RootCertificateReader {\n async getAllRootCAs(): Promise {\n throw new Error(`No certificate reader available for unsupported platform`);\n }\n}\n\nclass EmptyRootCertificateReader extends RootCertificateReader {\n async getAllRootCAs(): Promise {\n return [];\n }\n}\n\n/**\n * Returns a list of unique certificates read from a given file path. Rethrows\n * any error except file not found, which is ignored.\n */\nasync function readCertsFromFile(certFilePath: string): Promise {\n try {\n const content = await fs.promises.readFile(certFilePath, {encoding: 'utf8'});\n const certs = content.split(/(?=-----BEGIN CERTIFICATE-----)/g);\n const nonEmptyCerts = certs.filter(pem => pem.length > 0);\n const uniqueCerts = new Set(nonEmptyCerts);\n return Array.from(uniqueCerts);\n } catch (err: any) {\n // Rethrow all errors except file not found.\n if (err?.code !== 'ENOENT') {\n throw err;\n }\n }\n return [];\n}\n","import * as tls from 'tls';\nimport {Context} from '../context';\nimport {ProxySetting} from '../networking';\nimport {RootCertificateReader} from './certificateReaders';\n\n// equivalent to https://github.com/microsoft/vscode-proxy-agent/blob/49c0f39c327ce408ce69247a3db10a2b313d44a2/src/index.ts#L341\ninterface SecureContextOptionsWithVsCodeWorkaround extends tls.SecureContextOptions {\n _vscodeAdditionalCaCerts?: string[];\n}\n\nexport class RootCertificateConfigurator {\n private _certificateReader: RootCertificateReader;\n\n constructor(ctx: Context) {\n this._certificateReader = ctx.get(RootCertificateReader);\n }\n\n async enhanceProxySettings(proxySettings: ProxySetting): Promise {\n const certs = (await this.getCertificates()) as unknown as undefined;\n return {\n ...proxySettings,\n ca: certs, // tls.connect accepts Buffer[] or string[]\n };\n }\n\n async getCertificates(): Promise {\n const certificates = await this._certificateReader.getAllRootCAs();\n if (certificates.length === 0) {\n return undefined; // do not override ca if there are no certificates\n }\n return certificates;\n }\n\n async applyToRequestOptions(requestOptions: any) {\n // VSCode tries to help extensions by patching `tls.createSecureContext` (which is used underneath `tls.connect`) so it\n // picks up system certificates.\n // This is implemented two-fold: it patches `http.` and `https.` (but not helix or http2) methods to read the certificates,\n // decorate the requestion options (`SecureContextOptionsPatch`) so it can later on use the certificates\n // to pass them along to `tls.connect`. This now means you can't create a createSecureContext anymore without\n // an options object that doesn't contain `_vscodeAdditionalCaCerts` as they assume they already patched it.\n // So we have to fake this first part (while we can ignore the second part as we have to add our certs to\n // the the secureContext anyway for non-VSCode usecase)\n\n // https://github.com/microsoft/vscode-proxy-agent/blob/49c0f39c327ce408ce69247a3db10a2b313d44a2/src/index.ts\n const certs = await this._certificateReader.getAllRootCAs();\n const options: SecureContextOptionsWithVsCodeWorkaround = {\n _vscodeAdditionalCaCerts: certs,\n };\n\n // the part below is just adding known certificates to the secureContext so helix can use them\n requestOptions.secureContext = tls.createSecureContext(options);\n requestOptions.ca = certs;\n requestOptions.cert = certs;\n certs.map((cert: any) => {\n requestOptions.secureContext.context.addCACert(cert);\n });\n }\n}\n","import * as helixFetch from '@adobe/helix-fetch';\nimport {BuildInfo} from '../config';\nimport {Context} from '../context';\nimport {FetchOptions, Fetcher, IAbortController, ProxySetting, Response} from '../networking';\nimport {RootCertificateConfigurator} from './certificates';\nimport {ProxySocketFactory, SocketError} from './proxySockets';\n\nexport class HelixFetcher extends Fetcher {\n private _proxySettings?: ProxySetting;\n private certificateConfigurator: RootCertificateConfigurator;\n private fetchApi: ReturnType;\n\n constructor(private ctx: Context) {\n super();\n this.fetchApi = this.createFetchApi(ctx);\n this.certificateConfigurator = new RootCertificateConfigurator(ctx);\n }\n\n private createSocketFactory = (userSettings: ProxySetting, rejectUnauthorized?: boolean) => {\n return async (requestOptions: any) => {\n requestOptions.rejectUnauthorized = rejectUnauthorized;\n requestOptions.timeout = userSettings.connectionTimeoutInMs;\n await this.certificateConfigurator.applyToRequestOptions(requestOptions);\n const proxySettings = await this.certificateConfigurator.enhanceProxySettings(userSettings);\n const socketFactory = new ProxySocketFactory(proxySettings);\n try {\n return await socketFactory.createSocket(requestOptions);\n } catch (error: any) {\n if (error instanceof SocketError && error.cause) {\n throw new Error(`${error.message}, cause=${error.cause.message}`);\n }\n throw new Error(error.message);\n }\n };\n };\n\n set proxySettings(value: ProxySetting | undefined) {\n this._proxySettings = value;\n this.fetchApi = this.createFetchApi(this.ctx);\n }\n\n get proxySettings(): ProxySetting | undefined {\n return this._proxySettings;\n }\n\n override set rejectUnauthorized(value: boolean | undefined) {\n super.rejectUnauthorized = value;\n this.fetchApi = this.createFetchApi(this.ctx);\n }\n\n override get rejectUnauthorized(): boolean | undefined {\n return super.rejectUnauthorized;\n }\n\n private createFetchApi(ctx: Context) {\n const buildInfo = ctx.get(BuildInfo);\n if (super.rejectUnauthorized === false) {\n // we need to set this to false to allow self-signed certificates\n // all approaches to only do this directly for `helix-fetcher` and `tunnel` failed\n // as the underlying `tls` library was still trying to verify the certificate\n // see #2187 for more detailled information\n process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';\n }\n return helixFetch.context({\n userAgent: `GithubCopilot/${buildInfo.getVersion()}`,\n socketFactory: this._proxySettings\n ? this.createSocketFactory(this._proxySettings, super.rejectUnauthorized)\n : undefined,\n rejectUnauthorized: super.rejectUnauthorized,\n });\n }\n\n override async fetch(url: string, options: FetchOptions): Promise {\n const helixOptions = {\n ...options,\n body: options.body ? options.body : options.json,\n signal: options.signal as helixFetch.AbortSignal | undefined,\n };\n await this.certificateConfigurator.applyToRequestOptions(helixOptions);\n const certs = await this.certificateConfigurator.getCertificates();\n this.fetchApi.setCA(certs);\n const resp = await this.fetchApi.fetch(url, helixOptions);\n return new Response(\n resp.status,\n resp.statusText,\n resp.headers,\n () => resp.text(),\n () => resp.json(),\n async () => resp.body\n );\n }\n\n override disconnectAll(): Promise {\n return this.fetchApi.reset();\n }\n\n override makeAbortController(): IAbortController {\n return new helixFetch.AbortController();\n }\n}\n","import * as http from 'http';\nimport {IncomingMessage, RequestOptions} from 'http';\nimport {Socket} from 'net';\nimport {ProxySetting} from '../networking';\n\nexport class SocketError extends Error {\n constructor(message: string, public readonly cause?: Error, public readonly statusCode?: number) {\n super(message);\n }\n}\n\nexport class ProxySocketFactory {\n constructor(private readonly proxySettings: ProxySetting) {}\n\n public async createSocket(options: RequestOptions): Promise {\n const connectOptions = this.createConnectRequestOptions(options);\n return new Promise((resolve, reject) => {\n const connectRequest = http.request(connectOptions);\n connectRequest.useChunkedEncodingByDefault = false;\n connectRequest.once('connect', (res: IncomingMessage, socket: Socket, head: Buffer) => {\n connectRequest.removeAllListeners();\n socket.removeAllListeners();\n\n if (res.statusCode !== 200) {\n socket.destroy();\n reject(new SocketError('tunneling socket could not be established', undefined, res.statusCode));\n } else if (head.length > 0) {\n socket.destroy();\n reject(new SocketError('got illegal response body from proxy'));\n } else {\n resolve(socket);\n }\n });\n connectRequest.once('error', (cause: Error) => {\n connectRequest.removeAllListeners();\n reject(new SocketError('tunneling socket could not be established', cause));\n });\n connectRequest.on('timeout', () => {\n reject(\n new SocketError(\n `tunneling socket could not be established, proxy socket connection timeout while connecting to ${connectOptions.host}:${connectOptions.port}`\n )\n );\n });\n connectRequest.end();\n });\n }\n\n private createConnectRequestOptions(options: RequestOptions) {\n const connectOptions: any = {\n ...this.proxySettings,\n method: 'CONNECT',\n path: options.host + ':' + options.port,\n agent: false,\n headers: {\n host: options.host + ':' + options.port,\n },\n timeout: options.timeout,\n };\n\n if (options.localAddress) {\n connectOptions.localAddress = options.localAddress;\n }\n if (connectOptions.proxyAuth) {\n connectOptions.headers['Proxy-Authorization'] =\n 'Basic ' + Buffer.from(connectOptions.proxyAuth).toString('base64');\n }\n return connectOptions;\n }\n}\n","import {URI, Utils} from 'vscode-uri';\nimport {CopilotTokenManager, GitHubToken} from './auth/copilotToken';\nimport {Context} from './context';\n\nconst DotComAuthority = 'github.com';\nconst DotComUrl = `https://${DotComAuthority}`;\n\nexport abstract class NetworkConfiguration {\n /**\n * Are we pointed at a GitHub Enterprise instance?\n */\n abstract isGitHubEnterprise(): boolean;\n\n /**\n * Returns the auth authority, e.g. \"github.com\"\n */\n abstract getAuthAuthority(): string;\n\n /**\n * The Copilot token URL\n */\n abstract getTokenUrl(githubToken: GitHubToken): string;\n\n /**\n * The Copilot notification URL\n */\n abstract getNotificationUrl(githubToken: GitHubToken): string;\n\n /**\n * The URL to use for initiating a login with device flow\n */\n abstract getDeviceFlowStartUrl(): string;\n\n /**\n * The URL to use for completing a login with device flow\n */\n abstract getDeviceFlowCompletionUrl(): string;\n\n /**\n * The URL to use for obtain user account information\n */\n abstract getUserInfoUrl(): string;\n\n /**\n * Update the configuration to reference a new URL\n */\n abstract updateBaseUrl(ctx: Context, newUrl?: string): void;\n}\n\nexport class DefaultNetworkConfiguration extends NetworkConfiguration {\n private baseUri!: URI;\n private isEnterprise!: boolean;\n private tokenUrl!: string;\n private notificationUrl!: string;\n private deviceFlowStartUrl!: string;\n private deviceFlowCompletionUrl!: string;\n private userInfoUrl!: string;\n\n constructor(url = DotComUrl) {\n super();\n this.recalculateUrls(url);\n }\n\n isGitHubEnterprise(): boolean {\n return this.isEnterprise;\n }\n\n getAuthAuthority(): string {\n return this.baseUri.authority;\n }\n\n getTokenUrl(githubToken: GitHubToken): string {\n return githubToken.devOverride?.copilotTokenUrl ?? this.tokenUrl;\n }\n\n getNotificationUrl(githubToken: GitHubToken): string {\n return githubToken.devOverride?.notificationUrl ?? this.notificationUrl;\n }\n\n getDeviceFlowStartUrl(): string {\n return this.deviceFlowStartUrl;\n }\n\n getDeviceFlowCompletionUrl(): string {\n return this.deviceFlowCompletionUrl;\n }\n\n getUserInfoUrl(): string {\n return this.userInfoUrl;\n }\n\n updateBaseUrl(ctx: Context, newUrl: string = DotComUrl): void {\n const oldUri = this.baseUri;\n\n this.recalculateUrls(newUrl!);\n\n if (oldUri.toString() !== this.baseUri.toString()) {\n ctx.get(CopilotTokenManager).resetCopilotToken(ctx);\n }\n }\n\n protected recalculateUrls(url: string): void {\n this.baseUri = URI.parse(url);\n const apiUri = URI.parse(`${this.baseUri.scheme}://api.${this.baseUri.authority}`);\n this.isEnterprise = this.baseUri.authority !== DotComAuthority;\n this.tokenUrl = Utils.joinPath(apiUri, '/copilot_internal/v2/token').toString();\n this.notificationUrl = Utils.joinPath(apiUri, '/copilot_internal/notification').toString();\n this.deviceFlowStartUrl = Utils.joinPath(this.baseUri, '/login/device/code').toString();\n this.deviceFlowCompletionUrl = Utils.joinPath(this.baseUri, '/login/oauth/access_token').toString();\n this.userInfoUrl = Utils.joinPath(apiUri, '/user').toString();\n }\n}\n","import * as helixFetch from '@adobe/helix-fetch';\nimport * as util from 'util';\nimport {ICancellationToken} from './common/cancellation';\nimport {EditorSession, editorVersionHeaders} from './config';\nimport {Context} from './context';\nimport {HeaderContributors} from './headerContributors';\nimport {TelemetryData, telemetry} from './telemetry';\n\nexport type ProxySetting = {\n /** Proxy URL. Defaults to 'localhost' */\n host: string;\n /** Proxy port. Defaults to 80 */\n port: number;\n /** Basic authorization for proxy server if necessary */\n proxyAuth?: string | undefined;\n /** Header fields for proxy server if necessary */\n headers: Record;\n connectionTimeoutInMs?: number;\n /** certificate authorities for proxy server if necessary */\n ca?: Buffer[] | undefined;\n};\n\n/**\n * Encapsulates all the functionality related to making GET/POST requests using\n * different libraries (and in the future, different environments like web vs\n * node).\n */\nexport abstract class Fetcher {\n private _rejectUnauthorized: boolean | undefined;\n abstract fetch(url: string, options: FetchOptions): Promise;\n abstract disconnectAll(): Promise;\n abstract makeAbortController(): IAbortController;\n abstract set proxySettings(value: ProxySetting | undefined);\n abstract get proxySettings(): ProxySetting | undefined;\n set rejectUnauthorized(value: boolean | undefined) {\n this._rejectUnauthorized = value;\n }\n get rejectUnauthorized(): boolean | undefined {\n return this._rejectUnauthorized;\n }\n}\n\nexport function isAbortError(e: any): boolean {\n return e instanceof helixFetch.AbortError;\n}\n\n/** A basic version of http://developer.mozilla.org/en-US/docs/Web/API/Response */\nexport class Response {\n ok = this.status >= 200 && this.status < 300;\n constructor(\n readonly status: number,\n readonly statusText: string,\n readonly headers: IHeaders,\n private readonly getText: () => Promise,\n private readonly getJson: () => Promise,\n private readonly getBody: () => Promise\n ) {}\n\n async text(): Promise {\n return this.getText();\n }\n\n async json(): Promise {\n return this.getJson();\n }\n\n /** Async version of the standard .body field. */\n async body(): Promise {\n return this.getBody();\n }\n}\n\n/** These are the options we currently use, for ease of reference. */\nexport interface FetchOptions {\n headers?: {[name: string]: string};\n body?: string;\n timeout?: number;\n json?: any;\n method?: 'GET' | 'POST';\n signal?: IAbortSignal;\n}\n\nexport interface IAbortSignal {\n readonly aborted: boolean;\n // Real implementations will have some methods/properties for subscribing\n // to abort events, but these are implementation-dependent and not needed\n // in Copilot code.\n}\n\nexport interface IAbortController {\n readonly signal: IAbortSignal;\n abort(): void;\n}\n\nexport interface IHeaders extends Iterable<[string, string]> {\n append(name: string, value: string): void;\n delete(name: string): void;\n get(name: string): string | null;\n has(name: string): boolean;\n set(name: string, value: string): void;\n\n entries(): Iterator<[string, string]>;\n keys(): Iterator;\n values(): Iterator;\n [Symbol.iterator](): Iterator<[string, string]>;\n}\n\nexport type ReqHeaders = {[key: string]: string};\n/**\n * The HeaderContributor provides the interface which allows implmentors\n * to decorate a request's `headers` object with additional key / value pairs.\n */\nexport interface HeaderContributor {\n contributeHeaderValues(headers: ReqHeaders): void;\n}\n\n// The maximum time to wait for a request to complete.\nconst requestTimeoutMs = 30 * 1000; // 30 seconds\n\nexport function postRequest(\n ctx: Context,\n url: string,\n secretKey: string,\n intent: string | undefined, // Must be passed in, even if explicitly `undefined`\n requestId: string,\n body?: Record,\n cancelToken?: ICancellationToken\n): Promise {\n const headers: ReqHeaders = {\n Authorization: util.format('Bearer %s', secretKey),\n 'X-Request-Id': requestId,\n 'Openai-Organization': 'github-copilot',\n 'VScode-SessionId': ctx.get(EditorSession).sessionId,\n 'VScode-MachineId': ctx.get(EditorSession).machineId,\n ...editorVersionHeaders(ctx),\n };\n\n ctx.get(HeaderContributors).contributeHeaders(headers);\n\n if (intent) {\n headers['OpenAI-Intent'] = intent;\n }\n\n const request: FetchOptions = {\n method: 'POST',\n headers: headers,\n json: body,\n timeout: requestTimeoutMs,\n };\n\n const fetcher = ctx.get(Fetcher);\n if (cancelToken) {\n const abort = fetcher.makeAbortController();\n cancelToken.onCancellationRequested(() => {\n // abort the request when the token is canceled\n telemetry(\n ctx,\n 'networking.cancelRequest',\n TelemetryData.createAndMarkAsIssued({headerRequestId: requestId})\n );\n abort.abort();\n });\n // pass the controller abort signal to the request\n request.signal = abort.signal;\n }\n\n const requestPromise = fetcher.fetch(url, request).catch(reason => {\n if (\n reason.code == 'ECONNRESET' ||\n reason.code == 'ETIMEDOUT' ||\n reason.code == 'ERR_HTTP2_INVALID_SESSION' ||\n reason.message == 'ERR_HTTP2_GOAWAY_SESSION'\n ) {\n // disconnect and retry the request once if the connection was reset\n telemetry(ctx, 'networking.disconnectAll');\n return fetcher.disconnectAll().then(() => {\n return fetcher.fetch(url, request);\n });\n } else {\n throw reason;\n }\n });\n return requestPromise;\n}\n","export interface ActionItem {\n title: string;\n [key: string]: string | boolean | object;\n}\nexport abstract class NotificationSender {\n abstract showWarningMessage(message: string, ...actions: ActionItem[]): Promise;\n}\n","import {ConfigKey, getConfig} from '../config';\nimport {Context} from '../context';\nimport {Features} from '../experiments/features';\nimport {TelemetryData} from '../telemetry';\nimport {isRunningInTest} from '../testing/runtimeMode';\n\n// Engine Urls\n\n// exported for test\nexport const OPENAI_PROXY_HOST = 'https://copilot-proxy.githubusercontent.com';\n\nconst V1_ENGINES_COPILOT_CODEX = '/v1/engines/copilot-codex';\n\nexport const TEST_ENGINE_PATHS = [V1_ENGINES_COPILOT_CODEX];\n\n// Config methods\n\n// This method will return \"\" if no override is set, otherwise it is expected to return a valid url\nfunction _getOverrideProxyURL(ctx: Context): string {\n if (isRunningInTest(ctx)) {\n return getConfig(ctx, ConfigKey.DebugTestOverrideProxyUrl);\n }\n return getConfig(ctx, ConfigKey.DebugOverrideProxyUrl);\n}\n\nexport function getProxyURLWithPath(ctx: Context, path: string) {\n let proxyUrl = _getOverrideProxyURL(ctx);\n if (proxyUrl.length == 0) {\n proxyUrl = OPENAI_PROXY_HOST;\n }\n return `${proxyUrl}${path}`;\n}\n\nasync function _getEnginePath(\n ctx: Context,\n repoNwo: string,\n fileType: string,\n dogFood: string,\n userKind: string,\n telemetryData?: TelemetryData\n): Promise {\n const engineOverride = getConfig(ctx, ConfigKey.DebugOverrideEngine);\n // if option is set, takes precedence over any other logic\n if (engineOverride) {\n return `/v1/engines/${engineOverride}`;\n }\n\n // engine set by ExP variable copilotcustomengine\n const customEngine = await ctx.get(Features).customEngine({repoNwo, fileType, userKind, dogFood, telemetryData});\n if (customEngine !== '') {\n return `/v1/engines/${customEngine}`;\n }\n\n // Fallback to default model name\n return V1_ENGINES_COPILOT_CODEX;\n}\n\nexport async function getEngineURL(\n ctx: Context,\n nwo = '',\n fileType: string,\n dogfood = '',\n userKind = '',\n telemetryData?: TelemetryData\n): Promise {\n return getProxyURLWithPath(ctx, await _getEnginePath(ctx, nwo, fileType, dogfood, userKind, telemetryData));\n}\n","import {ClientHttp2Stream} from 'http2';\nimport * as util from 'util';\nimport {CopilotTokenManager} from '../auth/copilotToken';\nimport {ICancellationToken} from '../common/cancellation';\nimport {asyncIterableFilter, asyncIterableMap} from '../common/iterableHelpers';\nimport {ConfigKey, getConfig, getLanguageConfig} from '../config';\nimport {Context} from '../context';\nimport {Features} from '../experiments/features';\nimport {LogLevel, Logger, logger} from '../logger';\nimport {Response, isAbortError, postRequest} from '../networking';\nimport {StatusReporter} from '../progress';\nimport {Prompt} from '../prompt/prompt';\nimport {MaybeRepoInfo, tryGetGitHubNWO} from '../prompt/repository';\nimport {\n TelemetryData,\n TelemetryProperties,\n logEnginePrompt,\n now,\n telemetrizePromptLength,\n telemetry,\n} from '../telemetry';\nimport {APIChoice, RequestId, getTemperatureForSamples} from './openai';\nimport {SSEProcessor, prepareSolutionForReturn} from './stream';\n\nconst fetchLogger = new Logger(LogLevel.INFO, 'fetch');\n\nexport enum CopilotUiKind {\n GhostText = 'ghostText',\n Panel = 'synthesize', // legacy value from the synthesize codelens\n ConversationPanel = 'conversationPanel', // conversation chat panel\n ConversationInline = 'conversationInline', // conversation inline editor\n}\n\n/** OAI API completion request, along with extra fields specific to Copilot. */\nexport declare interface CompletionRequest {\n /**\n * The prompt prefix to send to the model. Called `prompt` here for compatibility\n * with the OpenAI API.\n */\n prompt: string;\n /** The prompt suffix to send to the model. */\n suffix: string;\n /** Whether to stream back a response in SSE format. */\n stream: boolean;\n /** Maximum number of tokens the model should generate. */\n max_tokens: number;\n /** How many parallel completions the model should generate (default 1). */\n n: number;\n /** Non-negative temperature sampling parameter (default 1). */\n temperature: number;\n /** Non-negative nucleus sampling parameter (defaults 1). */\n top_p: number;\n /** Strings that will cause the model to stop generating text. */\n stop: string[];\n /** Number of alternative tokens to include logprob data for. */\n logprobs: number;\n /** Likelihood of specified tokens appearing in the completion. */\n logit_bias?: {[key: string]: number};\n\n /** Copilot-only: NWO of repository, if any */\n nwo: string;\n /** Copilot-only: extra arguments for completion processing. */\n extra: CompletionRequestExtra;\n}\n\n/**\n * Completion request arguments that are Copilot-specific and don't exist in\n * the OAI API.\n */\nexport declare interface CompletionRequestExtra {\n /** The VSCode language ID for the file. */\n language: string;\n /**\n * If true, the proxy will trim completions to the current block/line based\n * on the force_indent and/or next_indent values.\n */\n trim_by_indentation?: boolean;\n /**\n * If set, will let the completion go on until a (non-continuation) line\n * comes through with the given indentation level.\n */\n force_indent?: number;\n /** Number of leading space or tab characters in the next non-empty line. */\n next_indent?: number;\n /**\n * For testing only: A list of completions to be used instead of calling the\n * model. The server will act as if the model returned these completions and\n * postprocess them as it normally postprocesses model responses (i.e.\n * filtering, trimming, etc.).\n */\n test_completions?: string[];\n /**\n The number of tokens (prefix)\n */\n prompt_tokens: number;\n /**\n The number of tokens (suffix)\n */\n suffix_tokens: number;\n}\n\n/**\n * Request parameters other than the prompt, which will be included in the OAI\n * API request.\n */\nexport declare type PostOptions = Partial>;\n\n// Request helpers\n\nexport function getRequestId(response: Response, json?: any): RequestId {\n return {\n headerRequestId: response.headers.get('x-request-id') || '',\n completionId: json && json.id ? json.id : '',\n created: json && json.created ? json.created : 0,\n serverExperiments: response.headers.get('X-Copilot-Experiment') || '',\n deploymentId: response.headers.get('azureml-model-deployment') || '',\n };\n}\n\nexport function getProcessingTime(response: Response): number {\n const reqIdStr = response.headers.get('openai-processing-ms');\n if (reqIdStr) {\n return parseInt(reqIdStr, 10);\n }\n return 0;\n}\n\nexport function extractEngineName(ctx: Context, engineUrl: string): string {\n // Extract the last path component of the URL\n const engineName = engineUrl.split('/').pop();\n if (!engineName) {\n fetchLogger.error(ctx, 'Malformed engine URL: ' + engineUrl);\n // Fallback to full URL if there is an error\n return engineUrl;\n }\n return engineName;\n}\n\nfunction uiKindToIntent(uiKind: CopilotUiKind): string | undefined {\n switch (uiKind) {\n case CopilotUiKind.GhostText:\n return 'copilot-ghost';\n case CopilotUiKind.Panel:\n return 'copilot-panel';\n }\n}\n\n// Request methods\n\n/**\n * Takes a (part of a) completion resolves to the offset of the end of the\n * block, or undefined if the block is not yet finished.\n */\nexport interface FinishedCallback {\n (text: string): Promise;\n}\n\nexport interface CompletionParams {\n prompt: Prompt;\n languageId: string;\n repoInfo: MaybeRepoInfo;\n engineUrl: string;\n count: number;\n uiKind: CopilotUiKind;\n allowEmptyChoices?: boolean;\n postOptions?: PostOptions;\n ourRequestId: string;\n requestLogProbs?: boolean;\n}\n\n/** An interface to abstract away the network request to OpenAI, allowing for\n * fake or mock implementations. It's deliberately injected relatively high\n * in the call stack to avoid having to reconstruct some of the lower-level details\n * of the OpenAI API.\n *\n * Currently only used for Ghost Text and Open Copilot, as auto-complete processes\n * the results in a different way.\n */\nexport abstract class OpenAIFetcher {\n abstract fetchAndStreamCompletions(\n ctx: Context,\n params: CompletionParams,\n baseTelemetryData: TelemetryData,\n finishedCb: FinishedCallback,\n cancellationToken?: ICancellationToken,\n telemetryProperties?: TelemetryProperties\n ): Promise;\n}\n\nexport interface CompletionResults {\n type: 'success';\n choices: AsyncIterable;\n getProcessingTime(): number;\n}\n\nexport type CompletionError = {type: 'failed'; reason: string} | {type: 'canceled'; reason: string};\n\nfunction fetchWithInstrumentation(\n ctx: Context,\n prompt: Prompt,\n engineUrl: string,\n endpoint: string,\n ourRequestId: string,\n request: Partial,\n secretKey: string,\n uiKind: CopilotUiKind,\n cancel?: ICancellationToken,\n telemetryProperties?: TelemetryProperties\n): Promise | undefined {\n const statusReporter = ctx.get(StatusReporter);\n const uri = util.format('%s/%s', engineUrl, endpoint);\n if (!secretKey) {\n // If not key is set we error\n logger.error(ctx, `Failed to send request to ${uri} due to missing key`);\n return;\n }\n\n let telemetryData = TelemetryData.createAndMarkAsIssued(\n {\n endpoint: endpoint,\n engineName: extractEngineName(ctx, engineUrl),\n uiKind: uiKind,\n },\n telemetrizePromptLength(prompt)\n );\n if (telemetryProperties) {\n // Extend telemetryData with specified properties if provided\n telemetryData = telemetryData.extendedBy(telemetryProperties);\n }\n\n for (const [key, value] of Object.entries(request)) {\n if (key == 'prompt' || key == 'suffix') {\n continue;\n } // Skip prompt (PII)\n telemetryData.properties[`request.option.${key}`] = JSON.stringify(value) ?? 'undefined';\n }\n\n // The request ID we are passed in is sent in the request to the proxy, and included in our pre-request telemetry.\n // We hope (but do not rely on) that the model will use the same ID in the response, allowing us to correlate\n // the request and response.\n telemetryData.properties['headerRequestId'] = ourRequestId;\n\n telemetry(ctx, 'request.sent', telemetryData);\n\n const requestStart = now();\n const intent = uiKindToIntent(uiKind);\n\n // Wrap the Promise with success/error callbacks so we can log/measure it\n return postRequest(ctx, uri, secretKey, intent, ourRequestId, request, cancel)\n .then(response => {\n // This ID is hopefully the one the same as ourRequestId, but it is not guaranteed.\n // If they are different then we will override the original one we set in telemetryData above.\n const modelRequestId = getRequestId(response, undefined);\n telemetryData.extendWithRequestId(modelRequestId);\n\n // TODO: Add response length (requires parsing)\n const totalTimeMs = now() - requestStart;\n telemetryData.measurements.totalTimeMs = totalTimeMs;\n\n logger.info(ctx, `request.response: [${uri}] took ${totalTimeMs} ms`);\n logger.debug(ctx, 'request.response properties', telemetryData.properties);\n logger.debug(ctx, 'request.response measurements', telemetryData.measurements);\n\n logger.debug(ctx, `prompt: ${JSON.stringify(prompt)}`);\n\n telemetry(ctx, 'request.response', telemetryData);\n\n return response;\n })\n .catch(error => {\n if (isAbortError(error)) {\n // If we cancelled a network request, we don't want to log a `request.error`\n throw error;\n }\n statusReporter.setWarning(error.message);\n const warningTelemetry = telemetryData.extendedBy({error: 'Network exception'});\n telemetry(ctx, 'request.shownWarning', warningTelemetry);\n\n telemetryData.properties.code = String(error.code ?? '');\n telemetryData.properties.errno = String(error.errno ?? '');\n telemetryData.properties.message = String(error.message ?? '');\n telemetryData.properties.type = String(error.type ?? '');\n\n const totalTimeMs = now() - requestStart;\n telemetryData.measurements.totalTimeMs = totalTimeMs;\n\n logger.debug(ctx, `request.response: [${uri}] took ${totalTimeMs} ms`);\n logger.debug(ctx, 'request.error properties', telemetryData.properties);\n logger.debug(ctx, 'request.error measurements', telemetryData.measurements);\n\n logger.exception(ctx, error, `Request Error`);\n telemetry(ctx, 'request.error', telemetryData);\n\n throw error;\n })\n .finally(() => {\n logEnginePrompt(ctx, prompt, telemetryData);\n });\n}\n\nexport function postProcessChoices(choices: AsyncIterable, allowEmptyChoices?: boolean) {\n if (allowEmptyChoices ?? false) {\n return choices;\n } else {\n return asyncIterableFilter(choices, async choice => choice.completionText.trim().length > 0);\n }\n}\n\nexport class LiveOpenAIFetcher extends OpenAIFetcher {\n async fetchAndStreamCompletions(\n ctx: Context,\n params: CompletionParams,\n baseTelemetryData: TelemetryData,\n finishedCb: FinishedCallback,\n cancel?: ICancellationToken,\n telemetryProperties?: TelemetryProperties\n ): Promise {\n const statusReporter = ctx.get(StatusReporter);\n const endpoint = 'completions';\n const response = await this.fetchWithParameters(ctx, endpoint, params, cancel, telemetryProperties);\n if (response === 'not-sent') {\n return {type: 'canceled', reason: 'before fetch request'};\n }\n if (cancel?.isCancellationRequested) {\n const body = await response!.body();\n try {\n // Destroy the stream so that the server is hopefully notified we don't want any more data\n // and can cancel/forget about the request itself.\n (body as ClientHttp2Stream).destroy();\n } catch (e) {\n logger.exception(ctx, e, `Error destroying stream`);\n }\n return {type: 'canceled', reason: 'after fetch request'};\n }\n\n if (response === undefined) {\n const telemetryData = this.createTelemetryData(endpoint, ctx, params);\n statusReporter.setWarning();\n telemetryData.properties.error = 'Response was undefined';\n telemetry(ctx, 'request.shownWarning', telemetryData);\n return {type: 'failed', reason: 'fetch response was undefined'};\n }\n\n if (response.status !== 200) {\n const telemetryData = this.createTelemetryData(endpoint, ctx, params);\n return this.handleError(ctx, statusReporter, telemetryData, response);\n }\n const dropCompletionReasons = await ctx.get(Features).dropCompletionReasons();\n const processor = await SSEProcessor.create(\n ctx,\n params.count,\n response,\n baseTelemetryData,\n dropCompletionReasons,\n cancel\n );\n const finishedCompletions = processor.processSSE(finishedCb);\n const choices = asyncIterableMap(finishedCompletions, async solution =>\n prepareSolutionForReturn(ctx, solution, baseTelemetryData)\n );\n return {\n type: 'success',\n choices: postProcessChoices(choices, params.allowEmptyChoices),\n getProcessingTime: () => getProcessingTime(response as Response),\n };\n }\n\n private createTelemetryData(endpoint: string, ctx: Context, params: CompletionParams) {\n return TelemetryData.createAndMarkAsIssued({\n endpoint: endpoint,\n engineName: extractEngineName(ctx, params.engineUrl),\n uiKind: params.uiKind,\n headerRequestId: params.ourRequestId,\n });\n }\n\n async fetchWithParameters(\n ctx: Context,\n endpoint: string,\n params: CompletionParams,\n cancel?: ICancellationToken,\n telemetryProperties?: TelemetryProperties\n ): Promise {\n const stops = getLanguageConfig(ctx, ConfigKey.Stops);\n\n const disableLogProb = await ctx.get(Features).disableLogProb();\n const request: Partial = {\n prompt: params.prompt.prefix,\n suffix: params.prompt.suffix,\n max_tokens: getConfig(ctx, ConfigKey.SolutionLength),\n temperature: getTemperatureForSamples(ctx, params.count),\n top_p: getConfig(ctx, ConfigKey.TopP),\n n: params.count,\n stop: stops,\n };\n\n if (params.requestLogProbs || !disableLogProb) {\n request['logprobs'] = 2; // Request that logprobs of 2 tokens (i.e. including the best alternative) be returned\n }\n\n const githubNWO = tryGetGitHubNWO(params.repoInfo);\n if (githubNWO !== undefined) {\n request['nwo'] = githubNWO;\n }\n\n if (params.postOptions) {\n Object.assign(request, params.postOptions);\n }\n\n if (cancel?.isCancellationRequested) {\n return 'not-sent';\n }\n\n logger.info(ctx, `[fetchCompletions] engine ${params.engineUrl}`);\n const response = await fetchWithInstrumentation(\n ctx,\n params.prompt,\n params.engineUrl,\n endpoint,\n params.ourRequestId,\n request,\n (\n await ctx.get(CopilotTokenManager).getCopilotToken(ctx)\n ).token,\n params.uiKind,\n cancel,\n telemetryProperties\n );\n return response;\n }\n async handleError(\n ctx: Context,\n statusReporter: StatusReporter,\n telemetryData: TelemetryData,\n response: Response\n ): Promise {\n statusReporter.setWarning();\n telemetryData.properties.error = `Response status was ${response.status}`;\n telemetryData.properties.status = String(response.status);\n telemetry(ctx, 'request.shownWarning', telemetryData);\n // check for 4xx responses which will point to a forbidden\n if (response.status === 401 || response.status === 403) {\n // Token has expired or invalid, fetch a new one on next request\n // TODO(drifkin): these actions should probably happen in vsc specific code\n ctx.get(CopilotTokenManager).resetCopilotToken(ctx, response.status);\n return {type: 'failed', reason: `token expired or invalid: ${response.status}`};\n }\n if (response.status === 499) {\n fetchLogger.info(ctx, 'Cancelled by server');\n return {type: 'failed', reason: 'canceled by server'};\n }\n const text = await response.text();\n if (response.status === 466) {\n statusReporter.setError(text);\n fetchLogger.info(ctx, text);\n return {type: 'failed', reason: `client not supported: ${text}`};\n }\n fetchLogger.error(ctx, 'Unhandled status from server:', response.status, text);\n return {type: 'failed', reason: `unhandled status from server: ${response.status} ${text}`};\n }\n}\n","import {ConfigKey, getConfig} from '../config';\nimport {Context} from '../context';\nimport {logger} from '../logger';\nimport {TelemetryData, logEngineCompletion} from '../telemetry';\nimport {isRunningInTest} from '../testing/runtimeMode';\n\nexport {CopilotUiKind, FinishedCallback, LiveOpenAIFetcher, OpenAIFetcher, getRequestId} from './fetch';\n\n// Number of tokens we limit prompts to.\nexport const MAX_PROMPT_LENGTH = 1500;\nexport const DEFAULT_CHARACTER_MULTIPLIER = 3;\n\nexport interface RequestId {\n headerRequestId: string;\n completionId: string;\n created: number;\n serverExperiments: string;\n deploymentId: string;\n}\n\nexport interface ModelInfo {\n modelURL: string;\n temperature: number;\n top_p: number;\n n: number;\n stop: string[];\n max_tokens: number;\n}\n\nexport interface APIChoice {\n completionText: string;\n meanLogProb: number | undefined;\n meanAlternativeLogProb: number | undefined;\n choiceIndex: number;\n requestId: RequestId;\n modelInfo: ModelInfo | undefined;\n tokens: string[];\n numTokens: number;\n blockFinished: boolean; // Whether the block completion was determined to be finished\n telemetryData: TelemetryData; // optional telemetry data providing background\n}\n\n/** How the logprobs field looks in the OpenAI API chunks. */\nexport interface APILogprobs {\n text_offset: number[];\n token_logprobs: number[];\n top_logprobs?: {[key: string]: number}[];\n tokens: string[];\n}\n\nexport interface APIJsonData {\n text: string;\n /* Joining this together produces `text`, due to the way the proxy works. */\n tokens: string[];\n /* These are only generated in certain situations. */\n logprobs?: APILogprobs;\n}\n\nexport function convertToAPIChoice(\n ctx: Context,\n completionText: string,\n jsonData: APIJsonData,\n choiceIndex: number,\n requestId: RequestId,\n blockFinished: boolean,\n telemetryData: TelemetryData,\n modelInfo?: ModelInfo\n): APIChoice {\n logEngineCompletion(ctx, completionText, jsonData, requestId, choiceIndex);\n\n // NOTE: It's possible that the completion text we care about is not exactly jsonData.text but a prefix,\n // so we pass it down directly.\n return {\n // NOTE: This does not contain stop tokens necessarily\n completionText: completionText,\n meanLogProb: calculateMeanLogProb(ctx, jsonData),\n meanAlternativeLogProb: calculateMeanAlternativeLogProb(ctx, jsonData),\n choiceIndex: choiceIndex,\n requestId: requestId,\n modelInfo: modelInfo,\n blockFinished: blockFinished,\n tokens: jsonData.tokens,\n numTokens: jsonData.tokens.length,\n telemetryData: telemetryData,\n };\n}\n\n// only called by content.ts\nexport async function* cleanupIndentChoices(\n choices: AsyncIterable,\n indentation: string\n): AsyncIterable {\n for await (const choice of choices) {\n const choiceCopy = {...choice};\n const completionLines = choiceCopy.completionText.split('\\n');\n // Iterate over all lines and trimLeft\n for (let i = 0; i < completionLines.length; ++i) {\n const newLine = completionLines[i].trimLeft();\n if (newLine === '') {\n completionLines[i] = newLine;\n } else {\n completionLines[i] = indentation + newLine;\n }\n }\n // Join the lines again and return\n choiceCopy.completionText = completionLines.join('\\n');\n yield choiceCopy;\n }\n}\n\n// Helper functions\nexport function calculateMeanLogProb(ctx: Context, jsonData: APIJsonData): number | undefined {\n if (!jsonData?.logprobs?.token_logprobs) {\n return undefined;\n }\n\n try {\n let logProbSum = 0.0;\n let numTokens = 0;\n\n // Limit to first 50 logprobs, avoids up-ranking longer solutions\n let iterLimit = 50;\n\n // First token is always null and last token can have multiple options if it hit a stop\n for (let i = 0; i < jsonData.logprobs.token_logprobs.length - 1 && iterLimit > 0; i++, iterLimit--) {\n logProbSum += jsonData.logprobs.token_logprobs[i];\n numTokens += 1;\n }\n\n if (numTokens > 0) {\n return logProbSum / numTokens;\n } else {\n return undefined;\n }\n } catch (e) {\n logger.exception(ctx, e, `Error calculating mean prob`);\n }\n}\n\nexport function calculateMeanAlternativeLogProb(ctx: Context, jsonData: APIJsonData): number | undefined {\n if (!jsonData?.logprobs?.top_logprobs) {\n return undefined;\n }\n\n try {\n let logProbSum = 0.0;\n let numTokens = 0;\n\n // Limit to first 50 logprobs, avoids up-ranking longer solutions\n let iterLimit = 50;\n\n for (let i = 0; i < jsonData.logprobs.token_logprobs.length - 1 && iterLimit > 0; i++, iterLimit--) {\n // copy the options object to avoid mutating the original\n const options = {...jsonData.logprobs.top_logprobs[i]};\n delete options[jsonData.logprobs.tokens[i]];\n logProbSum += Math.max(...Object.values(options));\n numTokens += 1;\n }\n\n if (numTokens > 0) {\n return logProbSum / numTokens;\n } else {\n return undefined;\n }\n } catch (e) {\n logger.exception(ctx, e, `Error calculating mean prob`);\n }\n}\n\n// Returns a temperature in range 0.0-1.0, using either a config setting,\n// or the following ranges: 1=0.0, <10=0.2, <20=0.4, >=20=0.8\nexport function getTemperatureForSamples(ctx: Context, numShots: number): number {\n if (isRunningInTest(ctx)) {\n return 0.0;\n }\n const configTemp = parseFloat(getConfig(ctx, ConfigKey.Temperature));\n if (configTemp >= 0 && configTemp <= 1) {\n return configTemp;\n }\n\n if (numShots <= 1) {\n return 0.0;\n } else if (numShots < 10) {\n return 0.2;\n } else if (numShots < 20) {\n return 0.4;\n } else {\n return 0.8;\n }\n}\n","import {ClientHttp2Stream} from 'http2';\nimport {ICancellationToken} from '../common/cancellation';\nimport {Context} from '../context';\nimport {Features} from '../experiments/features';\nimport {Logger, LogLevel} from '../logger';\nimport {Response} from '../networking';\nimport {telemetry, TelemetryData} from '../telemetry';\nimport {\n APIChoice,\n APIJsonData,\n APILogprobs,\n convertToAPIChoice,\n FinishedCallback,\n getRequestId,\n RequestId,\n} from './openai';\n\nconst streamChoicesLogger = new Logger(LogLevel.INFO, 'streamChoices');\n\n/** Gathers together many chunks of a single completion choice. */\nclass APIJsonDataStreaming {\n logprobs: number[][] = [];\n top_logprobs: {[key: string]: number}[][] = [];\n text: string[] = [];\n tokens: string[][] = [];\n text_offset: number[][] = [];\n\n append(choice: any) {\n if (choice.text) {\n this.text.push(choice.text);\n }\n if (choice.delta?.content) {\n this.text.push(choice.delta.content);\n }\n if (!choice.logprobs) {\n return;\n }\n\n this.tokens.push(choice.logprobs.tokens ?? []);\n this.text_offset.push(choice.logprobs.text_offset ?? []);\n this.logprobs.push(choice.logprobs.token_logprobs ?? []);\n this.top_logprobs.push(choice.logprobs.top_logprobs ?? []);\n }\n}\n\n// Given a string of lines separated by one or more newlines, returns complete\n// lines and any remaining partial line data. Exported for test only.\nexport function splitChunk(chunk: string): [string[], string] {\n const dataLines = chunk.split('\\n');\n const newExtra = dataLines.pop(); // will be empty string if chunk ends with \"\\n\"\n return [dataLines.filter(line => line != ''), newExtra!];\n}\n\n/**\n * A single finished completion returned from the model or proxy, along with\n * some metadata.\n */\nexport interface FinishedCompletion {\n solution: APIJsonDataStreaming;\n /** An optional offset into `solution.text.join('')` where the completion finishes. */\n finishOffset: number | undefined;\n /** A copilot-specific human-readable reason for the completion finishing. */\n reason: string | null;\n requestId: RequestId;\n index: number;\n}\n\n/** What comes back from the OpenAI API for a single choice in an SSE chunk. */\ninterface ChoiceJSON {\n index: number;\n /**\n * The text attribute as defined in completions streaming.\n * See https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format\n */\n text: string;\n /**\n * The delta attribute as defined in chat streaming.\n * See https://github.com/openai/openai-cookbook/blob/main/examples/How_to_stream_completions.ipynb\n */\n delta: {content: string};\n finish_reason: string | null;\n logprobs?: APILogprobs;\n}\n\n/**\n * Processes an HTTP request containing what is assumed to be an SSE stream of\n * OpenAI API data. Yields a stream of `FinishedCompletion` objects, each as\n * soon as it's finished.\n */\nexport class SSEProcessor {\n private requestId: RequestId = getRequestId(this.response);\n private stats = new ChunkStats(this.expectedNumChoices);\n /**\n * A key & value being here means at least one chunk with that choice index\n * has been received. A null value means we've already finished the given\n * solution and should not process incoming tokens further.\n */\n private readonly solutions: Record = {};\n\n private constructor(\n private readonly ctx: Context,\n private readonly expectedNumChoices: number,\n private readonly response: Response,\n private readonly body: NodeJS.ReadableStream,\n private readonly telemetryData: TelemetryData,\n private readonly dropCompletionReasons: string[],\n private readonly fastCancellation: boolean,\n private readonly cancellationToken?: ICancellationToken\n ) {}\n\n static async create(\n ctx: Context,\n expectedNumChoices: number,\n response: Response,\n telemetryData: TelemetryData,\n dropCompletionReasons?: string[],\n cancellationToken?: ICancellationToken\n ) {\n const body = (await response.body()) as NodeJS.ReadableStream;\n body.setEncoding('utf8');\n const fastCancellation = await ctx.get(Features).fastCancellation();\n return new SSEProcessor(\n ctx,\n expectedNumChoices,\n response,\n body,\n telemetryData,\n dropCompletionReasons ?? ['content_filter'],\n fastCancellation,\n cancellationToken\n );\n }\n\n /**\n * Yields finished completions as soon as they are available. The finishedCb\n * is used to determine when a completion is done and should be truncated.\n * It is called on the whole of the received solution text, once at the end\n * of the completion (if it stops by itself) and also on any chunk that has\n * a newline in it.\n *\n * Closes the server request stream when all choices are finished/truncated\n * (as long as fastCancellation is true).\n *\n * Note that for this to work, the caller must consume the entire stream.\n * This happens automatically when using a `for await` loop, but when\n * iterating manually this needs to be done by calling `.next()` until it\n * returns an item with done = true (or calling `.return()`).\n */\n async *processSSE(finishedCb: FinishedCallback = async () => undefined): AsyncIterable {\n try {\n yield* this.processSSEInner(finishedCb);\n } finally {\n if (this.fastCancellation) {\n this.cancel();\n }\n streamChoicesLogger.info(\n this.ctx,\n `request done: headerRequestId: [${this.requestId.headerRequestId}] model deployment ID: [${this.requestId.deploymentId}]`\n );\n streamChoicesLogger.debug(this.ctx, `request stats: ${this.stats}`);\n }\n }\n\n private async *processSSEInner(finishedCb: FinishedCallback): AsyncIterable {\n // Collects pieces of the SSE stream that haven't been fully processed\n // yet.\n let extraData = '';\n // Iterate over arbitrarily sized chunks coming in from the network.\n networkRead: for await (const chunk of this.body) {\n if (this.maybeCancel('after awaiting body chunk')) {\n return;\n }\n\n streamChoicesLogger.debug(this.ctx, 'chunk', chunk.toString());\n const [dataLines, remainder] = splitChunk(extraData + chunk.toString());\n extraData = remainder;\n\n // Each dataLine is complete since we've seen at least one \\n after\n // it.\n for (const dataLine of dataLines) {\n const lineWithoutData = dataLine.slice('data:'.length).trim();\n if (lineWithoutData == '[DONE]') {\n yield* this.finishSolutions();\n return;\n }\n\n let json: {choices?: ChoiceJSON[]; error?: {message: string}};\n try {\n json = JSON.parse(lineWithoutData);\n } catch (e) {\n streamChoicesLogger.error(this.ctx, 'Error parsing JSON stream data', dataLine);\n continue;\n }\n\n if (json.choices === undefined) {\n if (json.error !== undefined) {\n streamChoicesLogger.error(this.ctx, 'Error in response:', json.error.message);\n } else {\n streamChoicesLogger.error(this.ctx, 'Unexpected response with no choices or error');\n }\n continue;\n }\n\n if (this.requestId.created == 0) {\n // Would only be 0 if we're the first actual response chunk\n this.requestId = getRequestId(this.response, json);\n if (this.requestId.created == 0) {\n streamChoicesLogger.error(\n this.ctx,\n `Request id invalid, should have \"completionId\" and \"created\": ${this.requestId}`,\n this.requestId\n );\n }\n }\n\n if (this.allSolutionsDone() && this.fastCancellation) {\n break networkRead;\n }\n\n for (let i = 0; i < json.choices.length; i++) {\n const choice: ChoiceJSON = json.choices[i];\n streamChoicesLogger.debug(this.ctx, 'choice', choice);\n this.stats.add(choice.index);\n\n if (!(choice.index in this.solutions)) {\n this.solutions[choice.index] = new APIJsonDataStreaming();\n }\n\n const solution = this.solutions[choice.index];\n if (solution == null) {\n continue; // already finished\n }\n\n solution.append(choice);\n\n // Call finishedCb after each newline token to determine\n // if the solution is now complete. Also call it if the\n // solution has finished to make sure it's properly truncated.\n let finishOffset;\n const hasNewLine = choice.text?.indexOf('\\n') > -1 || choice.delta?.content?.indexOf('\\n') > -1;\n if (choice.finish_reason || hasNewLine) {\n finishOffset = await finishedCb(solution.text.join(''));\n\n if (this.maybeCancel('after awaiting finishedCb')) {\n return;\n }\n }\n const solutionDone = choice.finish_reason || finishOffset !== undefined;\n if (!solutionDone) {\n continue;\n }\n // NOTE: When there is a finish_reason the text of subsequent chunks is always '',\n // (current chunk might still have useful text, that is why we add it above).\n // So we know that we already got all the text to be displayed for the user.\n // TODO: This might contain additional logprobs for excluded next tokens. We should\n // filter out indices that correspond to excluded tokens. It will not affect the\n // text though.\n const loggedReason = choice.finish_reason ?? 'client-trimmed';\n telemetry(\n this.ctx,\n 'completion.finishReason',\n this.telemetryData.extendedBy({\n completionChoiceFinishReason: loggedReason,\n })\n );\n if (this.dropCompletionReasons.includes(choice.finish_reason!)) {\n // In this case we drop the choice on the floor.\n this.solutions[choice.index] = null;\n } else {\n this.stats.markYielded(choice.index);\n yield {\n solution,\n finishOffset,\n reason: choice.finish_reason,\n requestId: this.requestId,\n index: choice.index,\n };\n }\n\n if (this.maybeCancel('after yielding finished choice')) {\n return;\n }\n\n this.solutions[choice.index] = null;\n }\n }\n }\n\n // Yield whatever solutions remain incomplete in case no [DONE] was received.\n // This shouldn't happen in practice unless there was an error somewhere.\n for (const [index, solution] of Object.entries(this.solutions)) {\n const solutionIndex = Number(index); // Convert `index` from string to number\n if (solution == null) {\n continue; // already finished\n }\n this.stats.markYielded(solutionIndex);\n yield {\n solution,\n finishOffset: undefined,\n reason: 'Iteration Done',\n requestId: this.requestId,\n index: solutionIndex,\n };\n\n if (this.maybeCancel('after yielding after iteration done')) {\n return;\n }\n }\n\n // Error message can be present in `extraData`\n if (extraData.length > 0) {\n try {\n const extraDataJson = JSON.parse(extraData);\n if (extraDataJson.error !== undefined) {\n streamChoicesLogger.error(\n this.ctx,\n `Error in response: ${extraDataJson.error.message}`,\n extraDataJson.error\n );\n }\n } catch (e) {\n streamChoicesLogger.error(this.ctx, `Error parsing extraData: ${extraData}`);\n }\n }\n }\n\n /** Yields the solutions that weren't yet finished, with a 'DONE' reason. */\n private async *finishSolutions(): AsyncIterable {\n for (const [index, solution] of Object.entries(this.solutions)) {\n const solutionIndex = Number(index); // Convert `index` from string to number\n if (solution == null) {\n continue; // already finished\n }\n this.stats.markYielded(solutionIndex);\n yield {\n solution,\n finishOffset: undefined,\n reason: 'DONE',\n requestId: this.requestId,\n index: solutionIndex,\n };\n\n if (this.maybeCancel('after yielding on DONE')) {\n return;\n }\n }\n }\n\n /**\n * Returns whether the cancellation token was cancelled and closes the\n * stream if it was.\n */\n private maybeCancel(description: string) {\n if (this.cancellationToken?.isCancellationRequested) {\n streamChoicesLogger.debug(this.ctx, 'Cancelled: ' + description);\n this.cancel();\n return true;\n }\n return false;\n }\n\n /** Cancels the network request to the proxy. */\n private cancel() {\n (this.body as ClientHttp2Stream).destroy();\n }\n\n /** Returns whether we've finished receiving all expected solutions. */\n private allSolutionsDone(): boolean {\n const solutions = Object.values(this.solutions);\n return solutions.length == this.expectedNumChoices && solutions.every(s => s == null);\n }\n}\n\nexport function prepareSolutionForReturn(ctx: Context, c: FinishedCompletion, telemetryData: TelemetryData): APIChoice {\n let completionText = c.solution.text.join('');\n\n let blockFinished = false;\n if (c.finishOffset !== undefined) {\n // Trim solution to finishOffset returned by finishedCb\n streamChoicesLogger.debug(ctx, `solution ${c.index}: early finish at offset ${c.finishOffset}`);\n completionText = completionText.substring(0, c.finishOffset);\n blockFinished = true;\n }\n\n streamChoicesLogger.info(ctx, `solution ${c.index} returned. finish reason: [${c.reason}]`);\n streamChoicesLogger.debug(\n ctx,\n `solution ${c.index} details: finishOffset: [${c.finishOffset}] completionId: [{${c.requestId.completionId}}] created: [{${c.requestId.created}}]`\n );\n const jsonData: APIJsonData = convertToAPIJsonData(ctx, c.solution);\n return convertToAPIChoice(ctx, completionText, jsonData, c.index, c.requestId, blockFinished, telemetryData);\n}\n\n// Function to convert from APIJsonDataStreaming to APIJsonData format\nexport function convertToAPIJsonData(ctx: Context, streamingData: APIJsonDataStreaming): APIJsonData {\n const joinedText = streamingData.text.join('');\n const out: APIJsonData = {\n text: joinedText,\n tokens: streamingData.text,\n };\n if (streamingData.logprobs.length === 0) {\n return out;\n }\n const flattenedLogprobs = streamingData.logprobs.reduce((acc, cur) => acc.concat(cur), []);\n const flattenedTopLogprobs = streamingData.top_logprobs.reduce((acc, cur) => acc.concat(cur), []);\n const flattenedOffsets = streamingData.text_offset.reduce((acc, cur) => acc.concat(cur), []);\n const flattenedTokens = streamingData.tokens.reduce((acc, cur) => acc.concat(cur), []);\n\n return {\n ...out,\n logprobs: {\n token_logprobs: flattenedLogprobs,\n top_logprobs: flattenedTopLogprobs,\n text_offset: flattenedOffsets,\n tokens: flattenedTokens,\n },\n };\n}\n\n/** Keeps track of how many chunks of a choice were read and yielded out. */\nclass ChunkStats {\n private readonly choices = new Map();\n constructor(expectedNumChoices: number) {\n for (let i = 0; i < expectedNumChoices; i++) {\n this.choices.set(i, new ChoiceStats());\n }\n }\n\n add(choiceIndex: number) {\n this.choices.get(choiceIndex)!.increment();\n }\n\n markYielded(choiceIndex: number) {\n this.choices.get(choiceIndex)!.markYielded();\n }\n\n toString() {\n return Array.from(this.choices.entries())\n .map(([index, stats]) => `${index}: ${stats.yieldedTokens} -> ${stats.seenTokens}`)\n .join(', ');\n }\n}\n\nclass ChoiceStats {\n yieldedTokens = -1;\n seenTokens = 0;\n\n increment() {\n this.seenTokens++;\n }\n\n markYielded() {\n this.yieldedTokens = this.seenTokens;\n }\n}\n","import {URI} from 'vscode-uri';\nimport {ChangeTracker} from '../../lib/src/changeTracker';\nimport {Context} from '../../lib/src/context';\nimport {telemetryAccepted, telemetryRejected} from '../../lib/src/ghostText/telemetry';\nimport {LogLevel, Logger} from '../../lib/src/logger';\nimport {contextIndentationFromText, indentationBlockFinished} from '../../lib/src/prompt/parseBlock';\nimport {Prompt, extractPrompt} from '../../lib/src/prompt/prompt';\nimport {editDistance, lexEditDistance} from '../../lib/src/suggestions/editDistance';\nimport {TelemetryData, telemetry} from '../../lib/src/telemetry';\nimport {PostInsertionNotifier} from './postInsertionNotifier';\nimport {isRunningInTest} from './testing/runtimeMode';\nimport {IPosition} from './textDocument';\nimport {TextDocumentManager} from './textDocumentManager';\n\nconst postInsertionLogger = new Logger(LogLevel.INFO, 'post-insertion');\n\ntype Timeout = {\n seconds: number;\n captureCode: boolean;\n captureRejection: boolean;\n};\n// windows for telemetry checks, in seconds\n// captureCode = capture the code after acceptance,\n// captureRejection = capture the code after rejection\nconst captureTimeouts: Timeout[] = [\n {seconds: 15, captureCode: false, captureRejection: false},\n {seconds: 30, captureCode: true, captureRejection: true},\n {seconds: 120, captureCode: false, captureRejection: false},\n {seconds: 300, captureCode: false, captureRejection: false},\n {seconds: 600, captureCode: false, captureRejection: false},\n];\n\n// No. of chars before/after insertion point to look for the completion\nconst stillInCodeNearMargin = 50;\nconst stillInCodeFarMargin = 1500;\n\n// If lex edit distance is below this fraction of completion length it is considered\n// in the code\nconst stillInCodeFraction = 0.5;\n\n// Number of characters captured after the insertion point.\n// Used only if we couldn't detect termination point with indent-based parsing.\nconst captureCodeMargin = 500;\n\nexport const postInsertConfiguration: {\n triggerPostInsertionSynchroneously: boolean;\n} = {\n triggerPostInsertionSynchroneously: false,\n};\n\nexport async function captureCode(\n ctx: Context,\n fileURI: URI,\n offset: number\n): Promise<{prompt: Prompt; capturedCode: string; terminationOffset: number}> {\n const document = await ctx.get(TextDocumentManager).getTextDocument(fileURI);\n if (!document) {\n postInsertionLogger.info(\n ctx,\n `Could not get document for ${fileURI.fsPath}. Maybe it was closed by the editor.`\n );\n return {\n prompt: {\n prefix: '',\n suffix: '',\n isFimEnabled: false,\n promptElementRanges: [],\n },\n capturedCode: '',\n terminationOffset: 0,\n };\n }\n const documentText = document.getText();\n const documentTextBefore = documentText.substring(0, offset);\n const position = document.positionAt(offset);\n\n // Treat the code before offset as the hypothetical prompt\n const hypotheticalPromptResponse = await extractPrompt(ctx, document, position);\n const hypotheticalPrompt =\n hypotheticalPromptResponse.type === 'prompt'\n ? hypotheticalPromptResponse.prompt\n : {\n prefix: documentTextBefore,\n suffix: '',\n isFimEnabled: false,\n promptElementRanges: [], // Not used by capturedAfter telemetry\n }; // TODO(eaftan): Pass an actual suffix when we're ready to support it\n\n //Everything after the insertion point is hypothetical response we could get from AI\n const hypotheticalResponse = documentText.substring(offset);\n\n //Try to find the termination offset in the hypothetical response using indentation based parsing\n const contextIndent = contextIndentationFromText(documentTextBefore, offset, document.languageId);\n const indentTerminationFunction = indentationBlockFinished(contextIndent, undefined);\n const terminationResult = await indentTerminationFunction(hypotheticalResponse);\n\n //If we could detect termination of the indentation block, capture 2x length of detected suggestion\n //Otherwise capture a lot of characters\n const maxOffset = Math.min(\n documentText.length,\n offset + (terminationResult ? terminationResult * 2 : captureCodeMargin)\n );\n const capturedCode = documentText.substring(offset, maxOffset);\n\n return {prompt: hypotheticalPrompt, capturedCode, terminationOffset: terminationResult ?? -1};\n}\n\nexport function postRejectionTasks(\n ctx: Context,\n insertionCategory: string,\n insertionOffset: number,\n fileURI: URI,\n completions: {completionText: string; completionTelemetryData: TelemetryData}[]\n) {\n //Send `.rejected` telemetry event for each rejected completion\n completions.forEach(({completionText, completionTelemetryData}) => {\n postInsertionLogger.debug(\n ctx,\n `${insertionCategory}.rejected choiceIndex: ${completionTelemetryData.properties.choiceIndex}`\n );\n telemetryRejected(ctx, insertionCategory, completionTelemetryData);\n });\n\n const positionTracker = new ChangeTracker(ctx, fileURI, insertionOffset);\n\n // Capture the code typed after we detected that completion was rejected,\n // Uses first displayed completion as the source/seed of telemetry information.\n captureTimeouts\n .filter(t => t.captureRejection)\n .map(t => {\n positionTracker.push(async () => {\n postInsertionLogger.debug(\n ctx,\n `Original offset: ${insertionOffset}, Tracked offset: ${positionTracker.offset}`\n );\n const {completionTelemetryData} = completions[0];\n\n const {prompt, capturedCode, terminationOffset} = await captureCode(\n ctx,\n fileURI,\n positionTracker.offset\n );\n\n let promptTelemetry;\n if (prompt.isFimEnabled) {\n promptTelemetry = {\n hypotheticalPromptPrefixJson: JSON.stringify(prompt.prefix),\n hypotheticalPromptSuffixJson: JSON.stringify(prompt.suffix),\n };\n } else {\n promptTelemetry = {\n hypotheticalPromptJson: JSON.stringify(prompt.prefix),\n };\n }\n const customTelemetryData = completionTelemetryData.extendedBy(\n {\n ...promptTelemetry,\n capturedCodeJson: JSON.stringify(capturedCode),\n },\n {\n timeout: t.seconds,\n insertionOffset: insertionOffset,\n trackedOffset: positionTracker.offset,\n terminationOffsetInCapturedCode: terminationOffset,\n }\n );\n postInsertionLogger.debug(\n ctx,\n `${insertionCategory}.capturedAfterRejected choiceIndex: ${completionTelemetryData.properties.choiceIndex}`,\n customTelemetryData\n );\n telemetry(ctx, insertionCategory + '.capturedAfterRejected', customTelemetryData, /* secure */ true);\n }, t.seconds * 1000);\n });\n}\n\nexport async function postInsertionTasks(\n ctx: Context,\n insertionCategory: string,\n completionText: string,\n insertionOffset: number,\n fileURI: URI,\n telemetryData: TelemetryData,\n completionId?: string,\n start?: IPosition\n) {\n // send \".accepted\" telemetry\n postInsertionLogger.debug(\n ctx,\n `${insertionCategory}.accepted choiceIndex: ${telemetryData.properties.choiceIndex}`\n );\n telemetryAccepted(ctx, insertionCategory, telemetryData);\n\n const trimmedCompletion = completionText.trim();\n const tracker = new ChangeTracker(ctx, fileURI, insertionOffset);\n\n const stillInCodeCheck = async (timeout: Timeout) => {\n await checkStillInCode(\n ctx,\n insertionCategory,\n trimmedCompletion,\n insertionOffset,\n fileURI,\n timeout,\n telemetryData,\n tracker\n );\n };\n\n // For test purposes, we add one set of these telemetry events synchronously to allow asserting the telemetry\n if (postInsertConfiguration.triggerPostInsertionSynchroneously && isRunningInTest(ctx)) {\n await stillInCodeCheck({seconds: 0, captureCode: false, captureRejection: false});\n } else {\n captureTimeouts.map(timeout => tracker.push(() => stillInCodeCheck(timeout), timeout.seconds * 1000));\n }\n\n ctx.get(PostInsertionNotifier).emit('onPostInsertion', {\n ctx,\n insertionCategory,\n insertionOffset,\n fileURI,\n completionText,\n telemetryData,\n completionId,\n start,\n });\n}\n\nfunction find(documentText: string, completion: string, margin: number, offset: number) {\n // Compute the best alignment between a window of the document text and the completion\n const window = documentText.substring(\n Math.max(0, offset - margin),\n Math.min(documentText.length, offset + completion.length + margin)\n );\n const lexAlignment = lexEditDistance(window, completion);\n const fraction = lexAlignment.lexDistance / lexAlignment.needleLexLength;\n const {distance: charEditDistance} = editDistance(\n window.substring(lexAlignment.startOffset, lexAlignment.endOffset),\n completion\n );\n return {\n relativeLexEditDistance: fraction,\n charEditDistance,\n completionLexLength: lexAlignment.needleLexLength,\n foundOffset: lexAlignment.startOffset + Math.max(0, offset - margin),\n lexEditDistance: lexAlignment.lexDistance,\n stillInCodeHeuristic: fraction <= stillInCodeFraction ? 1 : 0,\n };\n}\n\nasync function checkStillInCode(\n ctx: Context,\n insertionCategory: string,\n completion: string,\n insertionOffset: number, // offset where the completion was inserted to\n fileURI: URI,\n timeout: Timeout,\n telemetryData: TelemetryData,\n tracker: ChangeTracker\n) {\n // Get contents of file from file system\n const document = await ctx.get(TextDocumentManager).getTextDocument(fileURI);\n if (document) {\n const documentText = document.getText();\n\n // We try twice, first very close to the insertion point, then a bit\n // further. This is to increase accuracy for short completions,\n // where the completion might appear elsewhere.\n let finding = find(documentText, completion, stillInCodeNearMargin, tracker.offset);\n if (!finding.stillInCodeHeuristic)\n finding = find(documentText, completion, stillInCodeFarMargin, tracker.offset);\n // Debug and log a binary decision\n postInsertionLogger.debug(\n ctx,\n `stillInCode: ${finding.stillInCodeHeuristic ? 'Found' : 'Not found'}! Completion '${completion}' in file ${\n fileURI.fsPath\n }. lexEditDistance fraction was ${finding.relativeLexEditDistance}. Char edit distance was ${\n finding.charEditDistance\n }. Inserted at ${insertionOffset}, tracked at ${tracker.offset}, found at ${\n finding.foundOffset\n }. choiceIndex: ${telemetryData.properties.choiceIndex}`\n );\n // Log all the details for analysis\n const customTelemetryData = telemetryData\n .extendedBy({}, {timeout: timeout.seconds, insertionOffset: insertionOffset, trackedOffset: tracker.offset})\n .extendedBy({}, finding);\n telemetry(ctx, insertionCategory + '.stillInCode', customTelemetryData);\n\n if (timeout.captureCode) {\n const {prompt, capturedCode, terminationOffset} = await captureCode(ctx, fileURI, tracker.offset);\n let promptTelemetry;\n if (prompt.isFimEnabled) {\n promptTelemetry = {\n hypotheticalPromptPrefixJson: JSON.stringify(prompt.prefix),\n hypotheticalPromptSuffixJson: JSON.stringify(prompt.suffix),\n };\n } else {\n promptTelemetry = {\n hypotheticalPromptJson: JSON.stringify(prompt.prefix),\n };\n }\n const afterAcceptedTelemetry = telemetryData.extendedBy(\n {\n ...promptTelemetry,\n capturedCodeJson: JSON.stringify(capturedCode),\n },\n {\n timeout: timeout.seconds,\n insertionOffset: insertionOffset,\n trackedOffset: tracker.offset,\n terminationOffsetInCapturedCode: terminationOffset,\n }\n );\n postInsertionLogger.debug(\n ctx,\n `${insertionCategory}.capturedAfterAccepted choiceIndex: ${telemetryData.properties.choiceIndex}`,\n customTelemetryData\n );\n telemetry(ctx, insertionCategory + '.capturedAfterAccepted', afterAcceptedTelemetry, /* secure */ true);\n }\n }\n}\n","import type {Context} from './context';\nimport type {TelemetryData} from './telemetry';\n\nimport type {URI} from 'vscode-uri';\n\nimport {EventEmitter} from 'events';\nimport type TypedEmitter from 'typed-emitter';\nimport {IPosition} from './textDocument';\n\nexport type PostInsertionEvent = {\n ctx: Context;\n insertionCategory: string;\n completionText: string;\n insertionOffset: number;\n fileURI: URI;\n telemetryData: TelemetryData;\n completionId?: string;\n start?: IPosition;\n};\n\nexport class PostInsertionNotifier extends (EventEmitter as new () => TypedEmitter<{\n onPostInsertion: (ev: PostInsertionEvent) => void;\n}>) {}\n","export abstract class StatusReporter {\n abstract setProgress(): void;\n abstract removeProgress(): void;\n abstract setWarning(warningMessage?: string): void;\n abstract setError(errorMessage: string): void;\n abstract setInactive(message?: string): void;\n abstract forceNormal(): void;\n}\n\nexport class NoOpStatusReporter extends StatusReporter {\n setProgress() {}\n removeProgress() {}\n setWarning() {}\n setError(errorMessage: string) {}\n setInactive() {}\n forceNormal() {}\n}\n","import {DocumentInfo} from '@github/copilot-promptlib';\nimport {URI} from 'vscode-uri';\nimport {CommitFileResolver} from '../../commitFileResolver';\nimport {LRUCacheMap} from '../../common/cache';\nimport {accessTimes, sortByAccessTimes} from '../../documentTracker';\nimport {ITextDocument} from '../../textDocument';\nimport {TextDocumentManager} from '../../textDocumentManager';\nimport {INeighborSource, NeighborSource, NeighboringFileType} from './neighborFiles';\n\nexport class CoCommittedFiles implements INeighborSource {\n constructor(\n private readonly docManager: TextDocumentManager,\n private readonly commitFileResolver?: CommitFileResolver\n ) {}\n\n private async tryGetTextDocument(uri: string): Promise {\n try {\n return await this.docManager.getTextDocument(URI.parse(uri));\n } catch (error) {\n return undefined;\n }\n }\n\n /**\n * Get the files that are in the workspace.\n * @param filePath The current open file.\n * @param languageId The language id of the current open file.\n * @param maxNumWorkspaceFiles The maximum number of workspace files.\n * @returns The files that are sorted by commit dates.\n */\n private static async getCoCommittedFiles(\n ns: CoCommittedFiles,\n filePath: string,\n neighboringFileType: NeighboringFileType,\n languageId: string,\n maxNumFiles: number\n ): Promise {\n if (ns.commitFileResolver === undefined) {\n return [];\n }\n const coCommittedFiles: URI[] = await ns.commitFileResolver.getCoCommitResult(filePath, maxNumFiles);\n let totalLen = 0;\n const files: DocumentInfo[] = [];\n\n for (const cocommittedFile of coCommittedFiles) {\n if (cocommittedFile.fsPath === filePath) {\n continue;\n }\n const doc = await ns.tryGetTextDocument(cocommittedFile.toString());\n if (doc === undefined || totalLen + doc.getText().length > NeighborSource.MAX_NEIGHBOR_AGGREGATE_LENGTH) {\n continue;\n }\n\n if (doc.uri.scheme == 'file' && doc.languageId === languageId) {\n files.push({\n uri: doc.uri.toString(),\n relativePath: await ns.docManager.getRelativePath(doc),\n languageId: doc.languageId,\n source: doc.getText(),\n });\n\n totalLen += doc.getText().length;\n if (files.length >= maxNumFiles) {\n break;\n }\n }\n }\n return files;\n }\n\n private async truncateDocs(\n docs: readonly ITextDocument[],\n filePath: string,\n languageId: string,\n maxNumNeighborFiles: number\n ) {\n const openFiles: DocumentInfo[] = [];\n let totalLen = 0;\n for (const doc of docs) {\n if (totalLen + doc.getText().length > NeighborSource.MAX_NEIGHBOR_AGGREGATE_LENGTH) {\n continue;\n }\n\n if (doc.uri.scheme == 'file' && doc.fileName !== filePath && doc.languageId === languageId) {\n openFiles.push({\n uri: doc.uri.toString(),\n relativePath: await this.docManager.getRelativePath(doc),\n languageId: doc.languageId,\n source: doc.getText(),\n });\n totalLen += doc.getText().length;\n }\n\n if (openFiles.length >= maxNumNeighborFiles) {\n break;\n }\n }\n return openFiles;\n }\n\n private cocommittedFilesCache = this.computeInBackgroundAndMemoize(\n CoCommittedFiles.getCoCommittedFiles,\n 1\n );\n\n /**\n * Function wrapper that memoizes a given function to be computed in the background.\n * Until the first computation is complete, the wrapper returns null.\n * The filePath is taken into account for computing the cache key.\n * @param fct A function returning a promise whose arguments are amenable to JSON.stringify.\n * @param cacheSize Number of elements to cache.\n * @returns The memoized function, which returns null until the first computation is complete.\n */\n private computeInBackgroundAndMemoize<\n S,\n T extends (ns: CoCommittedFiles, filePath: string, type: NeighboringFileType, ...args: any[]) => Promise\n >(fct: T, cacheSize: number): (filePath: string, type: NeighboringFileType, ...args: Parameters) => S | null {\n const resultsCache = new LRUCacheMap(cacheSize);\n const inComputation: Set = new Set();\n return (filePath: string, type: NeighboringFileType, ...args: any[]) => {\n const key = filePath + type;\n const memorizedComputation = resultsCache.get(key);\n if (memorizedComputation) {\n return memorizedComputation;\n }\n if (inComputation.has(key)) {\n // already being computed from a different call\n return null;\n }\n const computation = fct(this, filePath, type, ...args);\n inComputation.add(key);\n computation.then(computedResult => {\n // remove from inComputation\n resultsCache.set(key, computedResult);\n inComputation.delete(key);\n });\n return null;\n };\n }\n\n /**\n * Get the neighbor files. Current it supports 3 different sources: 1. The open editors, 2. The cursor focused files, 3. The open editors and more local files in the workspace.\n * @param uri The uri of the current open file.\n * @param languageId The language id of the current open file.\n * @param maxNumNeighborFiles The max number of neighbor files to return.\n * @returns Include 2 items.\n * 1. The merged unique documents, which is not exceeding MAX_NEIGHBOR_FILES.\n * 2. For each neighbor type, the files that are included in the merged unique documents.\n */\n public async getNeighborFiles(\n uri: URI,\n neighboringFileType: NeighboringFileType,\n languageId: string,\n maxNumNeighborFiles: number\n ): Promise<{docs: DocumentInfo[]; neighborSource: Map}> {\n let neighborFiles: DocumentInfo[] = [];\n const neighborSource = new Map();\n // We use open tab files as the first priority, if we don't have enough files, we will use the workspace files.\n neighborFiles = await this.truncateDocs(\n sortByAccessTimes(\n this.docManager.textDocuments.filter(doc => accessTimes.get(doc.uri.toString()) !== undefined)\n ),\n uri.fsPath,\n languageId,\n maxNumNeighborFiles\n );\n neighborSource.set(\n NeighboringFileType.OpenTabs,\n neighborFiles.map(f => f.uri)\n );\n if (neighborFiles.length < maxNumNeighborFiles) {\n let cocommittedFiles = this.cocommittedFilesCache(\n uri.fsPath,\n neighboringFileType,\n languageId,\n maxNumNeighborFiles\n );\n\n if (cocommittedFiles !== null) {\n const neighborFileUriSet = new Set(neighborFiles.map(f => f.uri));\n cocommittedFiles = cocommittedFiles\n .filter(f => !neighborFileUriSet.has(f.uri))\n .slice(0, maxNumNeighborFiles - neighborFiles.length);\n neighborFiles.push(...cocommittedFiles);\n neighborSource.set(\n neighboringFileType,\n cocommittedFiles.map(f => f.uri)\n );\n }\n }\n\n return {\n docs: neighborFiles,\n neighborSource: neighborSource,\n };\n }\n}\n","import {DocumentInfo} from '@github/copilot-promptlib';\nimport {URI} from 'vscode-uri';\nimport {cursorHistoryManager} from '../../documentTracker';\nimport {ITextDocument} from '../../textDocument';\nimport {TextDocumentManager} from '../../textDocumentManager';\nimport {INeighborSource, NeighborSource, NeighboringFileType, considerNeighborFile} from './neighborFiles';\n\nexport class CursorHistoryFiles implements INeighborSource {\n constructor(private readonly docManager: TextDocumentManager) {}\n\n private async truncateDocs(\n docs: readonly ITextDocument[],\n filePath: string,\n languageId: string,\n maxNumNeighborFiles: number\n ) {\n const openFiles: DocumentInfo[] = [];\n let totalLen = 0;\n for (const doc of docs) {\n if (totalLen + doc.getText().length > NeighborSource.MAX_NEIGHBOR_AGGREGATE_LENGTH) {\n continue;\n }\n\n if (\n doc.uri.scheme == 'file' &&\n doc.fileName !== filePath &&\n considerNeighborFile(languageId, doc.languageId)\n ) {\n openFiles.push({\n uri: doc.uri.toString(),\n relativePath: await this.docManager.getRelativePath(doc),\n languageId: doc.languageId,\n source: doc.getText(),\n });\n totalLen += doc.getText().length;\n }\n\n if (openFiles.length >= maxNumNeighborFiles) {\n break;\n }\n }\n return openFiles;\n }\n\n /**\n * Get the neighbor files. Current it supports 3 different sources: 1. The open editors, 2. The cursor focused files, 3. The open editors and more local files in the workspace.\n * @param uri The uri of the current open file.\n * @param languageId The language id of the current open file.\n * @param maxNumNeighborFiles The max number of neighbor files to return.\n * @returns Include 2 items.\n * 1. The merged unique documents, which is not exceeding MAX_NEIGHBOR_FILES.\n * 2. For each neighbor type, the files that are included in the merged unique documents.\n */\n public async getNeighborFiles(\n uri: URI,\n neighboringFileType: NeighboringFileType,\n languageId: string,\n maxNumNeighborFiles: number\n ): Promise<{docs: DocumentInfo[]; neighborSource: Map}> {\n let neighborFiles: DocumentInfo[] = [];\n const neighborSource = new Map();\n\n if (neighboringFileType === NeighboringFileType.CursorMostRecent) {\n neighborFiles = await this.truncateDocs(\n cursorHistoryManager.sortedDocsByClickTime(),\n uri.fsPath,\n languageId,\n maxNumNeighborFiles\n );\n neighborSource.set(\n NeighboringFileType.CursorMostRecent,\n neighborFiles.map(f => f.uri)\n );\n } else if (neighboringFileType === NeighboringFileType.CursorMostCount) {\n neighborFiles = await this.truncateDocs(\n cursorHistoryManager.sortedDocsByClickCount(),\n uri.fsPath,\n languageId,\n maxNumNeighborFiles\n );\n neighborSource.set(\n NeighboringFileType.CursorMostCount,\n neighborFiles.map(f => f.uri)\n );\n }\n\n return {\n docs: neighborFiles,\n neighborSource: neighborSource,\n };\n }\n}\n","import {DocumentInfo} from '@github/copilot-promptlib';\nimport {URI} from 'vscode-uri';\nimport {CommitFileResolver} from '../../commitFileResolver';\nimport {Context} from '../../context';\nimport {Features, FeaturesFilterArgs} from '../../experiments/features';\nimport {TextDocumentManager} from '../../textDocumentManager';\nimport {WorkspaceFileSystem} from '../../workspaceFileSystem';\nimport {CoCommittedFiles} from './cocommittedFiles';\nimport {CursorHistoryFiles} from './cursorHistoryFiles';\nimport {OpenTabFiles} from './openTabFiles';\nimport {WorkspaceFiles} from './workspaceFiles';\n\n// There is a limitation of the number of the neighbor files. So I use the next strategies to pick the most relevant cursor focused files.\nexport enum NeighboringFileType {\n None = 'none', // Do not add neighbor files.\n OpenTabs = 'opentabs', // Add open files.\n CursorMostRecent = 'cursormostrecent', // Add the most recent cursor focused files.\n CursorMostCount = 'cursormostcount', // Add the most cursor focused files.\n WorkspaceSharingSameFolder = 'workspacesharingsamefolder', // Add the workspace files sharing the same folder with the target file.\n WorkspaceSmallestPathDist = 'workspacesmallestpathdist', // Add the workspace files according to their path distance toward the target file\n OpenTabsAndCocommitted = 'opentabsandcocommitted', // Add open files and the co-committed files.\n}\n\n/**\n * During https://github.com/github/copilot-planning/issues/3587, we found out that considering\n * all **open** neighbor files (independent of the language) was not helpful. However, some\n * specific languages (e.g. frontend frameworks) benefit from this approach. Leaving this\n * function here for future reference, in case we want to experiment this approach again for\n * specific languages that always use cross-language files.\n *\n * @param languageId Language ID of the current file\n * @param neighborLanguageId Language ID of the neighbor file\n * @returns Boolean value indicating whether the neighbor file should be considered\n * (currently matching the current file's language with neighbors')\n */\nexport function considerNeighborFile(languageId: string, neighborLanguageId: string): boolean {\n return languageId === neighborLanguageId;\n}\n\nexport interface INeighborSource {\n getNeighborFiles(\n uri: URI,\n neighboringFileType: NeighboringFileType,\n languageId: string,\n maxNumNeighborFiles: number\n ): Promise<{docs: DocumentInfo[]; neighborSource: Map}>;\n}\n\nexport class NeighborSource {\n // Limit the amount of neighbor data to pass to promptlib.\n static MAX_NEIGHBOR_AGGREGATE_LENGTH = 200000;\n static MAX_NEIGHBOR_FILES = 20;\n\n static EXCLUDED_NEIGHBORS = ['node_modules', 'dist', 'site-packages'];\n\n private static instance: INeighborSource | undefined;\n\n /** Reset the singleton instance for unit test only */\n public static reset(): void {\n NeighborSource.instance = undefined;\n }\n\n public static async getNeighborFiles(\n ctx: Context,\n uri: URI,\n featuresFilterArgs: FeaturesFilterArgs\n ): Promise<{docs: DocumentInfo[]; neighborSource: Map}> {\n const neighboringFileType = await ctx.get(Features).neighboringFileType(featuresFilterArgs);\n if (neighboringFileType === NeighboringFileType.None) {\n return {docs: [], neighborSource: new Map()};\n }\n\n if (NeighborSource.instance === undefined) {\n const docManager = ctx.get(TextDocumentManager);\n if (\n neighboringFileType === NeighboringFileType.WorkspaceSharingSameFolder ||\n neighboringFileType === NeighboringFileType.WorkspaceSmallestPathDist\n ) {\n const workspaceFileSystem = ctx.get(WorkspaceFileSystem);\n NeighborSource.instance = new WorkspaceFiles(docManager, workspaceFileSystem);\n } else if (neighboringFileType == NeighboringFileType.OpenTabsAndCocommitted) {\n const commitFileResolver = ctx.get(CommitFileResolver);\n NeighborSource.instance = new CoCommittedFiles(docManager, commitFileResolver);\n } else if (\n neighboringFileType === NeighboringFileType.CursorMostCount ||\n neighboringFileType === NeighboringFileType.CursorMostRecent\n ) {\n NeighborSource.instance = new CursorHistoryFiles(docManager);\n } else {\n NeighborSource.instance = new OpenTabFiles(docManager);\n }\n }\n\n return await NeighborSource.instance.getNeighborFiles(\n uri,\n neighboringFileType,\n featuresFilterArgs.fileType,\n NeighborSource.MAX_NEIGHBOR_FILES\n );\n }\n}\n","import {DocumentInfo} from '@github/copilot-promptlib';\nimport {URI} from 'vscode-uri';\nimport {sortByAccessTimes} from '../../documentTracker';\nimport {ITextDocument} from '../../textDocument';\nimport {TextDocumentManager} from '../../textDocumentManager';\nimport {INeighborSource, NeighborSource, NeighboringFileType, considerNeighborFile} from './neighborFiles';\n\nexport class OpenTabFiles implements INeighborSource {\n constructor(private readonly docManager: TextDocumentManager) {}\n\n private async truncateDocs(\n docs: readonly ITextDocument[],\n filePath: string,\n languageId: string,\n maxNumNeighborFiles: number\n ) {\n const openFiles: DocumentInfo[] = [];\n let totalLen = 0;\n for (const doc of docs) {\n if (totalLen + doc.getText().length > NeighborSource.MAX_NEIGHBOR_AGGREGATE_LENGTH) {\n continue;\n }\n\n if (\n doc.uri.scheme == 'file' &&\n doc.fileName !== filePath &&\n considerNeighborFile(languageId, doc.languageId)\n ) {\n openFiles.push({\n uri: doc.uri.toString(),\n relativePath: await this.docManager.getRelativePath(doc),\n languageId: doc.languageId,\n source: doc.getText(),\n });\n totalLen += doc.getText().length;\n }\n\n if (openFiles.length >= maxNumNeighborFiles) {\n break;\n }\n }\n return openFiles;\n }\n\n /**\n * Get the neighbor files. Current it supports 3 different sources: 1. The open editors, 2. The cursor focused files, 3. The open editors and more local files in the workspace.\n * @param uri The uri of the current open file.\n * @param languageId The language id of the current open file.\n * @param maxNumNeighborFiles The max number of neighbor files to return.\n * @returns Include 2 items.\n * 1. The merged unique documents, which is not exceeding MAX_NEIGHBOR_FILES.\n * 2. For each neighbor type, the files that are included in the merged unique documents.\n */\n public async getNeighborFiles(\n uri: URI,\n neighboringFileType: NeighboringFileType,\n languageId: string,\n maxNumNeighborFiles: number\n ): Promise<{docs: DocumentInfo[]; neighborSource: Map}> {\n let neighborFiles: DocumentInfo[] = [];\n const neighborSource = new Map();\n neighborFiles = await this.truncateDocs(\n sortByAccessTimes(this.docManager.textDocuments),\n uri.fsPath,\n languageId,\n maxNumNeighborFiles\n );\n neighborSource.set(\n NeighboringFileType.OpenTabs,\n neighborFiles.map(f => f.uri)\n );\n return {\n docs: neighborFiles,\n neighborSource: neighborSource,\n };\n }\n}\n","import {DocumentInfo} from '@github/copilot-promptlib';\nimport * as path from 'path';\nimport {URI} from 'vscode-uri';\nimport {LRUCacheMap} from '../../common/cache';\nimport {accessTimes, sortByAccessTimes} from '../../documentTracker';\nimport {knownLanguages} from '../../language/generatedLanguages';\nimport {ITextDocument} from '../../textDocument';\nimport {TextDocumentManager} from '../../textDocumentManager';\nimport {WorkspaceFileSystem} from '../../workspaceFileSystem';\nimport {INeighborSource, NeighborSource, NeighboringFileType, considerNeighborFile} from './neighborFiles';\n\nexport class WorkspaceFiles implements INeighborSource {\n static EXCLUDED_NEIGHBORS = ['node_modules', 'dist', 'site-packages'];\n\n constructor(\n private readonly docManager: TextDocumentManager,\n private readonly workspaceFileSystem?: WorkspaceFileSystem\n ) {}\n\n private async tryGetTextDocument(uri: string): Promise {\n try {\n return await this.docManager.getTextDocument(URI.parse(uri));\n } catch (error) {\n return undefined;\n }\n }\n\n /** Calculate the distance of 2 file paths. dist is the distance. lca is the lowest common ancestor.\n * For example, the distance of 'a/b/c/d' and 'a/b/e/f' is 4, and the lca is 'a/b'.\n */\n private filePathDistance(filePath: string, targetFilePath: string): {dist: number; lca: number} {\n const relativePath = path.relative(filePath, targetFilePath);\n const distance = relativePath.split(path.sep).length;\n return {\n dist: distance,\n lca: (filePath.split(path.sep).length + targetFilePath.split(path.sep).length - distance) / 2,\n };\n }\n\n /**\n * Get the files that are in the workspace.\n * @param filePath The current open file.\n * @param languageId The language id of the current open file.\n * @param maxNumWorkspaceFiles The maximum number of workspace files.\n * @param blacklist The files that should not be included in the workspace files.\n * @returns The files that are in the workspace sorted by file path distance.\n */\n private static async getWorkspaceFiles(\n ns: WorkspaceFiles,\n filePath: string,\n neighboringFileType: NeighboringFileType,\n languageId: string,\n maxNumWorkspaceFiles: number,\n blacklist: DocumentInfo[]\n ): Promise {\n if (ns.workspaceFileSystem === undefined || ns.workspaceFilesCache === undefined) {\n return [];\n }\n\n const workspaceUri = await ns.workspaceFileSystem.getWorkspaceFolder(URI.file(filePath));\n if (workspaceUri === undefined) {\n return [];\n }\n\n // Include all file extensions for the current language ID.\n let include = `**/*.{${knownLanguages[languageId].extensions.map(ext => ext.replace(/^\\.+/g, '')).join(',')}}`;\n\n if (neighboringFileType === NeighboringFileType.WorkspaceSmallestPathDist) {\n const repositories = (await ns.workspaceFileSystem.findFiles('**/.git/config')).map(f =>\n path.dirname(path.dirname(f.fsPath))\n );\n const currentFileRepository = repositories\n .sort((a, b) => b.split(path.sep).length - a.split(path.sep).length)\n .find(repo => filePath.startsWith(repo));\n\n if (currentFileRepository !== undefined && currentFileRepository !== '') {\n // only include all the files in the same repository.\n include = `${currentFileRepository}/${include}`;\n }\n } else {\n // only include all the files that are in the same folder with the current file.\n const fileRelativePath = path.relative(workspaceUri.fsPath, path.dirname(filePath));\n if (fileRelativePath !== '') {\n include = `${fileRelativePath}/${include}`;\n }\n }\n\n const visitedFiles = new Set(blacklist.map(f => URI.parse(f.uri).fsPath));\n visitedFiles.add(filePath);\n\n // All the path including a portion starting with '.' are excluded.\n // All the path including a portion in the EXCLUDED_NEIGHBORS are excluded.\n const exclude = `**/{${WorkspaceFiles.EXCLUDED_NEIGHBORS.join(',')},.*}/**`;\n\n const workspaceFiles = (await ns.workspaceFileSystem.findFiles(include, exclude))\n .filter(f => !visitedFiles.has(f.fsPath))\n .sort((a, b) => {\n const aDist = ns.filePathDistance(a.fsPath, filePath);\n const bDist = ns.filePathDistance(b.fsPath, filePath);\n // sort by distance first asceding, then by lca descending.\n if (aDist.dist !== bDist.dist) {\n return aDist.dist - bDist.dist;\n } else {\n return bDist.lca - aDist.lca;\n }\n });\n\n const files: DocumentInfo[] = [];\n let totalLen = 0;\n for (const workspaceFile of workspaceFiles) {\n const doc = await ns.tryGetTextDocument(workspaceFile.toString());\n if (doc === undefined || totalLen + doc.getText().length > NeighborSource.MAX_NEIGHBOR_AGGREGATE_LENGTH) {\n continue;\n }\n\n if (doc.uri.scheme == 'file' && considerNeighborFile(languageId, doc.languageId)) {\n files.push({\n uri: doc.uri.toString(),\n relativePath: await ns.docManager.getRelativePath(doc),\n languageId: doc.languageId,\n source: doc.getText(),\n });\n\n totalLen += doc.getText().length;\n if (files.length >= maxNumWorkspaceFiles) {\n break;\n }\n }\n }\n\n return files;\n }\n\n private async truncateDocs(\n docs: readonly ITextDocument[],\n filePath: string,\n languageId: string,\n maxNumNeighborFiles: number\n ) {\n const openFiles: DocumentInfo[] = [];\n let totalLen = 0;\n for (const doc of docs) {\n if (totalLen + doc.getText().length > NeighborSource.MAX_NEIGHBOR_AGGREGATE_LENGTH) {\n continue;\n }\n\n if (\n doc.uri.scheme == 'file' &&\n doc.fileName !== filePath &&\n considerNeighborFile(languageId, doc.languageId)\n ) {\n openFiles.push({\n uri: doc.uri.toString(),\n relativePath: await this.docManager.getRelativePath(doc),\n languageId: doc.languageId,\n source: doc.getText(),\n });\n totalLen += doc.getText().length;\n }\n\n if (openFiles.length >= maxNumNeighborFiles) {\n break;\n }\n }\n return openFiles;\n }\n\n private workspaceFilesCache = this.computeInBackgroundAndMemoize(\n WorkspaceFiles.getWorkspaceFiles,\n 1\n );\n\n /**\n * Function wrapper that memoizes a given function to be computed in the background.\n * Until the first computation is complete, the wrapper returns null.\n * The filePath is taken into account for computing the cache key.\n * @param fct A function returning a promise whose arguments are amenable to JSON.stringify.\n * @param cacheSize Number of elements to cache.\n * @returns The memoized function, which returns null until the first computation is complete.\n */\n private computeInBackgroundAndMemoize<\n S,\n T extends (ns: WorkspaceFiles, filePath: string, type: NeighboringFileType, ...args: any[]) => Promise\n >(fct: T, cacheSize: number): (filePath: string, type: NeighboringFileType, ...args: Parameters) => S | null {\n const resultsCache = new LRUCacheMap(cacheSize);\n const inComputation: Set = new Set();\n return (filePath: string, type: NeighboringFileType, ...args: any[]) => {\n const key = filePath + type;\n const memorizedComputation = resultsCache.get(key);\n if (memorizedComputation) {\n return memorizedComputation;\n }\n if (inComputation.has(key)) {\n // already being computed from a different call\n return null;\n }\n const computation = fct(this, filePath, type, ...args);\n inComputation.add(key);\n computation.then(computedResult => {\n // remove from inComputation\n resultsCache.set(key, computedResult);\n inComputation.delete(key);\n });\n return null;\n };\n }\n\n /**\n * Get the neighbor files. Current it supports 3 different sources: 1. The open editors, 2. The cursor focused files, 3. The open editors and more local files in the workspace.\n * @param uri The uri of the current open file.\n * @param languageId The language id of the current open file.\n * @param maxNumNeighborFiles The max number of neighbor files to return.\n * @returns Include 2 items.\n * 1. The merged unique documents, which is not exceeding MAX_NEIGHBOR_FILES.\n * 2. For each neighbor type, the files that are included in the merged unique documents.\n */\n public async getNeighborFiles(\n uri: URI,\n neighboringFileType: NeighboringFileType,\n languageId: string,\n maxNumNeighborFiles: number\n ): Promise<{docs: DocumentInfo[]; neighborSource: Map}> {\n let neighborFiles: DocumentInfo[] = [];\n const neighborSource = new Map();\n\n // We use open tab files as the first priority, if we don't have enough files, we will use the workspace files.\n neighborFiles = await this.truncateDocs(\n sortByAccessTimes(\n this.docManager.textDocuments.filter(doc => accessTimes.get(doc.uri.toString()) !== undefined)\n ),\n uri.fsPath,\n languageId,\n maxNumNeighborFiles\n );\n neighborSource.set(\n NeighboringFileType.OpenTabs,\n neighborFiles.map(f => f.uri)\n );\n if (neighborFiles.length < maxNumNeighborFiles) {\n let workspaceFiles = this.workspaceFilesCache(\n uri.fsPath,\n neighboringFileType,\n languageId,\n maxNumNeighborFiles,\n neighborFiles\n );\n\n if (workspaceFiles !== null) {\n const neighborFileUriSet = new Set(neighborFiles.map(f => f.uri));\n workspaceFiles = workspaceFiles\n .filter(f => !neighborFileUriSet.has(f.uri))\n .slice(0, maxNumNeighborFiles - neighborFiles.length);\n neighborFiles.push(...workspaceFiles);\n neighborSource.set(\n neighboringFileType,\n workspaceFiles.map(f => f.uri)\n );\n }\n }\n\n return {\n docs: neighborFiles,\n neighborSource: neighborSource,\n };\n }\n}\n","import {Context} from '../context';\nimport {IPosition, ITextDocument, LocationFactory} from '../textDocument';\nimport * as promptlib from './promptLibProxy';\n\nexport function isEmptyBlockStart(doc: ITextDocument, position: IPosition): Promise {\n return promptlib.isEmptyBlockStart(doc.languageId, doc.getText(), doc.offsetAt(position));\n}\n\nexport function isBlockBodyFinished(\n ctx: Context,\n doc: ITextDocument,\n position: IPosition,\n completion: string\n): Promise {\n const locationFactory = ctx.get(LocationFactory);\n const prefix = doc.getText(locationFactory.range(locationFactory.position(0, 0), position));\n const offset = doc.offsetAt(position);\n return promptlib.isBlockBodyFinished(doc.languageId, prefix, completion, offset);\n}\n\nexport async function getNodeStart(\n ctx: Context,\n doc: ITextDocument,\n position: IPosition,\n completion: string\n): Promise {\n const locationFactory = ctx.get(LocationFactory);\n const prefix = doc.getText(locationFactory.range(locationFactory.position(0, 0), position));\n const text = prefix + completion;\n const offset = await promptlib.getNodeStart(doc.languageId, text, doc.offsetAt(position));\n if (offset) {\n return doc.positionAt(offset);\n }\n}\n\n// TODO: This should probably be language specific\nconst continuations = [\n // Brace control\n '\\\\{',\n '\\\\}',\n '\\\\[',\n '\\\\]',\n '\\\\(',\n '\\\\)',\n].concat(\n [\n // Separators in a multi-line list\n // \",\", \";\", \"\\\\|\",\n // Multi-line comments\n // None\n // Keywords for same-level control flow\n 'then',\n 'else',\n 'elseif',\n 'elif',\n 'catch',\n 'finally',\n // End keywords\n 'fi',\n 'done',\n 'end',\n 'loop',\n 'until',\n 'where',\n 'when',\n ].map(s => s + '\\\\b')\n);\nconst continuationRegex = new RegExp(`^(${continuations.join('|')})`);\n\n/**\n * Returns true if the given line is a line where we continue completion where\n * the indentation level equals the current indentation level.\n *\n * TODO: Should probably be language specific\n */\nfunction isContinuationLine(line: string) {\n return continuationRegex.test(line.trimLeft().toLowerCase());\n}\n\n/**\n * Return the indentation level of a given single line.\n *\n * If the line is blank, return undefined.\n *\n * TODO: Possibly support tabs specially?\n */\nfunction indentationOfLine(line: string): number | undefined {\n // [^] is used to match any character include '`r', otherwise this regex never matches on\n // a file containing Windows newlines.\n // TODO this is a bit of hack and ideally we would be using the \"right\" newline character at the\n // point where we split/join lines.\n const match = /^(\\s*)([^]*)$/.exec(line);\n if (match && match[2] && match[2].length > 0) {\n return match[1].length;\n } else {\n return undefined;\n }\n}\n\n/**\n * Represents the indentation around the context of a cursor position in the code.\n *\n * The indentation level of the current line is the number of leading whitespace\n * characters. If the current line is blank, we define its indentation level to\n * be that of the preceding line (recursive if that is also blank).\n *\n * The indentation level of the next line is defined analogously, but recurses\n * forwards until a non-blank line is encountered. It is `undefined` if there\n * are no non-blank lines after the current.\n */\nexport interface ContextIndentation {\n /**\n * Next smaller indentation above the current line (guaranteed to be\n * smaller than `current`, or else undefined).\n */\n prev: number | undefined;\n /** Indentation at the current line */\n current: number;\n /** Indentation at the following line */\n next: number | undefined;\n}\n\n/**\n * Return the context indentation corresponding to a given position.\n */\nexport function contextIndentation(doc: ITextDocument, position: IPosition): ContextIndentation {\n const source = doc.getText();\n const offset = doc.offsetAt(position);\n return contextIndentationFromText(source, offset, doc.languageId);\n}\n\n/**\n * Return the context indentation corresponding to a given offset in text.\n */\nexport function contextIndentationFromText(source: string, offset: number, languageId: string): ContextIndentation {\n const prevLines = source.slice(0, offset).split('\\n');\n const nextLines = source.slice(offset).split('\\n');\n function seekNonBlank(lines: string[], start: number, direction: -1 | 1): [number | undefined, number | undefined] {\n let i = start;\n let ind,\n indIdx: number | undefined = undefined;\n while (ind === undefined && i >= 0 && i < lines.length) {\n ind = indentationOfLine(lines[i]);\n indIdx = i;\n i += direction;\n }\n if (languageId === 'python' && direction === -1) {\n // HACK: special case to support multi-statement completions after Python doc comments.\n // The logic looks for comments formatted as described in PEP 257.\n\n // The final iteration of the indentation loop will have got us to one before the \"current line\".\n i++;\n const trimmedLine = lines[i].trim();\n\n if (trimmedLine.endsWith(`\"\"\"`)) {\n const isSingleLineDocString = trimmedLine.startsWith(`\"\"\"`) && trimmedLine !== `\"\"\"`;\n if (!isSingleLineDocString) {\n // Look backwards for the opening \"\"\"\"\n i--;\n while (i >= 0 && !lines[i].trim().startsWith(`\"\"\"`)) {\n i--;\n }\n }\n // i should point to the line with the opening \"\"\", if found.\n // If i is negative then we never found the opening \"\"\"\". Give up and use the indentation\n // we originally calculated.\n if (i >= 0) {\n ind = undefined;\n i--;\n // This is the same loop as above but specialised for direction = -1\n while (ind === undefined && i >= 0) {\n ind = indentationOfLine(lines[i]);\n indIdx = i;\n i--;\n }\n }\n }\n }\n return [ind, indIdx];\n }\n const [current, currentIdx] = seekNonBlank(prevLines, prevLines.length - 1, -1);\n const prev = (() => {\n if (current === undefined || currentIdx === undefined) {\n return undefined;\n }\n for (let i = currentIdx - 1; i >= 0; i--) {\n const ind = indentationOfLine(prevLines[i]);\n if (ind !== undefined && ind < current) {\n return ind;\n }\n }\n })();\n const [next] = seekNonBlank(nextLines, 1, 1); // Skip the current line.\n return {\n prev,\n current: current ?? 0,\n next,\n };\n}\n\n// If the model thinks we are at the end of a line, do we want to offer a completion\n// for the next line? For now (05 Oct 2021) we leave it as false to minimise behaviour\n// changes between parsing and indentation mode.\nconst OfferNextLineCompletion = false;\n\n/**\n * Return an offset where the completion ends its current context, or\n * \"continue\" if it has not yet ended.\n *\n * A completion should be continued if it is:\n * - A very long line that did not yet end; or\n * - A multi-line context that is not yet ended.\n *\n * We use indentation with continuation patterns to determine whether a context\n * is ended.\n */\nexport function completionCutOrContinue(\n completion: string,\n contextIndentation: ContextIndentation,\n previewText: string | undefined\n): number | 'continue' {\n const completionLines = completion.split('\\n');\n const isContinuation = previewText !== undefined;\n const lastLineOfPreview = previewText?.split('\\n').pop();\n let startLine = 0;\n if (isContinuation) {\n if (lastLineOfPreview?.trim() != '' && completionLines[0].trim() !== '') {\n // If we're in the middle of a line after the preview, we should at least finish it.\n startLine++;\n }\n }\n if (!isContinuation && OfferNextLineCompletion && completionLines[0].trim() === '') {\n // See the comment on `OfferNextLineCompletion` for why we might do this.\n startLine++;\n }\n if (!isContinuation) {\n // We want to offer at least one line.\n startLine++;\n }\n if (completionLines.length === startLine) {\n // A single line that did not yet end.\n return 'continue';\n }\n const breakIndentation = Math.max(contextIndentation.current, contextIndentation.next ?? 0);\n for (let i = startLine; i < completionLines.length; i++) {\n let line = completionLines[i];\n if (i == 0 && lastLineOfPreview !== undefined) {\n line = lastLineOfPreview + line;\n }\n const ind = indentationOfLine(line);\n if (ind !== undefined && (ind < breakIndentation || (ind === breakIndentation && !isContinuationLine(line)))) {\n return completionLines.slice(0, i).join('\\n').length;\n }\n }\n return 'continue';\n}\n\n/**\n * Returns a callback appropriate as `finishedCb` for\n * `CompletionStream.streamChoices` that terminates a block according to\n * indentation-logic.\n */\nexport function indentationBlockFinished(\n contextIndentation: ContextIndentation,\n previewText: string | undefined\n): (completion: string) => Promise {\n // NOTE: The returned callback is only async because streamChoices needs an\n // async callback\n return async (completion: string) => {\n const res = completionCutOrContinue(completion, contextIndentation, previewText);\n // streamChoices needs a callback with bad type signature where\n // undefined really means \"continue\".\n return res === 'continue' ? undefined : res;\n };\n}\n","import {\n DocumentInfo,\n DocumentInfoWithOffset,\n FileSystem,\n PartialPromptOptions,\n PromptInfo,\n commentBlockAsSingles,\n} from '@github/copilot-promptlib';\nimport {SnippetWithProviderInfo} from '@github/copilot-promptlib/dist/src/snippetInclusion/snippets';\nimport {PromptBackground, PromptChoices} from '@github/copilot-promptlib/dist/src/wishlist';\nimport {URI} from 'vscode-uri';\nimport {ConfigKey, getConfig} from '../config';\nimport {Context} from '../context';\nimport {CopilotIgnoreManager} from '../copilotIgnore/manager';\nimport {cursorHistoryManager} from '../documentTracker';\nimport {Features, FeaturesFilterArgs} from '../experiments/features';\nimport {telemetryException} from '../telemetry';\nimport {INotebookCell, INotebookDocument, IPosition, ITextDocument} from '../textDocument';\nimport {TextDocumentManager} from '../textDocumentManager';\nimport {NeighborSource, NeighboringFileType, considerNeighborFile} from './neighborFiles/neighborFiles';\nimport {getPrompt} from './promptLibProxy';\nimport {extractRepoInfoInBackground, getDogFood, getUserKind, tryGetGitHubNWO} from './repository';\nimport {getRetrievalOptions, queryRetrievalSnippets} from './retrieval';\nimport {getSymbolDefSnippets} from './symbolDefinition';\n\n// The minimum number of prompt-eligible characters before we offer a completion\nexport const MIN_PROMPT_CHARS = 10;\n\nexport interface Prompt {\n prefix: string;\n suffix: string;\n prefixTokens?: number;\n suffixTokens?: number;\n isFimEnabled: boolean;\n promptElementRanges: {kind: string; start: number; end: number}[];\n}\n\nexport interface PromptResponsePresent {\n type: 'prompt';\n prompt: Prompt;\n promptChoices: PromptChoices;\n trailingWs: string;\n computeTimeMs: number;\n promptBackground: PromptBackground;\n neighborSource: Map;\n}\n\nexport interface ContextTooShort {\n type: 'contextTooShort';\n}\nexport interface CopilotNotAvailable {\n type: 'copilotNotAvailable';\n}\nexport const _contextTooShort: ContextTooShort = {type: 'contextTooShort'};\nexport const _copilotNotAvailable: CopilotNotAvailable = {type: 'copilotNotAvailable'};\nexport type PromptResponse = PromptResponsePresent | CopilotNotAvailable | ContextTooShort;\n\n/**\n * Most fundamental prompt constructor that talks directly with promptlib.\n *\n * This extracts all context from the document and environment that may\n * influence how promptlib should construct the prompt, e.g. default options as\n * well as deviations from these depending on any experiment that the user may\n * be in.\n */\nasync function getPromptForSource(\n ctx: Context,\n source: string,\n offset: number,\n relativePath: string | undefined,\n uri: URI,\n languageId: string\n) {\n const docInfo: DocumentInfoWithOffset = {\n uri: uri.toString(),\n source,\n offset,\n relativePath,\n languageId,\n };\n\n const repoInfo = extractRepoInfoInBackground(ctx, uri.fsPath);\n const repoNwo = tryGetGitHubNWO(repoInfo) ?? '';\n const userKind = await getUserKind(ctx);\n const dogFood = getDogFood(repoInfo);\n\n const featuresFilterArgs: FeaturesFilterArgs = {repoNwo, userKind, dogFood, fileType: languageId};\n\n const maxTokens = await ctx.get(Features).maxPromptCompletionTokens(featuresFilterArgs);\n const maxPromptLength = maxTokens - getConfig(ctx, ConfigKey.SolutionLength);\n const neighboringTabs = await ctx.get(Features).neighboringTabsOption(featuresFilterArgs);\n const neighboringSnippetTypes = await ctx.get(Features).neighboringSnippetTypes(featuresFilterArgs);\n const numberOfSnippets = await ctx.get(Features).numberOfSnippets(featuresFilterArgs);\n const snippetPercent = await ctx.get(Features).snippetPercent(featuresFilterArgs);\n const suffixStartMode = await ctx.get(Features).suffixStartMode(featuresFilterArgs);\n // Note: tokenizerName uses only two parameters from filterArgs: repoNwo and userKind\n const tokenizerName = await ctx.get(Features).tokenizerName(featuresFilterArgs);\n const indentationMinLength = await ctx.get(Features).indentationMinLength(featuresFilterArgs);\n const indentationMaxLength = await ctx.get(Features).indentationMaxLength(featuresFilterArgs);\n const cursorContextFix = await ctx.get(Features).cursorContextFix(featuresFilterArgs);\n const cursorSnippetsPickingStrategy = await ctx.get(Features).cursorSnippetsPickingStrategy(featuresFilterArgs);\n\n let promptOptions: PartialPromptOptions = {\n maxPromptLength,\n neighboringTabs,\n suffixStartMode,\n tokenizerName,\n neighboringSnippetTypes,\n indentationMinLength,\n indentationMaxLength,\n cursorSnippetsPickingStrategy,\n numberOfSnippets,\n snippetPercent,\n cursorContextFix,\n };\n\n let docs: DocumentInfo[] = [];\n let neighborSource = new Map();\n // We have many experiments to get neighbors, so I add this try-catch to avoid breaking the whole prompt.\n try {\n const files = await NeighborSource.getNeighborFiles(ctx, uri, featuresFilterArgs);\n docs = files.docs;\n neighborSource = files.neighborSource;\n } catch (e) {\n telemetryException(ctx, e, 'prompt.getPromptForSource.exception');\n }\n\n let snippets: SnippetWithProviderInfo[] = [];\n\n // Should we use retrieval?\n const retrievalOptions = await getRetrievalOptions(ctx, featuresFilterArgs);\n if (retrievalOptions) {\n snippets = await queryRetrievalSnippets(ctx, docInfo, retrievalOptions);\n }\n\n // Should we use symbol definitions in the prompt?\n const useSymbolDefinitions = await ctx.get(Features).symbolDefinitionStrategy(featuresFilterArgs);\n if (useSymbolDefinitions) {\n const symbolDefSnippets = await getSymbolDefSnippets(ctx, docInfo);\n snippets.push(...symbolDefSnippets);\n }\n\n // Handle suffix use\n const suffixPercent = await ctx.get(Features).suffixPercent(featuresFilterArgs);\n const suffixMatchThreshold = await ctx.get(Features).suffixMatchThreshold(featuresFilterArgs);\n const fimSuffixLengthThreshold = await ctx.get(Features).fimSuffixLengthThreshold(featuresFilterArgs);\n\n if (suffixPercent > 0) {\n promptOptions = {\n ...promptOptions,\n suffixPercent: suffixPercent,\n suffixMatchThreshold: suffixMatchThreshold,\n fimSuffixLengthThreshold: fimSuffixLengthThreshold,\n };\n }\n\n const fileSystem = ctx.get(FileSystem);\n let promptInfo: PromptInfo;\n const history = new Map>();\n for (const key of cursorHistoryManager.lineCursorHistory.keys()) {\n history.set(key, cursorHistoryManager.lineCursorHistory.get(key) ?? new Map());\n }\n\n try {\n promptInfo = await getPrompt(fileSystem, docInfo, promptOptions, docs, snippets, history);\n } catch (e) {\n // This is a critical error, so we want to know about it. But we can't stop it.\n // So we just log it and continue.\n await telemetryException(ctx, e, 'prompt.getPromptForSource.exception');\n throw e;\n }\n\n return {neighborSource, ...promptInfo};\n}\n\n/** Record trailing whitespace, and trim it from prompt if the last line is only whitespace */\nexport function trimLastLine(source: string): [string, string] {\n const lines = source.split('\\n');\n const lastLine = lines[lines.length - 1];\n const extraSpace: number = lastLine.length - lastLine.trimRight().length;\n const promptTrim = source.slice(0, source.length - extraSpace);\n const trailingWs = source.slice(promptTrim.length);\n const resPrompt = lastLine.length == extraSpace ? promptTrim : source;\n return [resPrompt, trailingWs];\n}\n\n// Exported for testing\nexport async function extractPromptForSource(\n ctx: Context,\n source: string,\n offset: number,\n relativePath: string | undefined,\n uri: URI,\n languageId: string\n): Promise {\n if (ctx.get(CopilotIgnoreManager).isIgnored(uri)) return _copilotNotAvailable;\n const repoInfo = extractRepoInfoInBackground(ctx, uri.fsPath);\n const repoNwo = tryGetGitHubNWO(repoInfo) ?? '';\n const userKind = await getUserKind(ctx);\n const dogFood = getDogFood(repoInfo);\n\n const featuresFilterArgs: FeaturesFilterArgs = {repoNwo, dogFood, userKind, fileType: languageId};\n\n const suffixPercent = await ctx.get(Features).suffixPercent(featuresFilterArgs);\n const fimSuffixLengthThreshold = await ctx.get(Features).fimSuffixLengthThreshold(featuresFilterArgs);\n const eligibleChars = suffixPercent > 0 ? source.length : offset;\n if (eligibleChars < MIN_PROMPT_CHARS) {\n // Too short context\n return _contextTooShort;\n }\n const startTime = Date.now();\n\n const {\n prefix,\n suffix,\n prefixLength,\n suffixLength,\n promptChoices,\n promptBackground,\n promptElementRanges,\n neighborSource,\n } = await getPromptForSource(ctx, source, offset, relativePath, uri, languageId);\n const [resPrompt, trailingWs] = trimLastLine(prefix);\n\n const endTime = Date.now();\n\n return {\n type: 'prompt',\n prompt: {\n prefix: resPrompt,\n suffix,\n prefixTokens: prefixLength,\n suffixTokens: suffixLength,\n isFimEnabled: suffixPercent > 0 && suffix.length > fimSuffixLengthThreshold,\n promptElementRanges: promptElementRanges.ranges,\n },\n trailingWs: trailingWs,\n promptChoices,\n computeTimeMs: endTime - startTime,\n promptBackground,\n neighborSource,\n };\n}\n\nasync function extractPromptForDocument(\n ctx: Context,\n doc: ITextDocument,\n position: IPosition\n): Promise {\n const relativePath = await ctx.get(TextDocumentManager).getRelativePath(doc);\n return extractPromptForSource(ctx, doc.getText(), doc.offsetAt(position), relativePath, doc.uri, doc.languageId);\n}\n\nfunction addNeighboringCellsToPrompt(neighboringCell: INotebookCell, activeCellLanguageId: string) {\n const languageId = neighboringCell.document.languageId;\n const text = neighboringCell.document.getText();\n if (languageId === activeCellLanguageId) {\n // Blocks of the same language are added as is\n return text;\n } else {\n // Consider adding a languageMarker to cells of different languages\n // Note, that comments should be added with markers from the language of the active cell!\n return commentBlockAsSingles(text, activeCellLanguageId);\n }\n}\n\nexport async function extractPromptForNotebook(\n ctx: Context,\n doc: ITextDocument,\n notebook: INotebookDocument,\n position: IPosition\n): Promise {\n const activeCell = notebook.getCells().find(cell => cell.document.uri === doc.uri);\n if (activeCell) {\n const cells = notebook.getCells();\n const beforeCells = cells.filter(\n cell =>\n cell.index < activeCell.index &&\n considerNeighborFile(activeCell.document.languageId, cell.document.languageId)\n );\n const beforeSource =\n beforeCells.length > 0\n ? beforeCells\n .map(cell => addNeighboringCellsToPrompt(cell, activeCell.document.languageId))\n .join('\\n\\n') + '\\n\\n'\n : '';\n const source = beforeSource + doc.getText();\n const offset = beforeSource.length + doc.offsetAt(position);\n const relativePath = await ctx.get(TextDocumentManager).getRelativePath(doc);\n return extractPromptForSource(ctx, source, offset, relativePath, doc.uri, activeCell.document.languageId);\n } else {\n // Fallback\n return extractPromptForDocument(ctx, doc, position);\n }\n}\n\nexport function extractPrompt(ctx: Context, doc: ITextDocument, position: IPosition): Promise {\n const workspace = ctx.get(TextDocumentManager);\n const notebook = workspace.findNotebook(doc);\n if (notebook === undefined) {\n return extractPromptForDocument(ctx, doc, position);\n } else {\n return extractPromptForNotebook(ctx, doc, notebook, position);\n }\n}\n","import * as promptlib from '@github/copilot-promptlib';\nimport {Worker} from 'worker_threads';\nimport {Context} from '../context';\nimport {Logger} from '../logger';\n\nlet worker: Worker | null = null;\n\n/**\n * A map of pending computations run on the worker thread, each associated with a handler object\n * containing methods `resolve` and `reject`.\n *\n * When a computation on the worker thread completes successfully, the `resolve` method is invoked\n * with the result. If it fails, the `reject` method is invoked with an error object.\n */\nconst handlers = new Map();\nlet nextHandlerId = 0;\n\n/**\n * Initialize the worker.\n */\nexport function init(ctx: Context, use_worker_threads: boolean, logger: Logger) {\n if (!use_worker_threads) {\n // To enable debugging of promptlib, we load the promptlib through path\n // loading and overwrite the exported functions to call these.\n const localPromptlib = require('../../../prompt/src/lib');\n for (const fn of [...workerFuns, ...directFuns]) {\n module.exports[fn] = localPromptlib[fn];\n }\n return;\n }\n\n // Proxy functions on the worker thread\n for (const fn of workerFuns) {\n module.exports[fn] = proxy(ctx, logger, fn as ProxiedFunction);\n }\n module.exports.getPrompt = getPromptProxy(ctx, logger);\n\n worker = promptlib.createWorker();\n handlers.clear();\n nextHandlerId = 0;\n const fileSystem = ctx.get(promptlib.FileSystem);\n\n /**\n * Handle the result of a computation returned from the worker.\n */\n worker.on('message', ({id, err, res}) => {\n const handler = handlers.get(id);\n logger.debug(ctx, `Response ${id} - ${res}, ${err}`);\n if (handler) {\n handlers.delete(id);\n if (err) {\n handler.reject(err);\n } else {\n handler.resolve(res);\n }\n }\n });\n\n /**\n * Handle an unexpected error by logging it and rejecting all handlers.\n */\n function handleError(err: Error) {\n logger.exception(ctx, err);\n for (const handler of handlers.values()) {\n handler.reject(err);\n }\n handlers.clear();\n }\n\n worker.on('error', handleError);\n\n worker.on('exit', code => {\n if (code !== 0) {\n handleError(new Error(`Worker thread exited with code ${code}.`));\n }\n });\n\n worker.on('readFileReq', (path: string) => {\n logger.debug(ctx, `READ_FILE_REQ - ${path}`);\n fileSystem\n .readFile(path)\n .then(res => {\n worker?.emit('readFileRes', res);\n })\n .catch(handleError);\n });\n\n worker.on('mtimeRes', (path: string) => {\n logger.debug(ctx, `mTime_REQ - ${path}`);\n fileSystem\n .mtime(path)\n .then(res => {\n worker?.emit('mtimeRes', res);\n })\n .catch(handleError);\n });\n}\n\n/**\n * Shut down the worker.\n */\nexport function terminate() {\n if (worker) {\n worker.removeAllListeners();\n worker.terminate();\n worker = null;\n handlers.clear();\n }\n}\n\n/**\n * A type that can be copied using the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm).\n *\n * Note: This is an approximation; it doesn't currently seem to be possible to capture this precisely\n * (https://github.com/microsoft/TypeScript/issues/29941).\n */\ntype CloneableType =\n // primitives\n | boolean\n | number\n | string\n | undefined\n // objects with cloneable properties\n | {[key in keyof ProxiedInterface]: CloneableType}\n // arrays with clonable elements\n | CloneableType[];\n\n/** The functions we want to proxy to run on the worker thread. */\nconst workerFuns = [\n 'getFunctionPositions',\n 'isEmptyBlockStart',\n 'isBlockBodyFinished',\n 'getNodeStart',\n 'getCallSites',\n 'parsesWithoutError',\n] as const;\ntype ProxiedFunction = (typeof workerFuns)[number];\n\n/** The functions we want to call directly on the extension host thread. */\nconst directFuns = ['isSupportedLanguageId', 'getBlockCloseToken', 'getPrompt'] as const;\n\n/** The interface types appearing in argument or return types of proxiable functions. */\ntype ProxiedInterface =\n | promptlib.NodePosition\n | promptlib.DocumentInfo\n | promptlib.DocumentInfoWithOffset\n | promptlib.PromptInfo\n | promptlib.PromptOptions;\n\n/**\n * Wrap function `fn` from `@github/copilot-promptlib` into a proxy that sends a message\n * with the function name and arguments to the worker and returns a promise that will be\n * resolved with the result the worker returns or rejected with any exception the worker\n * encounters.\n *\n * The wrapped function must return a promise, and its arguments and return values must be\n * primitive values or objects that can be serialized by the worker-threads library.\n */\nfunction proxy(ctx: Context, logger: Logger, fn: T): (typeof promptlib)[T] {\n return function (...args: CloneableType[]): Promise {\n const id = nextHandlerId++;\n return new Promise((resolve, reject) => {\n handlers.set(id, {resolve, reject});\n logger.debug(ctx, `Proxy ${fn}`);\n worker?.postMessage({id, fn, args});\n });\n };\n}\n\nfunction getPromptProxy(ctx: Context, logger: Logger) {\n return function (_fileSystem: promptlib.FileSystem, ...args: CloneableType[]): Promise {\n const id = nextHandlerId++;\n return new Promise((resolve, reject) => {\n handlers.set(id, {resolve, reject});\n logger.debug(ctx, `Proxy getPrompt - ${id}`);\n worker?.postMessage({id, fn: 'getPrompt', args});\n });\n };\n}\n\n/**\n * These declarations are added for the type checker.\n * They will be overwritten through module.exports in `init`.\n */\nexport const isEmptyBlockStart = promptlib.isEmptyBlockStart;\nexport const isBlockBodyFinished = promptlib.isBlockBodyFinished;\nexport const isSupportedLanguageId = promptlib.isSupportedLanguageId;\nexport const getBlockCloseToken = promptlib.getBlockCloseToken;\nexport const getFunctionPositions = promptlib.getFunctionPositions;\nexport const getNodeStart = promptlib.getNodeStart;\nexport const getPrompt = promptlib.getPrompt;\nexport const getCallSites = promptlib.getCallSites;\nexport const parsesWithoutError = promptlib.parsesWithoutError;\nexport type DocumentInfo = promptlib.DocumentInfo;\n","import {FileSystem} from '@github/copilot-promptlib';\nimport * as GitUrlParse from 'git-url-parse';\nimport {dirname, join} from 'path';\nimport {CopilotTokenManager} from '../auth/copilotToken';\nimport {LRUCacheMap} from '../common/cache';\nimport {Context} from '../context';\n\nexport interface RepoInfo {\n /**\n * the parent directory of .git, or \"\" if there is no .git directory\n */\n baseFolder: string;\n /**\n * the full url of the remote origin, e.g. git@github.com:github/synth.git or https://github.com/github-internal/copilot-client.git\n */\n url: string;\n /**\n * the hostname of the remote repository, e.g. github.com\n */\n hostname: string;\n /**\n * the user group of the remote repository, e.g. github-internal\n */\n owner: string;\n /**\n * the repository name, e.g. copilot\n */\n repo: string;\n /**\n * Git remote pathname\n */\n pathname: string;\n}\n\nexport type MaybeRepoInfo = RepoInfo | undefined | ComputationStatus;\n\nexport function isRepoInfo(info: MaybeRepoInfo): info is RepoInfo {\n return info !== undefined && info !== ComputationStatus.PENDING;\n}\n\nexport function isNotRepo(info: MaybeRepoInfo): boolean {\n return info === undefined;\n}\n\n/**\n * If we know about specific organizations, return them to be included in ExP calls.\n */\nexport async function getUserKind(ctx: Context): Promise {\n const token = await ctx.get(CopilotTokenManager).getCopilotToken(ctx, false);\n const orgs = token.organization_list ?? [];\n // Do not add org mapping, see https://github.com/github/copilot-client/issues/2457\n const known_orgs = [\n 'a5db0bcaae94032fe715fb34a5e4bce2',\n '7184f66dfcee98cb5f08a1cb936d5225',\n '4535c7beffc844b46bb1ed4aa04d759a',\n ];\n return known_orgs.find(org => orgs.includes(org)) ?? '';\n}\n\nexport function getDogFood(repoInfo: MaybeRepoInfo): string {\n if (repoInfo === undefined) {\n return '';\n }\n if (repoInfo === ComputationStatus.PENDING) {\n return '';\n }\n\n const ghnwo = tryGetGitHubNWO(repoInfo);\n if (ghnwo === 'github/github') {\n return ghnwo;\n }\n\n const adoNwo = tryGetADONWO(repoInfo)?.toLowerCase();\n if (adoNwo !== undefined) {\n return adoNwo;\n }\n\n return '';\n}\n\nexport function tryGetGitHubNWO(repoInfo: MaybeRepoInfo): string | undefined {\n if (repoInfo === undefined) {\n return undefined;\n }\n if (repoInfo === ComputationStatus.PENDING) {\n return undefined;\n }\n if (repoInfo.hostname === 'github.com') {\n return repoInfo.owner + '/' + repoInfo.repo;\n }\n return undefined;\n}\n\n/**\n * Retrieve ADO NWO. I separate this from GitHub since it logic could change\n * and incorporate organization for some repos.\n * @param repoInfo\n * @returns\n */\nfunction tryGetADONWO(repoInfo: MaybeRepoInfo): string | undefined {\n if (repoInfo === undefined) {\n return undefined;\n }\n if (repoInfo === ComputationStatus.PENDING) {\n return undefined;\n }\n if (repoInfo.hostname.endsWith('azure.com') || repoInfo.hostname.endsWith('visualstudio.com')) {\n return repoInfo.owner + '/' + repoInfo.repo;\n }\n return undefined;\n}\n\n/**\n * Sends off a computation to extract information about which git repo the file belongs to in the background.\n * @param fileUri URI of a file under the repo\n * @returns\n * - If the computation is still running (in particular for the first time), returns ComputationStatus.PENDING.\n * - If a file from this path has been looked at before, and no repository has been identified, returns undefined.\n * - If a file from this path has been looked at before, and a repository has been identified, returns the repo info.\n */\nexport function extractRepoInfoInBackground(ctx: Context, fileUri: string): MaybeRepoInfo {\n if (!fileUri) {\n return undefined;\n }\n const baseFolder = dirname(fileUri);\n return backgroundRepoInfo(ctx, baseFolder);\n}\n\n// Note that we assume that the same filesystem path always returns the same repository information.\n// If this changes on disk, or if two different contexts with different FileSystem implementations\n// are passed for the same path, such as for a test, then the cached value may be incorrect\nconst backgroundRepoInfo = computeInBackgroundAndMemoize(extractRepoInfo, 10000);\n\n/**\n * If the file is part of a git repository, return the information about the repository.\n * @param uri URI of a folder or file in the repository\n * @param fs The file system to be used\n * @returns A RepoInfo object, or undefined if the file is not part of a git repository.\n * If it does appear to be part of a git repository, but its information is not parsable,\n * it returns a RepoInfo object with hostname, user and repo set to \"\".\n */\nasync function extractRepoInfo(ctx: Context, uri: string): Promise {\n const baseFolder = await getRepoBaseFolder(ctx, uri);\n if (!baseFolder) {\n return undefined;\n }\n const fs = ctx.get(FileSystem);\n const configPath = join(baseFolder, '.git', 'config');\n const gitConfig = (await fs.readFile(configPath)).toString();\n const url = getRepoUrlFromConfigText(gitConfig) ?? '';\n const parsedResult = parseRepoUrl(url);\n if (parsedResult === undefined) {\n return {baseFolder, url, hostname: '', owner: '', repo: '', pathname: ''};\n } else {\n return {baseFolder, url, ...parsedResult};\n }\n}\n\n// Export for testing, so that we don't expose extractRepoInfo directly.\nexport async function extractRepoInfoForTesting(ctx: Context, uri: string): Promise {\n return extractRepoInfo(ctx, uri);\n}\n\n// export for testing\nexport function parseRepoUrl(\n url: string\n): {hostname: string; owner: string; repo: string; pathname: string} | undefined {\n let parsedUrl: any = {};\n\n // try to parse the url\n try {\n parsedUrl = GitUrlParse(url);\n // if any of the essential fields are missing, the url is invalid\n if (parsedUrl.host == '' || parsedUrl.owner == '' || parsedUrl.name == '' || parsedUrl.pathname == '') {\n return undefined;\n }\n } catch (e) {\n return undefined;\n }\n\n return {\n hostname: parsedUrl.host,\n owner: parsedUrl.owner,\n repo: parsedUrl.name,\n pathname: parsedUrl.pathname,\n };\n}\n\n/**\n * Returns the base folder of the git repository containing the file, or undefined if none is found.\n * Will search recursively for a .git folder containing a config file.\n */\nasync function getRepoBaseFolder(ctx: Context, uri: string): Promise {\n // to make sure the while loop terminates, we make sure the path variable decreases in length\n let previousUri = uri + '_add_to_make_longer';\n const fs = ctx.get(FileSystem);\n while (uri.length > 1 && uri.length < previousUri.length) {\n const configPath = join(uri, '.git', 'config');\n let result = false;\n\n try {\n await fs.stat(configPath);\n result = true;\n } catch (reason) {\n result = false;\n }\n\n if (result) {\n return uri;\n } else {\n previousUri = uri;\n uri = dirname(uri);\n }\n }\n return undefined;\n}\n\n/**\n * Parses a git config file, returning\n * 1. remote.origin.url if it exists,\n * 2. any remote.[name].url if it exists but not 1.,\n * 3. undefined if neither exist.\n * Will throw if the file does not exist.\n *\n * The config format is expected to follow https://git-scm.com/docs/git-config#_configuration_file\n * e.g. it could include lines like\n [remote \"origin\"]\n url = git@github.com:github/copilot-client.git\n fetch = +refs/heads/*:refs/remotes/origin/*\n *\n * Known limitations:\n * - This will not respect include and includeIf directions\n *\n * @param gitConfig the contents of the git config file\n * @returns the url, or undefined if none found\n */\nexport function getRepoUrlFromConfigText(gitConfig: string): string | undefined {\n // We're looking for [remote \"origin\"] and [remote \"name\"] sections\n\n // section headers must be one line,\n // except for whitespace, they're [section \"subsection\"]\n // where subsection can contain \" by escaping \\\" and\n // can escape \\ by \\\\ (so that e.g. it can be the last character before the \")\n const remoteSectionRegex = /^\\s*\\[\\s*remote\\s+\"((\\\\\\\\|\\\\\"|[^\\\\\"])+)\"/;\n // deprecated syntax: [section.subsection]\n const deprecatedRemoteSectionRegex = /^\\s*\\[remote.([^\"\\s]+)/;\n // extract the name of the remote -- assume it doesn't contain whitespace, and remember # and ; start comments\n const setUrlRegex = /^\\s*url\\s*=\\s*([^\\s#;]+)/;\n // use the following to check whether the current section ended\n const newSectionRegex = /^\\s*\\[/;\n\n let remoteUrl: string | undefined = undefined;\n let remoteSection = undefined;\n let isWithinMultilineUrl = false;\n for (const line of gitConfig.split('\\n')) {\n if (isWithinMultilineUrl && remoteUrl !== undefined) {\n remoteUrl += line;\n if (line.endsWith('\\\\')) {\n remoteUrl = remoteUrl.substring(0, remoteUrl.length - 1);\n } else {\n isWithinMultilineUrl = false;\n if (remoteSection === 'origin') {\n // we're already finished\n return remoteUrl;\n }\n }\n } else {\n // check whether a new section starts\n const remoteSectionMatch = line.match(remoteSectionRegex) ?? line.match(deprecatedRemoteSectionRegex);\n if (remoteSectionMatch) {\n remoteSection = remoteSectionMatch[1];\n } else if (line.match(newSectionRegex)) {\n remoteSection = undefined;\n } else if (remoteUrl && remoteSection !== 'origin') {\n // if we already have any remote url, only \"origin\" is more interesting\n continue;\n } else {\n const urlMatch = line.match(setUrlRegex);\n if (urlMatch) {\n remoteUrl = urlMatch[1];\n if (remoteUrl.endsWith('\\\\')) {\n remoteUrl = remoteUrl.substring(0, remoteUrl.length - 1);\n isWithinMultilineUrl = true;\n } else if (remoteSection === 'origin') {\n // we're already finished\n return remoteUrl;\n }\n }\n }\n }\n }\n return remoteUrl;\n}\n\n/**\n * Helper functionality for doing the computation in the background\n */\n\nexport enum ComputationStatus {\n PENDING,\n}\n\nclass CompletedComputation {\n readonly result: T;\n constructor(result: T) {\n this.result = result;\n }\n}\n\n/**\n * Function wrapper that memoizes a given function to be computed in the background.\n * Until the first computation is complete, the wrapper returns ComputationStatus.PENDING.\n * The context is not taken into account for computing the cache key so the function may\n * behave incorrectly if called with different contexts.\n * @param fct A function returning a promise whose arguments are amenable to JSON.stringify.\n * @param cacheSize Number of elements to cache.\n * @returns The memoized function, which returns ComputationStatus.PENDING until the first computation is complete.\n */\nfunction computeInBackgroundAndMemoize Promise>(\n fct: T,\n cacheSize: number\n): (ctx: Context, ...args: Parameters) => S | ComputationStatus {\n const resultsCache = new LRUCacheMap>(cacheSize);\n const inComputation: Set = new Set();\n return (ctx: Context, ...args: any[]) => {\n const key = JSON.stringify(args);\n const memorizedComputation = resultsCache.get(key);\n if (memorizedComputation) {\n return memorizedComputation.result;\n }\n if (inComputation.has(key)) {\n // already being computed from a different call\n return ComputationStatus.PENDING;\n }\n const computation = fct(ctx, ...args);\n inComputation.add(key);\n computation.then(computedResult => {\n // remove from inComputation\n resultsCache.set(key, new CompletedComputation(computedResult));\n inComputation.delete(key);\n });\n return ComputationStatus.PENDING;\n };\n}\n","/**\n * Module for retrieving code snippets from an index server\n */\nimport equal = require('fast-deep-equal');\n\nimport {\n CursorContextOptions,\n DocumentInfoWithOffset,\n getCursorContext,\n ScoredSnippet,\n SnippetProviderType,\n SnippetSemantics,\n SnippetWithProviderInfo,\n} from '@github/copilot-promptlib';\nimport {createHash} from 'crypto';\nimport * as uuid from 'uuid';\nimport {CopilotTokenManager} from '../auth/copilotToken';\nimport {LRUCacheMap} from '../common/cache';\nimport {Context} from '../context';\nimport {Features, FeaturesFilterArgs} from '../experiments/features';\nimport {Logger, LogLevel} from '../logger';\nimport {postRequest, Response} from '../networking';\nimport {OPENAI_PROXY_HOST} from '../openai/config';\nimport {Alignment, editDistance} from '../suggestions/editDistance';\nimport {telemetry, TelemetryData} from '../telemetry';\n\nconst logger = new Logger(LogLevel.DEBUG, `retrieval`);\n\n/** Cursor context, i.e. query snippet, with additional information used by\n * matchers */\nexport type RetrievalContext = {\n querySnippet: string;\n offset: number;\n tokenLength: number;\n lineCount: number;\n};\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// TYPES FOR INTERACTION WITH THE INDEX SERVER\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Type for options pertaining to retrieving snippets from an index server that proposed by DevDiv.\n */\ntype RetrievalOptionsDevDiv = {\n server: {\n language: string;\n };\n};\n\n/**\n * Type for options pertaining to retrieving snippets from an index server that proposed by AIMS.\n */\ntype RetrievalOptionsAIMS = {\n server: {\n range_from?: number;\n range_to?: number;\n max_length?: number;\n };\n};\n\n/**\n * Type for all options pertaining to retrieving snippets from an index server.\n *\n * This type is used as a state, so that whenever it changes, we can clear the\n * retrieval snippet cache.\n */\nexport type RetrievalOptions = RetrievalOptionsAIMS &\n RetrievalOptionsDevDiv & {\n repoNwo: string;\n /** Name of the route to decide which retrieval implementation to use */\n serverRouteImpl: string;\n context: {\n /** The max no. of lines we want in the context, undefined = no limit, 0 = no context */\n maxLineCount?: number;\n /** The max no. of tokens we want in the context, undefined = no limit, 0 = no context */\n maxTokenLength?: number;\n /** If the found context has fewer lines than this, then don't retrieve */\n minLineCount?: number;\n /** If the found context has fewer tokens than this, then don't retrieve */\n minTokenLength?: number;\n };\n server: {\n results?: number;\n before_lines?: number;\n after_lines?: number;\n query_style?: string;\n truncation_mode?: string;\n filter_overlap?: boolean;\n };\n cache: {\n snippetMatcherName: RetrievalCacheSnippetMatcher;\n snippetMatcherThreshold: number;\n maxUriCacheSize: number;\n };\n };\n\n/** The return type of a retrieval query to the index server */\nexport type RetrievalQuerySnippetResult = {\n corpus_config: {\n corpus_id: number;\n source: string;\n path: string;\n repo_nwo: string | null;\n repo_sha: string | null;\n meta: Record;\n index_timestamp: string;\n snippeting_config: {\n length: number;\n stride: number;\n };\n filetypes: string[];\n };\n text: {\n before: string;\n snippet: string;\n after: string;\n };\n line_info: {\n before_start_line: number;\n start_line: number;\n end_line: number;\n after_end_line: number;\n };\n file: string;\n distance: number;\n};\n\n/** What we extract from a {@link RetrievalQuerySnippetResult} */\ntype ScoredSnippetWithTelemetryInfo = ScoredSnippet & {\n restrictedTelemetry: {\n corpusId: number;\n repoNwo: string | null;\n repoSha: string | null;\n indexTimestamp: string;\n };\n};\n\n/** Extract a {@link ScoredSnippetWithTelemetryInfo} from a {@link RetrievalQuerySnippetResult} */\nfunction snippetFromRetrievalResult(result: RetrievalQuerySnippetResult): ScoredSnippetWithTelemetryInfo {\n return {\n snippet: result.text.before + result.text.snippet + result.text.after,\n score: result.distance,\n startLine: result.line_info.before_start_line,\n endLine: result.line_info.after_end_line,\n relativePath: result.file,\n restrictedTelemetry: {\n corpusId: result.corpus_config.corpus_id,\n repoNwo: result.corpus_config.repo_nwo,\n repoSha: result.corpus_config.repo_sha,\n indexTimestamp: result.corpus_config.index_timestamp,\n },\n };\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// SNIPPET CACHE AND MATCHING\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A snippet matcher is essentially a binary comparison operator.\n * Parameterized matchers are handled using higher-order functions.\n */\ntype SnippetMatcher = (queryKey: RetrievalContext, cacheKey: RetrievalContext) => boolean;\n\n/**\n * Available snippet matchers as definable in the ExP assignment\n */\nexport const RETRIEVAL_CACHE_SNIPPET_MATCHERS = [\n 'exact',\n 'editDistanceRelative',\n 'editDistanceAbsolute',\n 'lineBasedRelative',\n 'lineBasedAbsolute',\n] as const;\nexport type RetrievalCacheSnippetMatcher = (typeof RETRIEVAL_CACHE_SNIPPET_MATCHERS)[number];\n\n/**\n * Build the snippet matcher corresponding to an ExP assignment.\n */\nexport function buildSnippetMatcher(\n matcherName: RetrievalCacheSnippetMatcher,\n matcherThreshold?: number\n): SnippetMatcher {\n const LINEBASED_MAX_LINE_LENGTH = 100;\n switch (matcherName) {\n case 'exact':\n return exactSnippetMatcher;\n case 'editDistanceRelative':\n if (matcherThreshold === undefined || matcherThreshold < 0 || matcherThreshold > 100) {\n throw new Error('Invalid threshold for editDistanceRelative matcher');\n }\n return editDistanceSnippetMatcher(matcherThreshold / 100, 'relative');\n case 'editDistanceAbsolute':\n if (matcherThreshold === undefined || matcherThreshold < 0) {\n throw new Error('Invalid threshold for editDistanceAbsolute matcher');\n }\n return editDistanceSnippetMatcher(matcherThreshold, 'absolute');\n case 'lineBasedRelative':\n if (matcherThreshold === undefined || matcherThreshold < 0 || matcherThreshold > 100) {\n throw new Error('Invalid threshold for lineBasedRelative matcher');\n }\n return lineBasedSnippetMatcher(matcherThreshold / 100, 'relative', LINEBASED_MAX_LINE_LENGTH);\n case 'lineBasedAbsolute':\n if (matcherThreshold === undefined || matcherThreshold < 0) {\n throw new Error('Invalid threshold for lineBasedAbsolute matcher');\n }\n return lineBasedSnippetMatcher(matcherThreshold, 'absolute', LINEBASED_MAX_LINE_LENGTH);\n default:\n // This may happen with an incorrectly set up ExP assignment.\n return exactSnippetMatcher;\n }\n}\n\n/**\n * Snippet matcher that matches if the query snippet is exactly the same as the cache snippet.\n */\nfunction exactSnippetMatcher(queryKey: RetrievalContext, cacheKey: RetrievalContext): boolean {\n return queryKey.querySnippet === cacheKey.querySnippet;\n}\n\n/**\n * This function breaks up a string into lines, and breaks up very long lines as well.\n *\n * This is a helper function in the `lineBasedSnippetMatcher`, and allows it to\n * match on partial lines easily.\n *\n * This function breaks long lines according to characters, retaining \"blocks\" of\n * maxLineCharLength characters.\n */\nexport function breakUpLongLines(text: string, maxLineCharLength: number): Set {\n const lines = new Set();\n for (const line of text.split('\\n')) {\n if (line.length <= maxLineCharLength) {\n lines.add(line);\n continue;\n }\n // Break up long lines\n let i = 0;\n while (i < line.length) {\n lines.add(line.substring(i, i + maxLineCharLength));\n i += maxLineCharLength;\n }\n }\n return lines;\n}\n\n/**\n * Snippet matcher that matches if the query snippet and the cache snippet have at least a certain\n * number of lines in common.\n * The threshold can be either absolute (i.e. the number of lines) or relative (i.e. the percentage of\n * lines).\n * The threshold is inclusive.\n */\nexport function lineBasedSnippetMatcher(\n threshold: number,\n thresholdType: 'relative' | 'absolute',\n maxLineCharLength: number\n): SnippetMatcher {\n return (queryKey: RetrievalContext, cacheKey: RetrievalContext) => {\n const queryLines = breakUpLongLines(queryKey.querySnippet, maxLineCharLength);\n const cacheLines = breakUpLongLines(cacheKey.querySnippet, maxLineCharLength);\n const intersection = new Set([...queryLines].filter(line => cacheLines.has(line)));\n\n if (thresholdType === 'relative') {\n const dissimilarity = 1 - intersection.size / (queryLines.size + cacheLines.size - intersection.size);\n return dissimilarity <= threshold;\n } else {\n return Math.max(queryLines.size, cacheLines.size) - intersection.size <= threshold;\n }\n };\n}\n\n/** Snippet matcher that matches if the edit distance between the query snippet and the cache snippet is below a threshold. */\nfunction editDistanceSnippetMatcher(threshold: number, thresholdType: 'relative' | 'absolute'): SnippetMatcher {\n return (queryKey: RetrievalContext, cacheKey: RetrievalContext) => {\n const res: Alignment = editDistance(queryKey.querySnippet, cacheKey.querySnippet);\n if (thresholdType === 'relative') {\n return res.distance <= threshold * Math.max(queryKey.querySnippet.length, cacheKey.querySnippet.length);\n } else {\n return res.distance <= threshold;\n }\n };\n}\n\n/**\n * Construct a RetrievalContext from a document and a set of options\n */\nexport function getRetrievalContext(\n docInfo: DocumentInfoWithOffset,\n options: Partial\n): RetrievalContext {\n const contextInfo = getCursorContext(docInfo, options);\n return {\n querySnippet: contextInfo.context,\n offset: docInfo.offset,\n tokenLength: contextInfo.tokenLength,\n lineCount: contextInfo.lineCount,\n };\n}\n\n/**\n * Cache for a single URI.\n *\n * Maps hashes of RetrievalContexts to (RetrievalContext, retrievalId, snippets).\n * To use the LRUCache, which assumes keys are strings, we hash the context.\n * The original RetrievalContext is preserved to allow for fuzzy matching by\n * scanning through the entire UriCache.\n */\ntype RetrievalCacheHit = {\n retrievalId: string;\n snippets: ScoredSnippet[];\n};\ntype UriCacheValue = RetrievalCacheHit & {\n context: RetrievalContext;\n};\ntype UriCache = LRUCacheMap;\n\n/**\n * Cache for snippets retrieved from an index server.\n * Maps URIs to UriCaches.\n */\nclass RetrievalCache {\n private uriToCache: Map = new Map();\n private matcher: SnippetMatcher;\n private maxUriCacheSize: number;\n\n constructor(matcher: SnippetMatcher, maxUriCacheSize: number) {\n this.matcher = matcher;\n this.maxUriCacheSize = maxUriCacheSize;\n }\n\n private hashContext(context: RetrievalContext): string {\n // The extra info in RetrievalContext will not influence returned\n // snippets. So we can ignore it when computing the hash.\n return createHash('sha1').update(context.querySnippet).digest('hex');\n }\n\n /**\n * Returns snippets if they are already cached. If not, it returns undefined.\n */\n get(uri: string, queryContext: RetrievalContext): RetrievalCacheHit | undefined {\n const uriCache = this.uriToCache.get(uri);\n\n if (uriCache === undefined) {\n return undefined;\n }\n\n // TODO: We may want to reorder the cache on a hit: that would\n // have two consequences:\n // 1. performance, but more importantly\n // 2. a query may fuzzy match multiple cached keys so reordering\n // would improve stability.\n // Right now, we are relying just on the LRU Cache for handling the\n // hits on the cache.\n for (const hash of uriCache.keys()) {\n const {context, retrievalId, snippets} = uriCache.get(hash)!;\n if (this.matcher(queryContext, context)) {\n return {retrievalId, snippets};\n }\n }\n }\n\n put(uri: string, retrievalId: string, retrievalContext: RetrievalContext, snippets: ScoredSnippet[]) {\n let uriCache = this.uriToCache.get(uri);\n if (uriCache === undefined) {\n uriCache = new LRUCacheMap(this.maxUriCacheSize);\n this.uriToCache.set(uri, uriCache);\n }\n uriCache.set(this.hashContext(retrievalContext), {context: retrievalContext, retrievalId, snippets});\n }\n}\n\n/** Helper function to look up in the cache, and handle telemetry */\nfunction lookupCache(\n ctx: Context,\n retrievalCache: RetrievalCache,\n docInfo: DocumentInfoWithOffset,\n retrievalContext: RetrievalContext\n) {\n const cacheLookupStart = Date.now();\n const cacheHit = retrievalCache.get(docInfo.uri, retrievalContext);\n const cacheLookupElapsed = Date.now() - cacheLookupStart;\n telemetrizeCacheLookup(ctx, cacheHit !== undefined, cacheLookupElapsed);\n return cacheHit;\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// TELEMETRY\n////////////////////////////////////////////////////////////////////////////////////////////////////\nfunction telemetrizeCacheLookup(ctx: Context, cacheHit: boolean, cacheLookupElapsed: number): void {\n telemetry(\n ctx,\n 'retrieval.cacheLookup',\n TelemetryData.createAndMarkAsIssued(\n {\n cacheHit: cacheHit ? 'true' : 'false',\n },\n {\n cacheLookupElapsed,\n }\n ),\n false /* standard */\n );\n}\n\nfunction telemetrizeTooShortContext(\n ctx: Context,\n docInfo: DocumentInfoWithOffset,\n retrievalContext: RetrievalContext\n): void {\n const commonMeasurements = {\n retrievalContextTokens: retrievalContext.tokenLength,\n retrievalLineCount: retrievalContext.lineCount,\n cursorPos: docInfo.offset,\n };\n telemetry(\n ctx,\n 'retrieval.tooShortContext',\n TelemetryData.createAndMarkAsIssued({}, commonMeasurements),\n false /* standard */\n );\n telemetry(\n ctx,\n 'retrieval.tooShortContext',\n TelemetryData.createAndMarkAsIssued(\n {\n file: docInfo.uri,\n retrievalContext: retrievalContext.querySnippet,\n },\n commonMeasurements\n ),\n true /* restricted */\n );\n}\n\nfunction telemetrizePostRetrievalRequest(\n ctx: Context,\n docInfo: DocumentInfoWithOffset,\n retrievalId: string,\n retrievalContext: RetrievalContext,\n retrievalOptions: RetrievalOptions\n): void {\n const commonMeasurements = {\n retrievalContextTokens: retrievalContext.tokenLength,\n retrievalLineCount: retrievalContext.lineCount,\n cursorPos: docInfo.offset,\n };\n\n telemetry(\n ctx,\n 'retrieval.issued',\n TelemetryData.createAndMarkAsIssued(\n {\n retrievalId,\n },\n commonMeasurements\n ),\n false /* standard */\n );\n telemetry(\n ctx,\n 'retrieval.issued',\n TelemetryData.createAndMarkAsIssued(\n {\n retrievalId,\n file: docInfo.uri,\n retrievalContext: retrievalContext.querySnippet,\n // TODO: Include the parts of retrieval options that may change\n // in experiments\n },\n commonMeasurements\n ),\n true /* restricted */\n );\n}\n\nfunction telemetrizePostRetrievalResponse(ctx: Context, retrievalId: string, response: Response): void {\n telemetry(\n ctx,\n 'retrieval.response',\n TelemetryData.createAndMarkAsIssued({\n retrievalId,\n }),\n false /* standard */\n );\n}\n\nfunction telemetrizePostRetrievalRequestError(ctx: Context, retrievalId: string, error: any): void {\n telemetry(\n ctx,\n 'retrieval.error',\n TelemetryData.createAndMarkAsIssued({\n retrievalId,\n error: JSON.stringify(error) ?? 'unknown',\n }),\n false /* standard */\n );\n}\n\nfunction telemetrizeProcessRetrievalResponse(\n ctx: Context,\n retrievalId: string,\n body: any,\n snippets: ScoredSnippetWithTelemetryInfo[]\n): void {\n const commonMeasurements = {\n numSnippetsFromServer: body?.results?.length || -1,\n numFilteredSnippets: snippets.length,\n };\n\n telemetry(\n ctx,\n 'retrieval.retrieved',\n TelemetryData.createAndMarkAsIssued(\n {retrievalId},\n {\n ...commonMeasurements,\n // TODO: This metadata is part of the response. Write proper\n // sanitizer and validator for this.\n elapsedEmbeddingNs: body?.metadata?.elapsed_embedding_ns || -1,\n elapsedKnnNs: body?.metadata?.elapsed_knn_ns || -1,\n elapsedFindSourceNs: body?.metadata?.elapsed_find_source_ns || -1,\n }\n ),\n false /* standard */\n );\n telemetry(\n ctx,\n 'retrieval.retrieved',\n TelemetryData.createAndMarkAsIssued(\n {\n retrievalId,\n snippets: JSON.stringify(\n snippets.map(snippet => {\n const {restrictedTelemetry, ...rest} = snippet;\n return {\n ...rest,\n ...restrictedTelemetry,\n };\n })\n ),\n },\n {\n ...commonMeasurements,\n }\n ),\n true /* restricted */\n );\n}\n\nfunction telemetrizeProcessRetrievalError(ctx: Context, retrievalId: string, body: any, error: any): void {\n telemetry(\n ctx,\n 'retrieval.errorProcess',\n TelemetryData.createAndMarkAsIssued({\n retrievalId,\n }),\n false /* standard */\n );\n telemetry(\n ctx,\n 'retrieval.errorProcess',\n TelemetryData.createAndMarkAsIssued({\n retrievalId,\n body: JSON.stringify(body) ?? 'unknown',\n error: JSON.stringify(error) ?? 'unknown',\n }),\n true /* restricted */\n );\n}\n\nfunction telemetrizeQueryRetrievalDebounce(ctx: Context, pendingRetrievalId: string): void {\n telemetry(\n ctx,\n 'retrieval.debounced',\n TelemetryData.createAndMarkAsIssued({\n pendingRetrievalId,\n }),\n false /* standard */\n );\n}\n\nfunction telemetrizeQueryRetrievalFromCache(\n ctx: Context,\n cachedRetrievalId: string,\n cachedSnippets: ScoredSnippet[]\n): void {\n telemetry(\n ctx,\n 'retrieval.cacheHit',\n TelemetryData.createAndMarkAsIssued(\n {\n cachedRetrievalId,\n },\n {\n numSnippetsReturned: cachedSnippets.length,\n }\n ),\n false /* standard */\n );\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// INDEX SERVER REQUESTS\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * We have at most one request at a time for a given document URI. This type\n * represents what state that request, if any, is in. Responses will be\n * processed the next time a prompt for this URI needs to be built.\n *\n * - idle: No request has been sent, or the last one has already been\n * processed.\n * - pending: A request has been sent, but the response has not been received\n * yet.\n * - response: A response has been received, but not yet processed.\n *\n */\nexport type RequestState =\n | {state: 'idle'}\n | {state: 'pending'; retrievalId: string}\n | {\n state: 'response';\n retrievalId: string;\n retrievalContext: RetrievalContext;\n response: Response;\n retrievalOptions: RetrievalOptions;\n };\n\nconst documentRequestStates: Map = new Map();\n\n/** The URL of the retireval route on the proxy, for a given repoNwo */\nexport function retrievalRequestUrl(repoNwo: string, serverRouteImpl: string): string {\n return OPENAI_PROXY_HOST + `/v0/retrieval?repo=${repoNwo}&impl=${serverRouteImpl}`;\n}\n\n/**\n * Filtering function that removes snippets from the query result depending on\n * local information.\n *\n * Currently removes snippets from the current document.\n */\nfunction filterQuerySnippets(docInfo: DocumentInfoWithOffset): (snippet: ScoredSnippetWithTelemetryInfo) => boolean {\n return (snippet: ScoredSnippetWithTelemetryInfo) => {\n if (snippet.relativePath === undefined) {\n // Always include snippets without a relative path.\n return true;\n }\n const isCurrentFile = docInfo.uri.endsWith(snippet.relativePath) || snippet.relativePath.endsWith(docInfo.uri);\n if (isCurrentFile) {\n // Ignore snippets from the current file.\n return false;\n }\n return true;\n };\n}\n\n/**\n * Post a request to get retrieval snippets from the index server (through the proxy).\n *\n * This function will post a request **but not await it**. When the response\n * comes back asynchronously, it is stored in the uriRequestStates map in the\n * 'response' state. It is the responsibility of the caller to check this later\n * and process the response.\n *\n * @param ctx the context\n * @param docInfo document info with offset\n * @param retrievalContext the retrieval context\n * @param newRetrievalOptions encapsulation of (potentially new) ExP state + retrieval options at the time of this request\n */\n\nasync function postRetrievalRequest(\n ctx: Context,\n docInfo: DocumentInfoWithOffset,\n retrievalContext: RetrievalContext,\n retrievalOptions: RetrievalOptions\n): Promise {\n const retrievalId = uuid.v4();\n documentRequestStates.set(docInfo.uri, {state: 'pending', retrievalId});\n const secretKey = (await ctx.get(CopilotTokenManager).getCopilotToken(ctx)).token;\n telemetrizePostRetrievalRequest(ctx, docInfo, retrievalId, retrievalContext, retrievalOptions);\n\n // NOTE: Don't await this! We just fire it off and let the handlers store the response\n postRequest(\n ctx,\n retrievalRequestUrl(retrievalOptions.repoNwo, retrievalOptions.serverRouteImpl),\n secretKey,\n /* intent: */ undefined,\n uuid.v4() /* NOTE: this means retrieval request id's are not linked to a specific completion request */,\n {\n query: retrievalContext.querySnippet,\n options: {...retrievalOptions.server},\n }\n )\n .then(async response => {\n logger.info(ctx, `Retrieval request for ${docInfo.uri} finished`);\n if (response.status === 200) {\n // We put the response in the request state.\n // It will be processed on the following call to\n // {@link queryRetrievalSnippets}\n documentRequestStates.set(docInfo.uri, {\n state: 'response',\n retrievalId,\n retrievalContext,\n response,\n retrievalOptions,\n });\n telemetrizePostRetrievalResponse(ctx, retrievalId, response);\n } else {\n throw new Error(`Retrieval request failed with status ${response.status}`);\n }\n })\n .catch(error => {\n logger.info(ctx, `Retrieval request for ${docInfo.uri} failed. Error: ${error}`);\n telemetrizePostRetrievalRequestError(ctx, retrievalId, error);\n documentRequestStates.set(docInfo.uri, {state: 'idle'});\n });\n}\n\n/**\n * Process a response from the index server. See also the doc for @info{postRetrievalRequest}.\n */\nexport async function processRetrievalResponse(\n ctx: Context,\n docInfo: DocumentInfoWithOffset,\n retrievalId: string,\n retrievalContext: RetrievalContext,\n response: Response,\n retrievalOptions: RetrievalOptions\n) {\n documentRequestStates.set(docInfo.uri, {state: 'idle'});\n // if the retrieval options that were sent out along with the request are\n // different from the current retrieval options, then we don't want to\n // process the response (the cache at the time of the request is now\n // invalid)\n // TODO: Telemetrize this race condition?\n if (!equal(retrievalOptions, currentRetrievalOptions)) {\n return;\n }\n const {data: unparsedData, impl} = await response.json();\n const data = JSON.parse(unparsedData);\n try {\n if (impl !== retrievalOptions.serverRouteImpl) {\n throw new Error(\n `Wrong retrieval implementation returned from the proxy: expected ${retrievalOptions.serverRouteImpl}, got ${impl}`\n );\n }\n if (data === null) {\n throw new Error('Retrieval response body is null');\n }\n logger.info(ctx, `Retrieval request for ${docInfo.uri} processed. Got ${data?.results?.length} snippets back`);\n const snippets = (data.results as RetrievalQuerySnippetResult[])\n .map(snippetFromRetrievalResult)\n .filter(filterQuerySnippets(docInfo));\n logger.info(ctx, `There were ${snippets.length} after filtering`);\n // Remove the restrictedTelemetry field from the snippets and\n // put the rest (now ScoredSnippets) in the cache\n retrievalCache?.put(\n docInfo.uri,\n retrievalId,\n retrievalContext,\n snippets.map(snippet => {\n const {restrictedTelemetry, ...rest} = snippet;\n return rest;\n })\n );\n telemetrizeProcessRetrievalResponse(ctx, retrievalId, data, snippets);\n } catch (error) {\n logger.exception(ctx, error, `Error while processing retrieval response`);\n telemetrizeProcessRetrievalError(ctx, retrievalId, data, error);\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////////////\n// EXPORTED FUNCTIONALITY AND GLOBALS\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n// Consider encapsulating these global variables in a class.\n\n/** The global retrieval cache. */\nlet retrievalCache: RetrievalCache | undefined = undefined;\n\n/** Global pointer to the current retrieval options. */\nlet currentRetrievalOptions: RetrievalOptions | undefined = undefined;\n\n/**\n * Methods that get/set global variables.\n * Exported for testing.\n */\nexport function setCurrentRetrievalOptions(options: RetrievalOptions) {\n currentRetrievalOptions = options;\n}\n\nexport function getRetrievalCache(): RetrievalCache | undefined {\n return retrievalCache;\n}\n\nexport function setRetrievalCache(retrievalOptions: RetrievalOptions) {\n const matcher = buildSnippetMatcher(\n retrievalOptions.cache.snippetMatcherName,\n retrievalOptions.cache.snippetMatcherThreshold\n );\n currentRetrievalOptions = retrievalOptions;\n retrievalCache = new RetrievalCache(matcher, retrievalOptions.cache.maxUriCacheSize);\n}\n\n/**\n * Query for retrieved snippets. Does not incur network latency, and can be safely awaited.\n *\n * When this is called, the retrieval cache is first checked.\n * If we have previously retrieved snippets that match the current retrieval options, then we return those.\n * Otherwise, we fire off a retrieval request in the background and return an empty array.\n */\nexport async function queryRetrievalSnippets(\n ctx: Context,\n docInfo: DocumentInfoWithOffset,\n retrievalOptions: RetrievalOptions\n): Promise {\n // compare newRetrievalOptions with the currentRetrievalOptions and rebuild\n // the cache if they don't match\n if (retrievalCache === undefined || !equal(currentRetrievalOptions, retrievalOptions)) {\n const matcher = buildSnippetMatcher(\n retrievalOptions.cache.snippetMatcherName,\n retrievalOptions.cache.snippetMatcherThreshold\n );\n currentRetrievalOptions = retrievalOptions;\n retrievalCache = new RetrievalCache(matcher, retrievalOptions.cache.maxUriCacheSize);\n }\n\n const requestState = documentRequestStates.get(docInfo.uri) ?? {state: 'idle'};\n if (requestState.state === 'pending') {\n // There's currently a retrieval request in transit for this document,\n // so we don't want to issue another one.\n telemetrizeQueryRetrievalDebounce(ctx, requestState.retrievalId);\n return [];\n }\n if (requestState.state === 'response') {\n // We have a response for this document, so we process it and continue.\n // After processing, the snippets will be in the cache, and so may be\n // returned below if the context still matches.\n await processRetrievalResponse(\n ctx,\n docInfo,\n requestState.retrievalId,\n requestState.retrievalContext,\n requestState.response,\n requestState.retrievalOptions\n );\n }\n const retrievalContext = getRetrievalContext(docInfo, retrievalOptions.context);\n /** If the context is too short, don't retrieve */\n if (\n retrievalContext.lineCount < (retrievalOptions.context.minLineCount ?? 0) ||\n retrievalContext.tokenLength < (retrievalOptions.context.minTokenLength ?? 0)\n ) {\n telemetrizeTooShortContext(ctx, docInfo, retrievalContext);\n return [];\n }\n // Time the following\n const cacheHit = lookupCache(ctx, retrievalCache, docInfo, retrievalContext);\n if (cacheHit === undefined) {\n await postRetrievalRequest(ctx, docInfo, retrievalContext, retrievalOptions);\n return [];\n } else {\n // All OK, we got snippets from the cache\n telemetrizeQueryRetrievalFromCache(ctx, cacheHit.retrievalId, cacheHit.snippets);\n logger.debug(ctx, `Retrieval cache hit for ${docInfo.uri}`);\n return cacheHit.snippets.map((snippet: ScoredSnippet) => {\n return {\n provider: SnippetProviderType.Retrieval,\n semantics: SnippetSemantics.Snippet,\n ...snippet,\n };\n });\n }\n}\n\n/**\n * Is retrieval active for this user in this context?\n *\n * Currently just polls the ExP assignment variables.\n * In the future, it should (also) poll the proxy server.\n * That poll should likely be non-blocking and return `false` immediately, and\n * then update the response asynchronously to be ready for the next completion.\n */\nexport async function getRetrievalOptions(\n ctx: Context,\n featuresFilterArgs: FeaturesFilterArgs\n): Promise {\n const isActive = await ctx.get(Features).retrievalStrategy(featuresFilterArgs);\n if (!isActive) {\n return undefined;\n }\n const serverRouteImpl = await ctx.get(Features).retrievalServerRoute(featuresFilterArgs);\n return {\n repoNwo: featuresFilterArgs.repoNwo,\n serverRouteImpl,\n context: {\n maxLineCount: 30,\n maxTokenLength: 1000,\n minLineCount: 8,\n minTokenLength: 30,\n },\n server: {\n results: 10,\n language: featuresFilterArgs.fileType,\n range_from: -10,\n range_to: 10,\n max_length: 192,\n // TODO test these options\n // before_lines: 0,\n // after_lines: 0,\n // query_style: 'code',\n // truncation_mode: 'head',\n // filter_overlap: true,\n },\n cache: {\n snippetMatcherName: 'lineBasedRelative',\n snippetMatcherThreshold: 40, // Jaccard dissimilarity to accept\n maxUriCacheSize: 5,\n },\n };\n}\n","import {DocumentInfo, DocumentInfoWithOffset, SnippetWithProviderInfo} from '@github/copilot-promptlib';\nimport memoize from '@github/memoize';\nimport {IPosition} from '../../../lib/src/textDocument';\nimport {LRUCacheMap} from '../common/cache';\nimport {Context} from '../context';\nimport {LogLevel, Logger} from '../logger';\nimport {shortCircuit} from '../util/shortCircuit';\nimport {getCallSites} from './promptLibProxy';\n\nconst logger = new Logger(LogLevel.INFO, 'symbol_def');\nconst lruCacheSize = 1000;\n\n/**\n * Information about a document, including a LineLoc corresponding to\n * the cursor position.\n */\nexport interface DocumentInfoWithPosition extends DocumentInfo {\n /** The line and column in the document where we want the completion */\n position: IPosition;\n}\n\n/**\n * Class for getting symbol definition information (implemented in the extension or the agent).\n *\n * It is not an interface because we need to call `ctx.get` on it to get the implementation from\n * the extension.\n */\nexport abstract class SymbolDefinitionProvider {\n abstract getSymbolDefinition(docInfo: DocumentInfoWithPosition): Promise;\n}\n\n/**\n * Given a symbol name and a document, get the symbol definition. Note that his function is memoized on (symbolName,docInfo.uri).\n * If the result is not cached, then the lookup is made based purely upon docInfo and then cached.\n * @param symbolName the name of the symbol - for example, in a function call `repo.clone_path(` the symbol name is `clone_path`\n * @param docInfo cursor position\n * */\nlet getSymbolDefinition = async function getSymbolDefinition(\n ctx: Context,\n symbolName: string, // this is used by the memoize function below to determine if the result is cached\n docInfo: DocumentInfoWithPosition,\n symbolDefinitionProvider: SymbolDefinitionProvider\n): Promise {\n try {\n return await symbolDefinitionProvider.getSymbolDefinition(docInfo);\n } catch (error) {\n // If this errors, then memoize (below) evicts the key from the cache, so we will try again next time\n // but if it errored last time, it will likely error again next time. So we just swallow the error and return an empty array\n logger.exception(ctx, error, 'Error retrieving definitions');\n return [];\n }\n};\ngetSymbolDefinition = memoize(getSymbolDefinition, {\n cache: new LRUCacheMap>(lruCacheSize),\n hash: (\n ctx: Context,\n symbolName: string,\n docInfo: DocumentInfoWithPosition,\n symbolDefinitionProvider: SymbolDefinitionProvider\n ) => `${docInfo.uri}#${symbolName}`,\n});\ngetSymbolDefinition = shortCircuit(\n getSymbolDefinition,\n 100, // max milliseconds\n []\n);\n\n/**\n * For a given cursor position, get the symbol definition snippets for each of the caller functions\n * @param docInfo cursor position\n * @returns array of snippets\n */\nexport async function getSymbolDefSnippets(\n ctx: Context,\n docInfo: DocumentInfoWithOffset\n): Promise {\n const symbolDefinitionProvider: SymbolDefinitionProvider = ctx.get(SymbolDefinitionProvider);\n\n const callerFunctions = await getCallSites(docInfo);\n if (callerFunctions.length == 0) return [];\n\n // There maybe multiple, nested callers (outermost first), so we go and get the definition for each one\n const symbolDefinitionPromises: Promise[] = [];\n for (const callerFunc of callerFunctions) {\n const docInfoSnippet: DocumentInfoWithPosition = {\n ...docInfo,\n position: callerFunc.position,\n };\n const symbolDefPromises = getSymbolDefinition(ctx, callerFunc.name, docInfoSnippet, symbolDefinitionProvider);\n symbolDefinitionPromises.push(symbolDefPromises);\n }\n const symbolSnippets = await Promise.all(symbolDefinitionPromises);\n return symbolSnippets.flat();\n}\n","/** Sometimes the model gets caught in repeating a simplistic and unhelpful pattern\n * This file provides functionality to check whether this might be the case\n */\n\nexport interface RepetitionConfig {\n max_token_sequence_length: number;\n last_tokens_to_consider: number;\n}\n\nconst configs: RepetitionConfig[] = [\n // in case of single token, 10 repetitions is too much already:\n {max_token_sequence_length: 1, last_tokens_to_consider: 10},\n // if the last 30 tokens are a repeat of up to 10 tokens, then it's a pattern:\n {max_token_sequence_length: 10, last_tokens_to_consider: 30},\n // if the pattern is very long, it needs to account for a long stretch so we can be sure\n {max_token_sequence_length: 20, last_tokens_to_consider: 45},\n {max_token_sequence_length: 30, last_tokens_to_consider: 60},\n];\n\n/**\n * Return whether the given token array ends in a repetition of a pattern.\n * Controlling the necessary pattern length is set in the configs array.\n */\nexport function isRepetitive(tokens: string[]): boolean {\n const tokensBackwards = tokens.slice();\n tokensBackwards.reverse();\n return (\n isRepeatedPattern(tokensBackwards) ||\n isRepeatedPattern(tokensBackwards.filter(token => token.trim().length > 0))\n );\n}\n\n/**\n * Determine whether the given array or string starts with the repetition of a pattern,\n * according to one of the predefined configs.\n */\nfunction isRepeatedPattern(s: ArrayLike): boolean {\n const prefix = kmp_prefix_function(s);\n for (const config of configs) {\n if (s.length < config.last_tokens_to_consider) {\n continue;\n }\n // This is the smallest number of characters that one may shift `s` so that it\n // overlaps with itself. That is also the smallest length of a repeated\n // pattern that makes up `s`, where the last repetition is possibly truncated.\n const patternLength = config.last_tokens_to_consider - 1 - prefix[config.last_tokens_to_consider - 1];\n if (patternLength <= config.max_token_sequence_length) {\n return true;\n }\n }\n return false;\n}\n\n/** Return the Knuth-Morris-Pratt prefix function pi.\n * For each i=0,..,.s.length-1, then\n * pi[i] = max(j < i, s.slice(0,i+1).beginsWith(s.slice(0, j+1)))\n * (note pi[0] = -1 by this definition)\n * Adapted from\n * Introduction to Algorithms, 3rd edition, by Thomas H. Cormen, et al.\n */\nfunction kmp_prefix_function(s: ArrayLike): number[] {\n const pi = Array(s.length).fill(0);\n pi[0] = -1;\n let k = -1;\n for (let q = 1; q < s.length; q++) {\n while (k >= 0 && s[k + 1] !== s[q]) {\n k = pi[k];\n }\n if (s[k + 1] === s[q]) {\n k++;\n }\n pi[q] = k;\n }\n return pi;\n}\n","export interface Alignment {\n distance: number;\n startOffset: number;\n endOffset: number;\n}\n\n/**\n * Computes the best alignment, under edit-distance, of placing `needle` within\n * `haystack`. These may be strings or arrays.\n *\n * In other words, the entirety of `needle` will count towards the distance,\n * while only the sub-range within `haystack` corresponding to the best match\n * will be included. This means `editDistance(a, b) != editDistance(b, a)` in\n * general.\n *\n * If `needle` and `haystack` are strings, the distance is in UTF-16 code units.\n * For instance, an emoji inserted in `needle` will increase the distance by 2,\n * while an ASCII character will increase it only by one.\n *\n * @param haystack The big string or array within which the needle should match\n * @param needle The small string or array to match\n * @param compare An optional comparison operator for the elements of `haystack`\n * and `needle`. It should return a \"cost\" for substituting a given element of\n * `haystack` with a given element of `needle`. If these elements are equal then\n * `compare` should return 0. The indices of these elements are also given to\n * compare.\n *\n * @returns An alignment of the best match possible, with offsets within\n * `haystack`.\n */\nexport function editDistance(\n haystack: T,\n needle: T,\n compare: (\n haystackElem: (typeof haystack)[number],\n needleElem: (typeof needle)[number],\n haystackIndex: number,\n needleIndex: number\n ) => number = (h, n) => (h === n ? 0 : 1)\n): Alignment {\n if (needle.length === 0 || haystack.length === 0) return {distance: needle.length, startOffset: 0, endOffset: 0};\n let curRow = new Array(needle.length + 1).fill(0);\n let curStart = new Array(needle.length + 1).fill(0);\n let prevRow = new Array(haystack.length + 1).fill(0);\n let prevStart = new Array(haystack.length + 1).fill(0);\n // Initialise the alignment of needle inside haystack\n let c = needle[0];\n for (let i = 0; i < haystack.length + 1; i++) {\n if (i === 0) curRow[i] = 1;\n else curRow[i] = compare(haystack[i - 1], c, i - 1, 0);\n // We record the starting offset as 0 in two distinct cases:\n // - At least one char of needle is inserted left of haystack\n // - 0th char of needle = or subst. 0'th char of haystack\n curStart[i] = i > 0 ? i - 1 : 0;\n }\n // Iterate over the rest of needle\n for (let j = 1; j < needle.length; j++) {\n // Set curRow to prevRow, and reuse the prevRow allocation for this\n // iteration (its contents will be entirely overwritten).\n let swap = prevRow;\n prevRow = curRow;\n curRow = swap;\n swap = prevStart;\n prevStart = curStart;\n curStart = swap;\n\n c = needle[j];\n curRow[0] = j + 1; // All chars of needle inserted before haystack.\n // Note: curStart[0] = 0 is invariant\n for (let i = 1; i < haystack.length + 1; i++) {\n // What happens to the j'th char of needle\n const inserted = 1 + prevRow[i]; // inserted after i'th char of haystack\n const deleted = 1 + curRow[i - 1]; // deleted after i'th char of haystack\n const substituted = compare(haystack[i - 1], c, i - 1, j) + prevRow[i - 1]; // substituted w. i'th char of haystack\n curRow[i] = Math.min(deleted, inserted, substituted);\n if (curRow[i] === substituted) {\n curStart[i] = prevStart[i - 1];\n } else if (curRow[i] === inserted) {\n curStart[i] = prevStart[i];\n } else {\n curStart[i] = curStart[i - 1];\n }\n }\n }\n\n // Find the best matching end-offset\n let best = 0;\n for (let i = 0; i < haystack.length + 1; i++) {\n if (curRow[i] < curRow[best]) best = i;\n }\n return {distance: curRow[best], startOffset: curStart[best], endOffset: best};\n}\n\ntype LexDictionary = Map;\n\nexport interface LexGenerator {\n (s: string): Generator;\n}\n\nexport function emptyLexDictionary(): LexDictionary {\n return new Map();\n}\n\nexport function reverseLexDictionary(d: LexDictionary): string[] {\n const lookup = new Array(d.size);\n for (const [lexeme, idx] of d) {\n lookup[idx] = lexeme;\n }\n return lookup;\n}\n\n/**\n * A simple lex generator.\n * A lexeme is one of the following three:\n * 1. A sequence of letters, numbers, _ and -\n * 2. A sequence of spaces\n * 3. Any other single Unicode code point\n */\nexport function* lexGeneratorWords(s: string): Generator {\n let buffer = '';\n enum State {\n Word,\n Space,\n Other,\n }\n let state: State = State.Word;\n for (const c of s) {\n let newState: State;\n if (/(\\p{L}|\\p{Nd}|_)/u.test(c)) newState = State.Word;\n else if (c === ' ') newState = State.Space;\n else newState = State.Other;\n if (newState === state && newState !== State.Other) {\n buffer += c;\n } else {\n if (buffer.length > 0) yield buffer;\n buffer = c;\n state = newState;\n }\n }\n if (buffer.length > 0) yield buffer;\n}\n\n/**\n * Convert a string into an array of lexeme ids, as defined by a lexeme dictionary.\n *\n * Lexemes not already in the dictionary will be added with a fresh key. Hence,\n * this function can be called with an `emptyLexDictionary()`.\n *\n * @param s The string to convert\n * @param lexDictionary The dictionary to begin with\n * @param lexGenerator The generator to use to convert `s` into a stream of\n * substring lexemes\n * @param lexFilter Keep only lexemes satisfying this conditional\n *\n * @returns Pair containing:\n * - an array of (lexeme ids, lexeme starting offset within `s`),\n * - the updated dictionary.\n */\nexport function lexicalAnalyzer(\n s: string,\n d: LexDictionary,\n lexGenerator: LexGenerator,\n lexFilter: (lexeme: string) => boolean\n): [[number, number][], LexDictionary] {\n const lexed = [] as [number, number][];\n let offset = 0;\n for (const lexeme of lexGenerator(s)) {\n if (lexFilter(lexeme)) {\n if (!d.has(lexeme)) d.set(lexeme, d.size);\n lexed.push([d.get(lexeme)!, offset]);\n }\n offset += lexeme.length;\n }\n return [lexed, d];\n}\n\nfunction notSingleSpace(s: string): boolean {\n return s !== ' ';\n}\n\nexport interface LexAlignment {\n lexDistance: number;\n startOffset: number; // offsets in utf-16 code units\n endOffset: number;\n haystackLexLength: number;\n needleLexLength: number;\n}\n\n/**\n * Computes the best alignment, under edit-distance, of placing the lexemes of\n * `needle` within those of `haystack`.\n *\n * More precisely, we compute the lex tokens of `needle` and `haystack` under\n * the same dictionary, and then align these by their edit distance using\n * `editDistance`. We then translate the offsets in the lex-match-alignment back\n * to character offsets.\n *\n * @param haystack The big string within which the needle should match\n * @param needle The small string to match\n * @param lexGenerator Generator which chops up a string into lexemes\n * @param lexFilter Keep only lexemes that return true on this function\n *\n * @returns An alignment of the best match possible, with offsets within\n * `haystack`.\n */\nexport function lexEditDistance(\n haystack: string,\n needle: string,\n lexGenerator: LexGenerator = lexGeneratorWords\n): LexAlignment {\n const [haystackLexed, d] = lexicalAnalyzer(haystack, emptyLexDictionary(), lexGenerator, notSingleSpace);\n const [needleLexed, dBoth] = lexicalAnalyzer(needle, d, lexGenerator, notSingleSpace);\n // Special case for empty haystack or needle (or either consisting of single space)\n if (needleLexed.length === 0 || haystackLexed.length === 0) {\n return {\n lexDistance: needleLexed.length,\n startOffset: 0,\n endOffset: 0,\n haystackLexLength: haystackLexed.length,\n needleLexLength: needleLexed.length,\n };\n }\n // Align the lexed strings\n // Take special care to not add cost if first lexeme of needle is postfix of\n // lexeme in haystack, or last lexeme of needle is prefix of lexeme in\n // haystack\n const lookupId = reverseLexDictionary(dBoth);\n const needleLexedLength = needleLexed.length;\n const needleFirst = lookupId[needleLexed[0][0]];\n const needleLast = lookupId[needleLexed[needleLexedLength - 1][0]];\n function compare(hLexId: number, nLexId: number, hIndex: number, nIndex: number) {\n if (nIndex === 0 || nIndex === needleLexedLength - 1) {\n const haystackLexeme = lookupId[haystackLexed[hIndex][0]];\n return (nIndex == 0 && haystackLexeme.endsWith(needleFirst)) ||\n (nIndex == needleLexedLength - 1 && haystackLexeme.startsWith(needleLast))\n ? 0\n : 1;\n } else {\n return hLexId === nLexId ? 0 : 1;\n }\n }\n const alignment = editDistance(\n haystackLexed.map(x => x[0]),\n needleLexed.map(x => x[0]),\n compare\n );\n // Convert the lexeme offsets in alignment to character offsets\n const startOffset = haystackLexed[alignment.startOffset][1];\n let endOffset =\n alignment.endOffset < haystackLexed.length ? haystackLexed[alignment.endOffset][1] : haystack.length;\n // Account for a possible filtered-out single-space lexeme at end of match\n if (endOffset > 0 && haystack[endOffset - 1] === ' ') --endOffset;\n\n return {\n lexDistance: alignment.distance,\n startOffset,\n endOffset,\n haystackLexLength: haystackLexed.length,\n needleLexLength: needleLexed.length,\n };\n}\n","// This file is auto-generated and should not be edited.\n\n// ghostTextDisplay model\nexport const ghostTextDisplayInterceptParameter = 2.98410452738298;\nexport const ghostTextDisplayLog1pcompCharLenParameter = -0.838732736843507;\nexport const ghostTextDisplayMeanLogProbParameter = 1.50314646255716;\nexport const ghostTextDisplayMeanAlternativeLogProbParameter = -0.237798634012662;\nexport const ghostTextDisplayLanguageParameters = {\n python: 0.314368072478742,\n};\n\nexport const ghostTextDisplayQuantiles = {\n '0.01': 0.225800751784931,\n '0.02': 0.290204307767402,\n '0.03': 0.333153496466045,\n '0.05': 0.404516749849559,\n '0.1': 0.513216040545626,\n '0.2': 0.626904979128674,\n '0.3': 0.694880719658273,\n '0.4': 0.743100684947291,\n '0.5': 0.782524520571946,\n '0.6': 0.816856186092243,\n '0.7': 0.84922977716585,\n '0.8': 0.883694877241999,\n '0.9': 0.921859050950077,\n '0.95': 0.944571268106974,\n '0.99': 0.969535563141733,\n};\n","/**\n * This file is about the situation where\n * we have a completion from the model,\n * but refrain from showing it to the user by default.\n * That may be because we suspect it to be\n * wrong, useless, or distracting.\n */\n\nimport {Context} from '../context';\nimport {Logger, LogLevel} from '../logger';\nimport {TelemetryData} from '../telemetry';\nimport {\n ghostTextDisplayInterceptParameter,\n ghostTextDisplayLanguageParameters,\n ghostTextDisplayLog1pcompCharLenParameter,\n ghostTextDisplayMeanAlternativeLogProbParameter,\n ghostTextDisplayMeanLogProbParameter,\n ghostTextDisplayQuantiles,\n} from './mlConstants';\n\nconst restraintLogger = new Logger(LogLevel.INFO, 'restraint');\n\n// Some maths functionality\n\n/**\n * Link functions are invertible monotone functions with domain [0, 1])\n * For any p in [0, 1], unlink(link(p)) = p\n * For any x in the codomain, unlink(x) must be in [0, 1] and link(unlink(x)) = x\n */\ninterface LinkFunction {\n link: (p: number) => number;\n unlink: (x: number) => number;\n}\n\nconst Logit: LinkFunction = {\n link: (x: number) => Math.exp(x) / (1 + Math.exp(x)),\n unlink: (p: number) => Math.log(p / (1 - p)),\n};\n\n/**\n * Linear interpolation based on data points of a monotonically increasing function.\n * @param x0 The input x-value\n * @param points Data points (x,y) of a monotonically increasing function\n * @returns An approximation of the y-value corresponding to `x0`\n */\nfunction linearInterpolation(x0: number, points: Map): number {\n const x_after = Math.min(...Array.from(points.keys()).filter(x => x >= x0));\n const x_before = Math.max(...Array.from(points.keys()).filter(x => x < x0));\n const y_after = points.get(x_after) as number;\n const y_before = points.get(x_before) as number;\n return y_before + ((y_after - y_before) * (x0 - x_before)) / (x_after - x_before);\n}\n\n// Defining logistic regression models\n\nclass Regressor {\n name: string;\n coefficient: number;\n transformation: (x: number) => number;\n\n constructor(name: string, coefficient: number, transformation?: (x: number) => number) {\n this.name = name;\n this.coefficient = coefficient;\n // identity as default\n this.transformation = transformation ? transformation : (x): number => x;\n }\n\n public contribution(value: number): number {\n return this.coefficient * this.transformation(value);\n }\n}\n\nclass LogisticRegression {\n intercept: number;\n coefficients: Regressor[];\n logitsToQuantiles: Map;\n link: LinkFunction = Logit;\n\n constructor(intercept: number, coefficients: Regressor[], quantiles?: {[key: number]: number}) {\n this.intercept = intercept;\n this.coefficients = coefficients;\n this.logitsToQuantiles = new Map();\n this.logitsToQuantiles.set(0, 0);\n this.logitsToQuantiles.set(1, 1);\n // add the quantiles if present\n if (quantiles) {\n for (const key in quantiles) {\n this.logitsToQuantiles.set(quantiles[key], Number(key));\n }\n }\n }\n\n public predict(ctx: Context, values: {[key: string]: number}): number {\n let sum = this.intercept;\n // loop through the key value pairs in this.coefficients\n // and calculate the sum of the coefficients\n // for each pair\n for (const regressor of this.coefficients) {\n const value = values[regressor.name];\n if (value === undefined) {\n if (false) {\n // Disabling this error for now as it comes up legitimately in short completions,\n // see https://github.com/github/copilot-client/issues/2113\n // TODO - there should be a cleaner way of detecting this case, but it's not obvious\n // how to do it cleanly and it's causing noise for people debugging VSCode.\n restraintLogger.error(\n ctx,\n `No value found for ${regressor.name} -- only got ${JSON.stringify(values)}`\n );\n }\n return NaN;\n } else {\n sum += regressor.contribution(value);\n }\n }\n return this.link.link(sum);\n }\n\n public quantile(ctx: Context, values: {[key: string]: number}): number {\n const logit = this.predict(ctx, values);\n return linearInterpolation(logit, this.logitsToQuantiles);\n }\n}\n\nconst ghostTextRetentionModel = new LogisticRegression(\n ghostTextDisplayInterceptParameter,\n [\n new Regressor('compCharLen', ghostTextDisplayLog1pcompCharLenParameter, x => Math.log(1 + x)),\n new Regressor('meanLogProb', ghostTextDisplayMeanLogProbParameter),\n new Regressor('meanAlternativeLogProb', ghostTextDisplayMeanAlternativeLogProbParameter),\n ].concat(\n Object.entries(ghostTextDisplayLanguageParameters).map(\n (value: [string, number]) => new Regressor(value[0], value[1])\n )\n ),\n ghostTextDisplayQuantiles\n);\n\n// Answering the question whether items should be displayed\n\n/**\n * Return a \"higher-is-better\" score\n * representing the confidence that the ghostText suggestion\n * will be retained, from 1 (certainly) down to 0 (certainly not).\n */\nexport function ghostTextScoreConfidence(ctx: Context, telemetryData: TelemetryData): number {\n const values = {...telemetryData.measurements};\n // add language presence -- iterate over all fields of the languagaParameters object\n Object.keys(ghostTextDisplayLanguageParameters).forEach(lang => {\n values[lang] = telemetryData.properties['customDimensions.languageId'] == lang ? 1 : 0;\n });\n return ghostTextRetentionModel.predict(ctx, values);\n}\n\n/**\n * Return a \"higher-is-better\" score\n * representing that this solution is expected to as good or better than\n * how many others, from 1 (better than all) down to 0 (better than none).\n */\nexport function ghostTextScoreQuantile(ctx: Context, telemetryData: TelemetryData): number {\n const values = {...telemetryData.measurements};\n // add language presence -- iterate over all fields of the languagaParameters object\n Object.keys(ghostTextDisplayLanguageParameters).forEach(lang => {\n values[lang] = telemetryData.properties['customDimensions.languageId'] == lang ? 1 : 0;\n });\n return ghostTextRetentionModel.quantile(ctx, values);\n}\n","// General utility functions for all kinds of suggestions (Ghost Text, Open Copilot)\n\nimport {Context} from '../context';\nimport {Logger} from '../logger';\nimport {APIChoice} from '../openai/openai';\nimport {getBlockCloseToken} from '../prompt/promptLibProxy';\nimport {telemetry, TelemetryData} from '../telemetry';\nimport {shouldFailForDebugPurposes} from '../testing/runtimeMode';\nimport {IPosition, ITextDocument} from '../textDocument';\nimport {isRepetitive} from './anomalyDetection';\n\n/**\n * To avoid double-closing blocks (#272), maybe snip a trailing block-close token\n * from the given completion.\n *\n * We check whether the completion ends with a block-close token, and the next line\n * after the cursor starts with that same token at the same indentation. If so,\n * we snip.\n */\nasync function maybeSnipCompletion(\n ctx: Context,\n doc: ITextDocument,\n position: IPosition,\n completion: string,\n isMiddleOfTheLineSuggestion: boolean\n): Promise {\n if (completion === '') {\n return completion;\n }\n\n // Default to `}` for block closing token\n let blockCloseToken = '}';\n\n //TODO: This should be properly handled in promptlib (in `getBlockCloseToken`)\n //but we don't want to change it before Universe.\n try {\n blockCloseToken = getBlockCloseToken(doc.languageId) ?? '}';\n } catch (e) {\n // Ignore errors\n }\n\n // if the last non-blank line of the completion only consists of the block close token plus whitespace,\n // and the next non-blank line after the insertion position is also only the block close token at the same indentation,\n // then we snip the block close token\n let nextLineStart = completion.length;\n do {\n const thisLineStart = completion.lastIndexOf('\\n', nextLineStart - 2) + 1;\n const line = completion.substring(thisLineStart, nextLineStart);\n if (line.trim() === blockCloseToken) {\n for (let i = position.line; i < doc.lineCount; i++) {\n let lineText = doc.lineAt(i).text;\n if (i === position.line) {\n lineText = lineText.substr(position.character);\n }\n if (lineText.startsWith(line.trimRight())) {\n //If it's middle-of-the-line suggestion we don't want to trim new line character at the end of the line.\n return completion.substring(\n 0,\n Math.max(0, isMiddleOfTheLineSuggestion ? thisLineStart : thisLineStart - 1)\n );\n }\n if (lineText.trim() !== '') {\n break;\n }\n }\n break;\n }\n if (nextLineStart === thisLineStart) {\n if (shouldFailForDebugPurposes(ctx)) {\n throw Error(`Aborting: maybeSnipCompletion would have looped on completion: ${completion}`);\n }\n break;\n }\n nextLineStart = thisLineStart;\n } while (nextLineStart > 1);\n\n return completion;\n}\n\nfunction matchesNextLine(document: ITextDocument, position: IPosition, text: string): boolean {\n let nextLine = '';\n let lineNo: number = position.line + 1;\n while (nextLine === '' && lineNo < document.lineCount) {\n nextLine = document.lineAt(lineNo).text.trim();\n if (nextLine === text.trim()) {\n return true;\n }\n lineNo++;\n }\n return false;\n}\n\nexport async function postProcessChoice(\n ctx: Context,\n insertionCategory: string,\n document: ITextDocument,\n position: IPosition,\n choice: APIChoice,\n isMiddleOfTheLineSuggestion: boolean,\n logger: Logger\n): Promise {\n if (isRepetitive(choice.tokens)) {\n const telemetryData = TelemetryData.createAndMarkAsIssued();\n telemetryData.extendWithRequestId(choice.requestId);\n telemetry(ctx, 'repetition.detected', telemetryData, true /*secure*/);\n // FIXME: trim request at start of repetitive block? for now we just skip\n logger.info(ctx, 'Filtered out repetitive solution');\n return undefined;\n }\n\n const postProcessedChoice = {...choice};\n\n // Avoid single-line completions that duplicate the next line (#993)\n if (matchesNextLine(document, position, postProcessedChoice.completionText)) {\n const baseTelemetryData = TelemetryData.createAndMarkAsIssued();\n baseTelemetryData.extendWithRequestId(choice.requestId);\n telemetry(ctx, 'completion.alreadyInDocument', baseTelemetryData);\n telemetry(\n ctx,\n 'completion.alreadyInDocument',\n baseTelemetryData.extendedBy({\n completionTextJson: JSON.stringify(postProcessedChoice.completionText),\n }),\n true /*secure*/\n );\n logger.info(ctx, 'Filtered out solution matching next line');\n return undefined;\n }\n // Avoid double-closing blocks (#272)\n postProcessedChoice.completionText = await maybeSnipCompletion(\n ctx,\n document,\n position,\n postProcessedChoice.completionText,\n isMiddleOfTheLineSuggestion\n );\n\n return postProcessedChoice.completionText ? postProcessedChoice : undefined;\n}\n\nexport function checkSuffix(document: ITextDocument, position: IPosition, choice: APIChoice): boolean {\n const currentLine = document.lineAt(position.line);\n const restOfLine = currentLine.text.substring(position.character);\n if (restOfLine.length > 0) {\n if (choice.completionText.indexOf(restOfLine) !== -1) {\n //If current suggestion contains rest of the line as substring\n //then we will include it in our suggestion range\n return true;\n } else {\n let lastIndex = 0;\n for (const c of restOfLine) {\n const idx = choice.completionText.indexOf(c, lastIndex + 1);\n if (idx > lastIndex) {\n lastIndex = idx;\n } else {\n lastIndex = -1;\n break;\n }\n }\n return lastIndex !== -1;\n }\n }\n return false;\n}\n","import Ajv, {JSONSchemaType} from 'ajv';\nimport * as uuid from 'uuid';\nimport {CopilotTokenNotifier} from './auth/copilotTokenNotifier';\nimport {\n dumpConfig,\n EditorAndPluginInfo,\n EditorSession,\n formatNameAndVersion,\n getBuild,\n getBuildType,\n getVersion,\n} from './config';\nimport {Context} from './context';\nimport {ExpConfig} from './experiments/expConfig';\nimport {Features} from './experiments/features';\nimport {FilterSettings} from './experiments/filters';\nimport {ExpServiceTelemetryNames} from './experiments/telemetryNames';\nimport {APIJsonData, RequestId} from './openai/openai';\nimport {Prompt} from './prompt/prompt';\nimport {shouldFailForDebugPurposes} from './testing/runtimeMode';\nimport {FailingTelemetryReporter, PromiseQueue} from './testing/telemetry';\nimport {redactPaths} from './util/pathRedaction';\n\nexport abstract class CopilotTelemetryReporter {\n abstract sendTelemetryEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void;\n abstract sendTelemetryErrorEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n },\n errorProps?: string[]\n ): void;\n abstract sendTelemetryException(\n error: Error,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void;\n abstract dispose(): Promise;\n}\n\n// A container for the secure and insecure reporters\nexport class TelemetryReporters {\n private reporter: CopilotTelemetryReporter | undefined;\n private reporterSecure: CopilotTelemetryReporter | undefined;\n\n public getReporter(ctx: Context): CopilotTelemetryReporter | undefined {\n return this.reporter;\n }\n public getSecureReporter(ctx: Context): CopilotTelemetryReporter | undefined {\n // Callers should do this check themselves as they may need to behave differently\n // if we are not sending restricted telemetry. The guard here is a backstop.\n // Note: if the decision about what telemetry to send when the user is opted-out\n // becomes more nuanced, we may need to drop this backstop.\n if (shouldSendRestricted(ctx)) {\n return this.reporterSecure;\n }\n if (shouldFailForDebugPurposes(ctx)) {\n return new FailingTelemetryReporter();\n }\n return undefined;\n }\n public setReporter(reporter: CopilotTelemetryReporter): void {\n this.reporter = reporter;\n }\n public setSecureReporter(reporter: CopilotTelemetryReporter): void {\n this.reporterSecure = reporter;\n }\n async deactivate(): Promise {\n // This will ensure all pending events get flushed\n let disposeReporter = Promise.resolve();\n if (this.reporter) {\n disposeReporter = this.reporter.dispose();\n this.reporter = undefined;\n }\n let disposeReporterSecure = Promise.resolve();\n if (this.reporterSecure) {\n disposeReporterSecure = this.reporterSecure.dispose();\n this.reporterSecure = undefined;\n }\n // NOTE: because of how setupTelemetryReporters call this method (which is to support\n // _createBaselineContext calling it synchronously), it must be safe to call this without await.\n // i.e. this.reporter and this.reporterSecure must be set before any await calls are made\n await Promise.all([disposeReporter, disposeReporterSecure]);\n }\n}\n\nexport class TelemetryUserConfig {\n // tracking id from auth token\n public trackingId: string | undefined;\n public organizationsList: string | undefined;\n public optedIn: boolean;\n\n constructor(ctx: Context, trackingId?: string, optedIn?: boolean) {\n this.trackingId = trackingId;\n this.optedIn = optedIn ?? false;\n this.setupUpdateOnToken(ctx);\n }\n\n private setupUpdateOnToken(ctx: Context) {\n ctx.get(CopilotTokenNotifier).on('onCopilotToken', copilotToken => {\n const restrictedTelemetry = copilotToken.getTokenValue('rt') === '1';\n const trackingId = copilotToken.getTokenValue('tid');\n const organizationsList = copilotToken.organization_list;\n if (trackingId !== undefined) {\n this.trackingId = trackingId;\n this.organizationsList = organizationsList?.toString();\n this.optedIn = restrictedTelemetry;\n }\n });\n }\n}\n\nexport type TelemetryProperties = {[key: string]: string};\nconst propertiesSchema: JSONSchemaType = {\n type: 'object',\n additionalProperties: {\n type: 'string',\n },\n required: [],\n};\ntype TelemetryMeasurements = {[key: string]: number};\nconst measurementsSchema: JSONSchemaType = {\n type: 'object',\n properties: {\n meanLogProb: {type: 'number'},\n meanAlternativeLogProb: {type: 'number'},\n },\n additionalProperties: {\n type: 'number',\n },\n required: [],\n};\n\n/**\n * A class holding the data we want send to telemetry,\n * {@link TelemetryData.properties} containing the strings\n * and {@link TelemetryData.measurements} containing the numbers.\n *\n * Additionally, this keeps tracks of timestamps {@link TelemetryData.created} and {@link TelemetryData.displayed}\n * that can be used to track when this object was created or when information\n * contained in this object was surfaced to the user.\n *\n * This is meant be used as an argument to\n * {@link telemetry}, {@link telemetryError}, or {@link telemetryException}.\n */\nexport class TelemetryData {\n properties: TelemetryProperties;\n measurements: TelemetryMeasurements;\n issuedTime: number;\n displayedTime?: number;\n\n filtersAndExp?: {filters: FilterSettings; exp: ExpConfig};\n\n // `strictNumbers:false` was added to allow `NaN` values in `meanLogProb` and `meanAlternativeLogProb`\n // see the tests in telemetry.test.ts for a slightly longer explanation\n private static ajv = new Ajv({strictNumbers: false});\n private static validateTelemetryProperties = TelemetryData.ajv.compile(propertiesSchema);\n private static validateTelemetryMeasurements = TelemetryData.ajv.compile(measurementsSchema);\n\n private static keysExemptedFromSanitization: string[] = [\n ExpServiceTelemetryNames.assignmentContextTelemetryPropertyName,\n ExpServiceTelemetryNames.featuresTelemetryPropertyName,\n ];\n\n private constructor(\n properties: {[key: string]: string},\n measurements: {[key: string]: number},\n issuedTime: number\n ) {\n this.properties = properties;\n this.measurements = measurements;\n this.issuedTime = issuedTime;\n }\n\n static createAndMarkAsIssued(\n properties?: {[key: string]: string},\n measurements?: {[key: string]: number}\n ): TelemetryData {\n return new TelemetryData(properties || {}, measurements || {}, now());\n }\n\n /**\n * @param properties new properties, which will overwrite old ones in case of a clash\n * @param measurements new measurements, which will overwrite old ones in case of a clash\n * @returns a TelemetryData object whose contents extend (copies of) the current one's and whose creation date is not updated\n */\n extendedBy(properties?: TelemetryProperties, measurements?: {[key: string]: number}): TelemetryData {\n const newProperties = {...this.properties, ...properties};\n const newMeasurements = {...this.measurements, ...measurements};\n const newData = new TelemetryData(newProperties, newMeasurements, this.issuedTime);\n newData.displayedTime = this.displayedTime;\n newData.filtersAndExp = this.filtersAndExp;\n\n return newData;\n }\n\n /**\n * registers current time as the point where this was displayed\n * (no-op if a display time is already registered)\n */\n markAsDisplayed(): void {\n if (this.displayedTime === undefined) {\n this.displayedTime = now();\n }\n }\n\n async extendWithExpTelemetry(ctx: Context): Promise {\n if (!this.filtersAndExp) {\n await ctx.get(Features).addExpAndFilterToTelemetry(this);\n }\n this.filtersAndExp!.exp.addToTelemetry(this);\n this.filtersAndExp!.filters.addToTelemetry(this);\n }\n\n extendWithEditorAgnosticFields(ctx: Context): void {\n this.properties['editor_version'] = formatNameAndVersion(ctx.get(EditorAndPluginInfo).getEditorInfo());\n this.properties['editor_plugin_version'] = formatNameAndVersion(\n ctx.get(EditorAndPluginInfo).getEditorPluginInfo()\n );\n const editorSession = ctx.get(EditorSession);\n this.properties['client_machineid'] = editorSession.machineId;\n this.properties['client_sessionid'] = editorSession.sessionId;\n this.properties['copilot_version'] = `copilot/${getVersion(ctx)}`;\n\n const editorInfo = ctx.get(EditorAndPluginInfo);\n this.properties['common_extname'] = editorInfo.getEditorPluginInfo().name;\n this.properties['common_extversion'] = editorInfo.getEditorPluginInfo().version;\n this.properties['common_vscodeversion'] = formatNameAndVersion(editorInfo.getEditorInfo());\n }\n\n /**\n * Iterate config keys defined in the package.json, lookup current config\n * value and return as telemetry property. Property name in dotted notation\n * and value is a json string.\n * e.g. { 'copilot.autocompletion.count': 3 }\n */\n extendWithConfigProperties(ctx: Context): void {\n const configProperties: {[key: string]: string} = dumpConfig(ctx);\n configProperties['copilot.build'] = getBuild(ctx);\n configProperties['copilot.buildType'] = getBuildType(ctx);\n\n const telemetryConfig = ctx.get(TelemetryUserConfig);\n if (telemetryConfig.trackingId) {\n configProperties['copilot.trackingId'] = telemetryConfig.trackingId;\n }\n if (telemetryConfig.organizationsList) {\n configProperties['organizations_list'] = telemetryConfig.organizationsList;\n }\n\n // By being the second argument, configProperties will always override\n this.properties = {...this.properties, ...configProperties};\n }\n\n extendWithRequestId(requestId: RequestId): void {\n const requestProperties = {\n completionId: requestId.completionId,\n created: requestId.created.toString(),\n headerRequestId: requestId.headerRequestId,\n serverExperiments: requestId.serverExperiments,\n deploymentId: requestId.deploymentId,\n };\n this.properties = {...this.properties, ...requestProperties};\n }\n\n // TODO: this is a very temporary pre-GA hack to resolve issue #2032\n // in the least risky/invasive way possible. Issue #2044 tracks doing this properly.\n private static keysToRemoveFromStandardTelemetryHack: string[] = [\n 'gitRepoHost',\n 'gitRepoName',\n 'gitRepoOwner',\n 'gitRepoUrl',\n 'gitRepoPath',\n 'repo',\n 'request_option_nwo',\n 'userKind', // See https://github.com/github/copilot-client/issues/2457\n ];\n\n /**\n * Remove the known properties relating to repository information from the telemetry data if necessary\n */\n static maybeRemoveRepoInfoFromPropertiesHack(secure: boolean, map: {[key: string]: any}): {[key: string]: any} {\n if (secure) {\n // We want to keep including these properties in secure/restricted telemetry.\n return map;\n }\n // deliberately written in the same style as `sanitizeKeys` to minimise risk\n const returnValue: {[key: string]: any} = {};\n for (const key in map) {\n if (!TelemetryData.keysToRemoveFromStandardTelemetryHack.includes(key)) {\n returnValue[key] = map[key];\n }\n }\n return returnValue;\n }\n\n sanitizeKeys(): void {\n this.properties = TelemetryData.sanitizeKeys(this.properties);\n this.measurements = TelemetryData.sanitizeKeys(this.measurements);\n }\n\n static sanitizeKeys(map?: {[key: string]: any}): {[key: string]: any} {\n // We need all keys to not have dots in them for telemetry to function\n map = map || {};\n const returnValue: {[key: string]: any} = {};\n // Iterate over all keys in the map and replace dots with underscores\n for (const key in map) {\n const newKey = TelemetryData.keysExemptedFromSanitization.includes(key) ? key : key.replace(/\\./g, '_');\n returnValue[newKey] = map[key];\n }\n return returnValue;\n }\n\n updateTimeSinceIssuedAndDisplayed(): void {\n const timeSinceIssued = now() - this.issuedTime;\n this.measurements.timeSinceIssuedMs = timeSinceIssued;\n\n if (this.displayedTime !== undefined) {\n const timeSinceDisplayed = now() - this.displayedTime;\n this.measurements.timeSinceDisplayedMs = timeSinceDisplayed;\n }\n }\n\n /** Validate that the data of the telemetry is in a valid format, i.e. that\n * all values of `properties` are strings and all values of `measurements` are\n * numbers.\n */\n validateData(ctx: Context, secure: boolean): boolean {\n let invalid: undefined | {problem: string; error: string};\n if (!TelemetryData.validateTelemetryProperties(this.properties)) {\n invalid = {\n problem: 'properties',\n error: JSON.stringify(TelemetryData.validateTelemetryProperties.errors),\n };\n }\n if (!TelemetryData.validateTelemetryMeasurements(this.measurements)) {\n const m_err = JSON.stringify(TelemetryData.validateTelemetryMeasurements.errors);\n if (invalid === undefined) {\n invalid = {\n problem: 'measurements',\n error: m_err,\n };\n } else {\n invalid.problem = 'both';\n invalid.error += `; ${m_err}`;\n }\n }\n if (invalid === undefined) {\n return true;\n } else {\n if (shouldFailForDebugPurposes(ctx)) {\n throw new Error(\n `Invalid telemetry data: ${invalid.problem} ${invalid.error} properties=${JSON.stringify(\n this.properties\n )} measurements=${JSON.stringify(this.measurements)}`\n );\n }\n telemetryError(\n ctx,\n 'invalidTelemetryData',\n TelemetryData.createAndMarkAsIssued({\n properties: JSON.stringify(this.properties),\n measurements: JSON.stringify(this.measurements),\n problem: invalid.problem,\n validationError: invalid.error,\n }),\n secure\n );\n if (secure) {\n // We cannot post the full telemetry event to the secure, but we\n // can flag on the insecure that there has been an event logged\n // to the secure, making it easier to discover.\n telemetryError(\n ctx,\n 'invalidTelemetryData_in_secure',\n TelemetryData.createAndMarkAsIssued({\n problem: invalid.problem,\n requestId: this.properties['requestId'] ?? 'unknown',\n }),\n false\n );\n }\n return false;\n }\n }\n\n async makeReadyForSending(ctx: Context, secure: boolean, includeExp: 'IncludeExp' | 'SkipExp'): Promise {\n this.extendWithConfigProperties(ctx);\n this.extendWithEditorAgnosticFields(ctx);\n this.sanitizeKeys();\n // the `includeExp` parameter is so we don't get into an infinite loop sending telemetry about\n // ExP itself.\n if (includeExp === 'IncludeExp') {\n // we actually want to do this step _after_ sanitizing the keys, because the keys may be unsanitary (and still required)\n await this.extendWithExpTelemetry(ctx);\n }\n this.updateTimeSinceIssuedAndDisplayed();\n if (!this.validateData(ctx, secure)) {\n // There's some problem with the data, but try to send it regardless with an extra\n // property we can filter for. There's a risk that the underlying telemetry library will just\n // silently drop it, though.\n this.properties['telemetry_failed_validation'] = 'true';\n }\n addRequiredProperties(ctx, this.properties);\n }\n}\n\n// Helpers\n\nfunction sendTelemetryEvent(\n ctx: Context,\n secure: boolean,\n name: string,\n data: {properties: {[key: string]: string}; measurements: {[key: string]: number}}\n): void {\n const r = secure\n ? ctx.get(TelemetryReporters).getSecureReporter(ctx)\n : ctx.get(TelemetryReporters).getReporter(ctx);\n r &&\n r.sendTelemetryEvent(\n name,\n TelemetryData.maybeRemoveRepoInfoFromPropertiesHack(secure, data.properties),\n data.measurements\n );\n}\n\nfunction sendTelemetryException(\n ctx: Context,\n secure: boolean,\n error: Error,\n data: {properties: {[key: string]: string}; measurements: {[key: string]: number}}\n): void {\n const r = secure\n ? ctx.get(TelemetryReporters).getSecureReporter(ctx)\n : ctx.get(TelemetryReporters).getReporter(ctx);\n r &&\n r.sendTelemetryException(\n error,\n TelemetryData.maybeRemoveRepoInfoFromPropertiesHack(secure, data.properties),\n data.measurements\n );\n}\n\nfunction sendTelemetryErrorEvent(\n ctx: Context,\n secure: boolean,\n name: string,\n data: {properties: {[key: string]: string}; measurements: {[key: string]: number}}\n): void {\n const r = secure\n ? ctx.get(TelemetryReporters).getSecureReporter(ctx)\n : ctx.get(TelemetryReporters).getReporter(ctx);\n r &&\n r.sendTelemetryErrorEvent(\n name,\n TelemetryData.maybeRemoveRepoInfoFromPropertiesHack(secure, data.properties),\n data.measurements\n );\n}\n\n/**\n * Creates an object containing info about the length of the prompt suitable\n * for saving in standard telemetry.\n *\n * Wraps the logic of having different fields for the case when the suffix is empty (using the\n * previous `promptCharLen` field) and when the suffix is not empty (using the new\n * `promptPrefixCharLen` and `promptSuffixCharLen` fields).\n */\nexport function telemetrizePromptLength(prompt: Prompt): {[key: string]: number} {\n if (prompt.isFimEnabled) {\n return {\n promptPrefixCharLen: prompt.prefix.length,\n promptSuffixCharLen: prompt.suffix.length,\n };\n } else {\n return {\n promptCharLen: prompt.prefix.length,\n };\n }\n}\n\nexport function now(): number {\n return new Date().getTime();\n}\n\nconst COPILOT_TELEMETRY_SERVICE_ENDPOINT = 'https://copilot-telemetry.githubusercontent.com/telemetry';\n\nexport class TelemetryEndpointUrl {\n constructor(private url = COPILOT_TELEMETRY_SERVICE_ENDPOINT) {}\n getUrl(): string {\n return this.url;\n }\n setUrlForTesting(url: string) {\n this.url = url;\n }\n}\n\nexport type AdditionalTelemetryProperties = {[key: string]: string};\n\nfunction shouldSendRestricted(ctx: Context): boolean {\n return ctx.get(TelemetryUserConfig).optedIn;\n}\n\nexport async function telemetry(ctx: Context, name: string, telemetryData?: TelemetryData, secure?: boolean) {\n await ctx.get(PromiseQueue).register(_telemetry(ctx, name, telemetryData, secure));\n}\n\nasync function _telemetry(ctx: Context, name: string, telemetryData?: TelemetryData, secure?: boolean) {\n if (secure && !shouldSendRestricted(ctx)) {\n return;\n }\n // if telemetry data isn't given, make a new one to hold at least the config\n const definedTelemetryData = telemetryData || TelemetryData.createAndMarkAsIssued({}, {});\n await definedTelemetryData.makeReadyForSending(ctx, secure ?? false, 'IncludeExp');\n sendTelemetryEvent(ctx, secure ?? false, name, definedTelemetryData);\n}\n\nexport async function telemetryExpProblem(ctx: Context, telemetryProperties: {reason: string}) {\n await ctx.get(PromiseQueue).register(_telemetryExpProblem(ctx, telemetryProperties));\n}\n\nasync function _telemetryExpProblem(ctx: Context, telemetryProperties: {reason: string}) {\n const name = 'expProblem';\n const definedTelemetryData = TelemetryData.createAndMarkAsIssued(telemetryProperties, {});\n await definedTelemetryData.makeReadyForSending(ctx, false /* not secure */, 'SkipExp');\n sendTelemetryEvent(ctx, false /* not secure */, name, definedTelemetryData);\n}\n\n/**\n * Send a telemetry message as-is, without the usual Copilot-specific processing from\n * `createAndMarkAsIssued` / `makeReadyForSending`.\n *\n * There is also no sanitization or validation currently. When adding new messages\n * using this method, make sure to add some tests of the fields, e.g. in `extension/src/ghostTest/telemetry.test.ts`.\n */\nexport async function telemetryRaw(\n ctx: Context,\n name: string,\n properties: {[key: string]: string},\n measurements: {[key: string]: number}\n) {\n await ctx.get(PromiseQueue).register(_telemetryRaw(ctx, name, properties, measurements));\n}\n\nasync function _telemetryRaw(\n ctx: Context,\n name: string,\n properties: {[key: string]: string},\n measurements: {[key: string]: number}\n) {\n addRequiredProperties(ctx, properties);\n sendTelemetryEvent(ctx, false /* not secure */, name, {properties, measurements});\n}\n\nfunction addRequiredProperties(ctx: Context, properties: {[key: string]: string}) {\n properties['unique_id'] = uuid.v4(); // add a unique id to the telemetry event so copilot-foundations can correlate with duplicate events\n const editorInfo = ctx.get(EditorAndPluginInfo);\n properties['common_extname'] = editorInfo.getEditorPluginInfo().name;\n properties['common_extversion'] = editorInfo.getEditorPluginInfo().version;\n properties['common_vscodeversion'] = formatNameAndVersion(editorInfo.getEditorInfo());\n}\n\nexport async function telemetryException(\n ctx: Context,\n maybeError: unknown,\n origin: string,\n properties?: AdditionalTelemetryProperties\n) {\n await ctx.get(PromiseQueue).register(_telemetryException(ctx, maybeError, origin, properties));\n}\n\nasync function _telemetryException(\n ctx: Context,\n maybeError: unknown,\n origin: string,\n properties?: AdditionalTelemetryProperties\n) {\n const error = maybeError instanceof Error ? maybeError : new Error('Non-error thrown: ' + maybeError);\n\n const sendRestricted = shouldSendRestricted(ctx);\n\n const definedTelemetryDataStub = TelemetryData.createAndMarkAsIssued({\n origin: redactPaths(origin),\n reason: sendRestricted ? 'Exception logged to restricted telemetry' : 'Exception, not logged due to opt-out',\n ...properties,\n });\n\n await definedTelemetryDataStub.makeReadyForSending(ctx, false /* not secure */, 'IncludeExp');\n\n // send a placeholder to standard (\"insecure\") telemetry\n sendTelemetryEvent(ctx, false /* not secure */, 'exception', definedTelemetryDataStub);\n\n if (!sendRestricted) return;\n\n const definedTelemetryDataSecure = TelemetryData.createAndMarkAsIssued({origin, ...properties});\n await definedTelemetryDataSecure.makeReadyForSending(ctx, true /* secure */, 'IncludeExp');\n\n // and the real error, which might contain arbitrary data, to restricted (\"secure\") telemetry.\n // We have previously observed paths and other potential PII in\n // - arbitrary unhandled exceptions coming from other extensions in the VSCode extension\n // - fields inserted into the data sent by `sendTelemetryException` in `vscode-extension-telementry` like `Assembly`,\n sendTelemetryException(ctx, true /* secure */, error, definedTelemetryDataSecure);\n}\n\nexport async function telemetryError(ctx: Context, name: string, telemetryData?: TelemetryData, secure?: boolean) {\n await ctx.get(PromiseQueue).register(_telemetryError(ctx, name, telemetryData, secure));\n}\n\nasync function _telemetryError(ctx: Context, name: string, telemetryData?: TelemetryData, secure?: boolean) {\n if (secure && !shouldSendRestricted(ctx)) {\n return;\n }\n const definedTelemetryData = telemetryData || TelemetryData.createAndMarkAsIssued({}, {});\n await definedTelemetryData.makeReadyForSending(ctx, secure ?? false, 'IncludeExp');\n sendTelemetryErrorEvent(ctx, secure ?? false, name, definedTelemetryData);\n}\n\nexport async function logEngineCompletion(\n ctx: Context,\n completionText: string,\n jsonData: APIJsonData,\n requestId: RequestId,\n choiceIndex: number\n) {\n const telemetryData = TelemetryData.createAndMarkAsIssued({\n completionTextJson: JSON.stringify(completionText),\n choiceIndex: choiceIndex.toString(),\n });\n\n if (jsonData.logprobs) {\n for (const [key, value] of Object.entries(jsonData.logprobs)) {\n telemetryData.properties['logprobs_' + key] = JSON.stringify(value) ?? 'unset';\n }\n }\n\n telemetryData.extendWithRequestId(requestId);\n await telemetry(ctx, 'engine.completion', telemetryData, true /*secure*/);\n}\n\nexport async function logEnginePrompt(ctx: Context, prompt: Prompt, telemetryData: TelemetryData) {\n let promptTelemetry;\n if (prompt.isFimEnabled) {\n promptTelemetry = {\n promptPrefixJson: JSON.stringify(prompt.prefix),\n promptSuffixJson: JSON.stringify(prompt.suffix),\n promptElementRanges: JSON.stringify(prompt.promptElementRanges),\n };\n } else {\n promptTelemetry = {\n promptJson: JSON.stringify(prompt.prefix),\n promptElementRanges: JSON.stringify(prompt.promptElementRanges),\n };\n }\n const telemetryDataWithPrompt = telemetryData.extendedBy(promptTelemetry);\n await telemetry(ctx, 'engine.prompt', telemetryDataWithPrompt, true /*secure*/);\n}\n","import {Context} from '../context';\nimport {TelemetryData, telemetry, telemetryError} from '../telemetry';\n\nexport enum AuthTelemetryNames {\n AuthNotifyShown = 'auth.auth_notify_shown',\n AuthNotifyDismissed = 'auth.auth_notify_dismissed',\n NewGitHubLogin = 'auth.new_github_login',\n GitHubLoginSuccess = 'auth.github_login_success',\n GitHubLoginFailed = 'auth.github_login_failed',\n}\n\nexport type AuthSource = 'toast' | 'goldbar' | 'menu' | 'unknown';\nexport type AuthType = 'editorAuth' | 'deviceFlow';\n\nexport async function telemetryAuthNotifyShown(ctx: Context, authSource: AuthSource) {\n const data = TelemetryData.createAndMarkAsIssued({authSource});\n await telemetry(ctx, AuthTelemetryNames.AuthNotifyShown, data);\n}\n\nexport async function telemetryAuthNotifyDismissed(ctx: Context) {\n await telemetry(ctx, AuthTelemetryNames.AuthNotifyDismissed);\n}\n\nexport async function telemetryNewGitHubLogin(ctx: Context, authSource: AuthSource, authType: AuthType) {\n const data = TelemetryData.createAndMarkAsIssued({authSource, authType});\n await telemetry(ctx, AuthTelemetryNames.NewGitHubLogin, data);\n}\n\nexport async function telemetryGitHubLoginSuccess(ctx: Context, authType: AuthType) {\n const data = TelemetryData.createAndMarkAsIssued({authType});\n await telemetry(ctx, AuthTelemetryNames.GitHubLoginSuccess, data);\n}\n\nexport async function telemetryGitHubLoginFailed(ctx: Context) {\n await telemetryError(ctx, AuthTelemetryNames.GitHubLoginFailed);\n}\n","import {Context} from '../context';\nimport {TelemetryReporters} from '../telemetry';\nimport {AzureInsightReporter} from './azureInsightsReporter';\n\n// the application insights key (also known as instrumentation key)\nexport const APP_INSIGHTS_KEY = '7d7048df-6dd0-4048-bb23-b716c1461f8f'; // copilot-telemetry under github non-prod octo\nexport const APP_INSIGHTS_KEY_SECURE = '3fdd7f28-937a-48c8-9a21-ba337db23bd1'; // copilot-telemetry-secure under github prod copilot\n\nexport async function setupTelemetryReporters(ctx: Context, telemetryNamespace: string, telemetryEnabled: boolean) {\n const deactivation = ctx.get(TelemetryReporters).deactivate();\n if (telemetryEnabled) {\n const container = ctx.get(TelemetryReporters);\n const reporter = new AzureInsightReporter(ctx, telemetryNamespace, APP_INSIGHTS_KEY);\n container.setReporter(reporter);\n const reporterSecure = new AzureInsightReporter(ctx, telemetryNamespace, APP_INSIGHTS_KEY_SECURE);\n container.setSecureReporter(reporterSecure);\n }\n await deactivation; // awaiting this last protects against unpredictable telemetry destinations if this function is called without awaiting it\n}\n","import * as appInsights from 'applicationinsights';\nimport * as os from 'os';\nimport {EditorSession} from '../config';\nimport {Context} from '../context';\nimport {CopilotTelemetryReporter, TelemetryEndpointUrl} from '../telemetry';\n\ntype TelemetryProperties = {[key: string]: string};\n\nexport class AzureInsightReporter implements CopilotTelemetryReporter {\n private readonly client: appInsights.TelemetryClient;\n constructor(ctx: Context, private readonly namespace: string, key: string) {\n this.client = createAppInsightsClient(ctx, key);\n configureReporter(ctx, this.client);\n }\n sendTelemetryEvent(\n eventName: string,\n properties?: TelemetryProperties,\n measurements?: {[key: string]: number} | undefined\n ): void {\n this.client.trackEvent({\n name: this.qualifyEventName(eventName),\n properties: properties,\n measurements,\n });\n }\n sendTelemetryErrorEvent(\n eventName: string,\n properties?: TelemetryProperties,\n measurements?: {[key: string]: number} | undefined\n ): void {\n this.sendTelemetryEvent(this.qualifyEventName(eventName), properties, measurements);\n }\n sendTelemetryException(\n error: Error,\n properties?: TelemetryProperties,\n measurements?: {[key: string]: number} | undefined\n ): void {\n this.client.trackException({\n exception: error,\n properties: properties,\n measurements,\n });\n }\n dispose(): Promise {\n return new Promise(resolve => {\n this.client.flush({\n callback: s => {\n resolve(undefined);\n },\n });\n });\n }\n\n private qualifyEventName(eventName: string): string {\n return eventName.startsWith(this.namespace) ? eventName : `${this.namespace}/${eventName}`;\n }\n}\n\nfunction createAppInsightsClient(ctx: Context, key: string) {\n const client = new appInsights.TelemetryClient(key);\n client.config.enableAutoCollectRequests = false;\n client.config.enableAutoCollectPerformance = false;\n client.config.enableAutoCollectExceptions = false;\n client.config.enableAutoCollectConsole = false;\n client.config.enableAutoCollectDependencies = false;\n (client.config as any).noDiagnosticChannel = true;\n\n configureReporter(ctx, client);\n return client;\n}\n\nfunction configureReporter(ctx: Context, client: appInsights.TelemetryClient): void {\n client.commonProperties = decorateWithCommonProperties(client.commonProperties, ctx);\n\n // Add session id and machine id to the telemetry data, required for non-vscode env\n const editorSession = ctx.get(EditorSession);\n client.context.tags[client.context.keys.sessionId] = editorSession.sessionId;\n client.context.tags[client.context.keys.userId] = editorSession.machineId;\n // Do not want personal machine names to be sent\n client.context.tags[client.context.keys.cloudRoleInstance] = 'REDACTED';\n\n client.config.endpointUrl = ctx.get(TelemetryEndpointUrl).getUrl();\n}\n\nfunction decorateWithCommonProperties(properties: TelemetryProperties, ctx: Context): TelemetryProperties {\n properties = properties || {};\n properties['common_os'] = os.platform();\n properties['common_platformversion'] = os.release();\n\n // We have editor-agnostic fields but keep the vs-specific ones for backward compatibility\n const editorSession = ctx.get(EditorSession);\n properties['common_vscodemachineid'] = editorSession.machineId;\n properties['common_vscodesessionid'] = editorSession.sessionId;\n\n properties['common_uikind'] = 'desktop';\n properties['common_remotename'] = 'none';\n properties['common_isnewappinstall'] = '';\n return properties;\n}\n","export function asReadableCert(cert: string): string {\n const startCert = cert.indexOf('-----BEGIN CERTIFICATE-----') + 27;\n const endCert = cert.indexOf('-----END CERTIFICATE-----');\n const contextLength = 30;\n const excerpt =\n cert.substring(startCert, startCert + contextLength) +\n '...' +\n cert.substring(endCert - contextLength, endCert - 1);\n return normalizeNewlines(excerpt);\n}\n\nexport function normalizeNewlines(excerpt: string): string {\n return excerpt.replace(/\\s/g, '');\n}\n","import {FileStat, FileSystem} from '@github/copilot-promptlib';\nimport {promises as fsp} from 'fs';\nimport {CopilotTokenManager, FixedCopilotTokenManager} from '../auth/copilotToken';\nimport {CopilotTokenNotifier} from '../auth/copilotTokenNotifier';\nimport {Clock} from '../clock';\nimport {\n BlockModeConfig,\n BuildInfo,\n ConfigBlockModeConfig,\n ConfigProvider,\n DefaultsOnlyConfigProvider,\n EditorAndPluginInfo,\n EditorSession,\n NameAndVersion,\n} from '../config';\nimport {Context} from '../context';\nimport {CopilotIgnoreManager} from '../copilotIgnore/manager';\nimport {UserErrorNotifier} from '../error/userErrorNotifier';\nimport {EditorExperimentFilters} from '../experiments/defaultExpFilters';\nimport {Features} from '../experiments/features';\nimport {ExpConfigMaker, ExpConfigNone} from '../experiments/fetchExperiments';\nimport {Filter} from '../experiments/filters';\nimport {CompletionsCache} from '../ghostText/completionsCache';\nimport {ContextualFilterManager} from '../ghostText/contextualFilter';\nimport {HeaderContributors} from '../headerContributors';\nimport {HybridInference} from '../hybridInference/hybridInference';\nimport {NoopHybridInference} from '../hybridInference/noopHybridInference';\nimport {LanguageDetection} from '../language/languageDetection';\nimport {ConsoleLog, LogTarget, LogVerbose} from '../logger';\nimport {CertificateReaderCache} from '../network/certificateReaderCache';\nimport {RootCertificateReader} from '../network/certificateReaders';\nimport {HelixFetcher} from '../network/helix';\nimport {DefaultNetworkConfiguration, NetworkConfiguration} from '../networkConfiguration';\nimport {Fetcher} from '../networking';\nimport {NotificationSender} from '../notificationSender';\nimport {PostInsertionNotifier} from '../postInsertionNotifier';\nimport {NoOpStatusReporter, StatusReporter} from '../progress';\nimport {TelemetryEndpointUrl, TelemetryReporters, TelemetryUserConfig} from '../telemetry';\nimport {setupTelemetryReporters} from '../telemetry/azureInsights';\nimport {LocationFactory} from '../textDocument';\nimport {TextDocumentManager} from '../textDocumentManager';\nimport {UrlOpener} from '../util/opener';\nimport {createTestCertificateReader} from './fetcher';\nimport {RuntimeMode} from './runtimeMode';\nimport {PromiseQueue} from './telemetry';\nimport {TestNotificationSender, TestUrlOpener} from './testHelpers';\nimport {TestLanguageDetection} from './testLanguageDetection';\nimport {TestProductFeatures} from './testProductFeatures';\nimport {TestLocationFactory, TestTextDocumentManager} from './textDocument';\n\n/**\n * Baseline for a context. Tests should prefer the specific variants outlined below.\n *\n * @see createLibTestingContext\n * @see createExtensionTestingContext\n * @see createAgentTestingContext\n */\nexport function _createBaselineContext(configProvider: ConfigProvider): Context {\n const ctx = new Context();\n ctx.set(CopilotIgnoreManager, new CopilotIgnoreManager(ctx));\n ctx.set(ConfigProvider, configProvider);\n ctx.set(BuildInfo, new BuildInfo());\n ctx.set(RuntimeMode, RuntimeMode.fromEnvironment(true));\n ctx.set(CertificateReaderCache, new CertificateReaderCache());\n ctx.set(RootCertificateReader, createTestCertificateReader([]));\n ctx.set(Fetcher, new HelixFetcher(ctx));\n ctx.set(LogVerbose, new LogVerbose(false));\n ctx.set(Clock, new Clock());\n ctx.set(ExpConfigMaker, new ExpConfigNone());\n ctx.set(ContextualFilterManager, new ContextualFilterManager());\n ctx.set(CopilotTokenNotifier, new CopilotTokenNotifier());\n ctx.set(TelemetryUserConfig, new TelemetryUserConfig(ctx, 'tid=test', true));\n ctx.set(TestProductFeatures, new TestProductFeatures(ctx));\n ctx.set(TelemetryReporters, new TelemetryReporters());\n // Notifications from the monolith when fetching a token can trigger behaviour that require these objects.\n ctx.set(NotificationSender, new TestNotificationSender());\n ctx.set(UrlOpener, new TestUrlOpener());\n ctx.set(LogTarget, new ConsoleLog(console));\n ctx.set(UserErrorNotifier, new UserErrorNotifier(ctx));\n ctx.set(TelemetryEndpointUrl, new TelemetryEndpointUrl());\n ctx.set(EditorSession, new EditorSession('test-session', 'test-machine'));\n // setupTelemetryReporters should be called with await, but there is a workaround in place to make this safe\n // to call asynchronously so we don't have to rewrite all tests to be async.\n setupTelemetryReporters(ctx, 'copilot-test', true);\n ctx.set(Features, new Features(ctx));\n ctx.set(CompletionsCache, new CompletionsCache());\n ctx.set(PostInsertionNotifier, new PostInsertionNotifier());\n ctx.set(BlockModeConfig, new ConfigBlockModeConfig());\n ctx.set(CopilotTokenManager, new FixedCopilotTokenManager('tid=test'));\n ctx.set(StatusReporter, new NoOpStatusReporter());\n ctx.set(HeaderContributors, new HeaderContributors());\n ctx.set(LanguageDetection, new TestLanguageDetection());\n ctx.set(EditorExperimentFilters, new NoAdditionalExperimentFilters());\n ctx.set(PromiseQueue, new PromiseQueue());\n ctx.set(NetworkConfiguration, new DefaultNetworkConfiguration());\n ctx.set(HybridInference, new NoopHybridInference());\n return ctx;\n}\n\n/**\n * @returns a context suitable for `lib` tests.\n */\nexport function createLibTestingContext() {\n const ctx = _createBaselineContext(new DefaultsOnlyConfigProvider());\n ctx.set(EditorAndPluginInfo, new LibTestsEditorInfo());\n ctx.set(LocationFactory, new TestLocationFactory());\n ctx.set(TextDocumentManager, new TestTextDocumentManager());\n ctx.set(FileSystem, new LocalFileSystem());\n return ctx;\n}\n\nclass NoAdditionalExperimentFilters extends EditorExperimentFilters {\n addEditorSpecificFilters(): Partial> {\n return {};\n }\n}\n\nclass LibTestsEditorInfo extends EditorAndPluginInfo {\n getEditorInfo(): NameAndVersion {\n return {name: 'lib-tests-editor', version: '1'};\n }\n getEditorPluginInfo(): NameAndVersion {\n return {name: 'lib-tests-plugin', version: '2'};\n }\n}\n\nclass LocalFileSystem extends FileSystem {\n readFile(uri: string): Promise {\n return fsp.readFile(uri);\n }\n\n async mtime(uri: string): Promise {\n const stat = await fsp.stat(uri);\n return stat.mtimeMs;\n }\n\n async stat(uri: string): Promise {\n const stat = await fsp.stat(uri);\n return {\n ctime: stat.ctimeMs,\n mtime: stat.mtimeMs,\n size: stat.size,\n };\n }\n}\n","import * as fs from 'fs';\nimport {\n CheckCopilotToken,\n CopilotTokenManager,\n CopilotTokenManagerFromGitHubToken,\n FixedCopilotTokenManager,\n} from '../auth/copilotToken';\n\nconst tokenFileName = `${process.env.HOME}/.copilot-testing-gh-token`;\n\nlet tokenManager: CopilotTokenManager & CheckCopilotToken;\n\nexport function getTestingCopilotTokenManager(): CopilotTokenManager & CheckCopilotToken {\n if (!tokenManager) {\n tokenManager = createTokenManager();\n }\n return tokenManager;\n}\n\nconst createTokenManager = () => {\n const tokenStr = readTestingGitHubToken();\n if (tokenStr) {\n return new CopilotTokenManagerFromGitHubToken({token: tokenStr});\n }\n if (process.env.GH_COPILOT_TOKEN) {\n return new FixedCopilotTokenManager(process.env.GH_COPILOT_TOKEN);\n }\n if (process.env.GITHUB_TOKEN) {\n return new CopilotTokenManagerFromGitHubToken({token: process.env.GITHUB_TOKEN});\n }\n throw new Error(\n `Tests: either GH_COPILOT_TOKEN, or GITHUB_TOKEN, must be set, or there must be a GitHub token from an app with access to Copilot in ${tokenFileName}. Run \"npm run get_token\" to get one.`\n );\n};\n\n// This path is also used in script/getToken.ts\nexport function readTestingGitHubToken(): string | undefined {\n if (fs.existsSync(tokenFileName)) {\n const token = fs.readFileSync(tokenFileName);\n return token.toString();\n }\n}\n","import {Readable} from 'stream';\nimport {Fetcher, IAbortController, IHeaders, ProxySetting, Response} from '../../../lib/src/networking';\nimport {RootCertificateReader} from '../network/certificateReaders';\n\nclass TestCertificateReader extends RootCertificateReader {\n constructor(private readonly certificates: string[]) {\n super();\n }\n override async getAllRootCAs(): Promise {\n return this.certificates;\n }\n}\n\nexport const createTestCertificateReader = (certificates: string[]): RootCertificateReader => {\n return new TestCertificateReader(certificates);\n};\n\nexport function createFakeResponse(statusCode: number, response: any = 'body') {\n return new Response(\n statusCode,\n 'status text',\n new FakeHeaders(),\n () => Promise.resolve('response-text'),\n () => Promise.resolve(response),\n async () => null\n );\n}\n\nexport function createFakeStreamResponse(body: string): Response {\n return new Response(\n 200,\n 'Success',\n new FakeHeaders(),\n async () => body,\n async () => null,\n async () => toStream(body)\n );\n}\n\nexport abstract class FakeFetcher extends Fetcher {\n disconnectAll(): Promise {\n throw new Error('Method not implemented.');\n }\n makeAbortController(): IAbortController {\n throw new Error('Method not implemented.');\n }\n set proxySettings(value: ProxySetting | undefined) {\n throw new Error('Method not implemented.');\n }\n get proxySettings(): ProxySetting | undefined {\n throw new Error('Method not implemented.');\n }\n}\n\nfunction toStream(...strings: string[]): NodeJS.ReadableStream {\n const stream = new Readable();\n stream._read = () => {};\n for (const s of strings) {\n stream.push(s);\n }\n stream.push(null);\n return stream;\n}\n\nclass FakeHeaders implements IHeaders {\n private readonly headers: Map = new Map();\n\n append(name: string, value: string): void {\n this.headers.set(name, value);\n }\n delete(name: string): void {\n this.headers.delete(name);\n }\n get(name: string): string | null {\n return this.headers.get(name) ?? null;\n }\n has(name: string): boolean {\n return this.headers.has(name);\n }\n set(name: string, value: string): void {\n this.headers.set(name, value);\n }\n entries(): Iterator<[string, string]> {\n return this.headers.entries();\n }\n keys(): Iterator {\n return this.headers.keys();\n }\n values(): Iterator {\n return this.headers.values();\n }\n [Symbol.iterator](): Iterator<[string, string]> {\n return this.headers.entries();\n }\n}\n","import {Context} from '../context';\n\ntype RuntimeFlag = 'debug' | 'verboseLogging' | 'testMode' | 'recordInput' | 'telemetryLogging';\n\nexport class RuntimeMode {\n constructor(readonly flags: Record) {}\n\n static fromEnvironment(isRunningInTest: boolean): RuntimeMode {\n return new RuntimeMode({\n debug: determineDebugFlag(process.argv, process.env),\n verboseLogging: determineVerboseLoggingEnabled(process.env),\n telemetryLogging: determineTelemetryLoggingEnabled(process.env),\n testMode: isRunningInTest,\n recordInput: determineRecordInput(process.argv, process.env),\n });\n }\n}\n\nexport function isRunningInTest(ctx: Context): boolean {\n return ctx.get(RuntimeMode).flags.testMode;\n}\n\nexport function shouldFailForDebugPurposes(ctx: Context): boolean {\n return isRunningInTest(ctx);\n}\n\nexport function isDebugEnabled(ctx: Context): boolean {\n return ctx.get(RuntimeMode).flags.debug;\n}\n\nexport function isVerboseLoggingEnabled(ctx: Context): boolean {\n return ctx.get(RuntimeMode).flags.verboseLogging;\n}\n\n//TODO: Remove/disable for the public agent release.\nfunction determineDebugFlag(argv: string[], env: NodeJS.ProcessEnv): boolean {\n return argv.includes('--debug') || determineEnvFlagEnabled(env, 'GITHUB_COPILOT_DEBUG');\n}\n\nfunction determineVerboseLoggingEnabled(env: NodeJS.ProcessEnv): boolean {\n return determineEnvFlagEnabled(env, 'COPILOT_AGENT_VERBOSE');\n}\n\nfunction determineTelemetryLoggingEnabled(env: NodeJS.ProcessEnv): boolean {\n return determineEnvFlagEnabled(env, 'COPILOT_LOG_TELEMETRY');\n}\n\nfunction determineRecordInput(argv: string[], env: NodeJS.ProcessEnv): boolean {\n return argv.includes('--record') || determineEnvFlagEnabled(env, 'GITHUB_COPILOT_RECORD');\n}\n\nfunction determineEnvFlagEnabled(env: NodeJS.ProcessEnv, key: string): boolean {\n if (key in env) {\n const val = env[key];\n return val === '1' || val?.toLowerCase() === 'true';\n }\n return false;\n}\n","import * as assert from 'assert';\nimport {Context} from '../context';\nimport {Fetcher} from '../networking';\nimport {CopilotTelemetryReporter, TelemetryEndpointUrl, TelemetryReporters} from '../telemetry';\nimport {APP_INSIGHTS_KEY, APP_INSIGHTS_KEY_SECURE, setupTelemetryReporters} from '../telemetry/azureInsights';\nimport {startFakeTelemetryServerIfNecessary} from './telemetryFake';\nimport {TelemetrySpy} from './telemetrySpy';\n\nexport type EventData = {\n baseType: 'EventData';\n baseData: {\n ver: number;\n name: string;\n properties: {\n copilot_build: string;\n common_os: string;\n [key: string]: string;\n };\n measurements: {\n timeSinceIssuedMs: number;\n [key: string]: number;\n };\n };\n};\n\nexport type ExceptionData = {\n baseType: 'ExceptionData';\n baseData: {\n ver: number;\n exceptions: [\n {\n hasFullStack: boolean;\n parsedStack: [\n {\n sizeInBytes: number;\n level: number;\n method: string;\n assembly: string;\n fileName: string;\n line: number;\n }?\n ];\n message: string;\n typeName: string;\n }\n ];\n properties: {\n copilot_build: string;\n common_os: string;\n [key: string]: string;\n };\n measurements: {\n timeSinceIssuedMs: number;\n [key: string]: number;\n };\n severityLevel: number;\n };\n};\n\nexport type CapturedTelemetry = {\n ver: number;\n sampleRate: number;\n tags: {[key: string]: string};\n data: Event;\n iKey: string;\n name: string;\n time: string;\n};\n\n// Allows to wait for promises to be done for testing\nexport class PromiseQueue {\n async register(promise: Promise): Promise {\n // no-op by default, telemetry can happen async in production\n return promise;\n }\n}\n\nexport class TestPromiseQueue extends PromiseQueue {\n private promises: Promise[] = [];\n override async register(promise: Promise) {\n this.promises.push(promise);\n return promise;\n }\n async awaitPromises() {\n await Promise.all(this.promises);\n }\n}\n\nexport async function collectCapturedTelemetry(ctx: Context): Promise[]> {\n const url = ctx.get(TelemetryEndpointUrl).getUrl();\n const response = await ctx.get(Fetcher).fetch(url, {});\n const messages = ((await response.json()).messages as CapturedTelemetry[]) ?? [];\n\n for (const message of messages) {\n assert.strictEqual(message.tags['ai.cloud.roleInstance'], 'REDACTED');\n }\n return messages;\n}\n\nexport function isStandardTelemetryMessage(message: CapturedTelemetry): boolean {\n return message.iKey === APP_INSIGHTS_KEY;\n}\n\nexport function isRestrictedTelemetryMessage(message: CapturedTelemetry): boolean {\n return message.iKey === APP_INSIGHTS_KEY_SECURE;\n}\n\nexport function isEvent(message: CapturedTelemetry): message is CapturedTelemetry {\n return message.data.baseType === 'EventData';\n}\n\nexport function isException(message: CapturedTelemetry): message is CapturedTelemetry {\n return message.data.baseType === 'ExceptionData';\n}\n\nexport function allEvents(messages: CapturedTelemetry[]): messages is CapturedTelemetry[] {\n for (const message of messages) {\n if (!isEvent(message)) {\n return false;\n }\n }\n return true;\n}\n\nexport async function withInMemoryTelemetry(\n ctx: Context,\n work: (localCtx: Context) => Promise\n): Promise<{reporter: TelemetrySpy; restrictedReporter: TelemetrySpy; result: T}> {\n const reporter = new TelemetrySpy();\n const restrictedReporter = new TelemetrySpy();\n ctx.get(TelemetryReporters).setReporter(reporter);\n ctx.get(TelemetryReporters).setSecureReporter(restrictedReporter);\n const queue = new TestPromiseQueue();\n ctx.forceSet(PromiseQueue, queue);\n\n const result = await work(ctx);\n await queue.awaitPromises();\n\n return {reporter, restrictedReporter, result};\n}\n\nexport async function withTelemetryCapture(\n ctx: Context,\n work: (localCtx: Context) => Promise\n): Promise<[CapturedTelemetry[], T]> {\n return _withTelemetryCapture(new Context(ctx), true, work);\n}\n\nexport async function withOptionalTelemetryCapture(\n ctx: Context,\n work: (localCtx: Context) => Promise\n): Promise<[CapturedTelemetry[], T]> {\n return _withTelemetryCapture(new Context(ctx), false, work);\n}\n\n/**\n * Mutates the context in place to track telemetry.\n */\nexport async function withInlineTelemetryCapture(\n ctx: Context,\n work: () => Promise\n): Promise<[CapturedTelemetry[], T]> {\n return _withTelemetryCapture(ctx, true, work);\n}\n\nasync function _withTelemetryCapture(\n ctx: Context,\n forceTelemetry: boolean,\n work: (localCtx: Context) => Promise\n): Promise<[CapturedTelemetry[], T]> {\n const port = await startFakeTelemetryServerIfNecessary();\n\n const extensionId = 'copilot-test';\n // Using a random endpoint URL avoids collisions with other tests.\n // At present the tests run serially and _should_ flush the captured messages after each call,\n // so this shouldn't be strictly necessary, but it makes things more robust.\n const endpoint = Math.floor(Math.random() * 100000).toString();\n // ensure we don't have a proxy setup in place from other tests\n delete process.env.http_proxy;\n delete process.env.https_proxy;\n\n const oldUrl = ctx.get(TelemetryEndpointUrl).getUrl();\n ctx.get(TelemetryEndpointUrl).setUrlForTesting(`http://localhost:${port}/${endpoint}`);\n setupTelemetryReporters(ctx, extensionId, forceTelemetry);\n\n try {\n const queue = new TestPromiseQueue();\n ctx.forceSet(PromiseQueue, queue);\n const result = await work(ctx);\n await queue.awaitPromises();\n await ctx.get(TelemetryReporters).deactivate();\n const messages = await collectMessagesWithRetry(ctx);\n return [messages, result];\n } finally {\n ctx.get(TelemetryEndpointUrl).setUrlForTesting(oldUrl);\n }\n}\n\nasync function collectMessagesWithRetry(ctx: Context) {\n for (let waitTimeMultiplier = 0; waitTimeMultiplier < 3; waitTimeMultiplier++) {\n // race condition between test and telemetry server, wait a bit and try again\n await new Promise(resolve => setTimeout(resolve, waitTimeMultiplier * 1000));\n const messages = await collectCapturedTelemetry(ctx);\n if (messages.length > 0) {\n return messages;\n }\n console.warn('Retrying to collect telemetry messages #' + (waitTimeMultiplier + 1));\n }\n return [];\n}\n\nexport function assertHasProperty(\n messages: CapturedTelemetry[],\n assertion: (m: {[key: string]: string}) => boolean\n) {\n assert.ok(\n messages\n .filter(message => message.data.baseData.name.split('/')[1] !== 'ghostText.produced')\n .every(message => {\n const props = message.data.baseData.properties;\n return assertion.call(props, props);\n })\n );\n}\n\nexport class FailingTelemetryReporter implements CopilotTelemetryReporter {\n sendTelemetryEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void {\n throw new Error('Telemetry disabled');\n }\n sendTelemetryErrorEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n },\n errorProps?: string[]\n ): void {\n throw new Error('Telemetry disabled');\n }\n sendTelemetryException(\n error: Error,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void {\n throw new Error('Telemetry disabled');\n }\n dispose(): Promise {\n return Promise.resolve();\n }\n public hackOptOutListener(): void {}\n}\n","import getPort from 'get-port';\nimport {resolve} from 'path';\nimport {Worker} from 'worker_threads';\n\nlet fakeTelemetryServer = undefined as undefined | Worker;\nlet fakeTelemetryServerPort = undefined as undefined | number;\n\nexport async function startFakeTelemetryServerIfNecessary(): Promise {\n if (fakeTelemetryServer === undefined) {\n return new Promise(async r => {\n const newPort = await findFreePort();\n fakeTelemetryServer = new Worker(resolve(__dirname, '..', 'dist', 'telemetryFakeWorker.js'), {\n workerData: {port: newPort},\n });\n fakeTelemetryServer.on('message', () => {\n r(newPort);\n });\n fakeTelemetryServerPort = newPort;\n });\n }\n return fakeTelemetryServerPort!;\n}\n\nasync function findFreePort() {\n return await getPort({port: 5789});\n}\n","import {CopilotTelemetryReporter} from '../telemetry';\n\ntype ReportedEvent = {name: string; properties?: {[key: string]: string}; measurements?: {[key: string]: number}};\ntype ReportedError = {\n name: string;\n properties?: {[key: string]: string};\n measurements?: {[key: string]: number};\n errorProps?: string[];\n};\ntype ReportedException = {error: Error; properties?: {[key: string]: string}; measurements?: {[key: string]: number}};\n\nexport class TelemetrySpy implements CopilotTelemetryReporter {\n public readonly events: ReportedEvent[] = [];\n public readonly errors: ReportedError[] = [];\n public readonly exceptions: ReportedException[] = [];\n\n sendTelemetryEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void {\n this.events.push({\n name: eventName,\n properties,\n measurements,\n });\n }\n\n sendTelemetryErrorEvent(\n eventName: string,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n },\n errorProps?: string[]\n ): void {\n this.errors.push({\n name: eventName,\n properties,\n measurements,\n errorProps,\n });\n }\n\n sendTelemetryException(\n error: Error,\n properties?: {\n [key: string]: string;\n },\n measurements?: {\n [key: string]: number;\n }\n ): void {\n this.exceptions.push({\n error,\n properties,\n measurements,\n });\n }\n\n dispose(): Promise {\n return Promise.resolve();\n }\n\n eventsMatching(filter: (event: ReportedEvent) => boolean): ReportedEvent[] {\n return this.events.filter(filter);\n }\n}\n","import {ActionItem, NotificationSender} from '../notificationSender';\nimport {IPosition, IRange} from '../textDocument';\nimport {UrlOpener} from '../util/opener';\n\nexport function positionToString(p: IPosition) {\n return `${p.line}:${p.character}`;\n}\n\nexport function rangeToString(r: IRange) {\n return `[${positionToString(r.start)}--${positionToString(r.end)}]`;\n}\n\nexport class TestUrlOpener extends UrlOpener {\n public readonly openedUrls: string[] = [];\n\n open(target: string): void {\n this.openedUrls.push(target);\n }\n}\n\nexport class TestNotificationSender extends NotificationSender {\n public readonly sentMessages: string[] = [];\n private warningPromises: Promise[] = [];\n\n constructor() {\n super();\n }\n\n showWarningMessage(message: string, ...actions: ActionItem[]): Promise {\n this.sentMessages.push(message);\n const warningPromise = actions ? Promise.resolve(actions[0]) : Promise.resolve(undefined);\n this.warningPromises.push(warningPromise);\n return warningPromise;\n }\n\n public async waitForWarningMessages() {\n await Promise.all(this.warningPromises);\n }\n}\n","import assert = require('assert');\nimport {URI} from 'vscode-uri';\nimport {Language, LanguageDetection} from '../language/languageDetection';\nimport {ITextDocument} from '../textDocument';\n\nexport class TestLanguageDetection extends LanguageDetection {\n private readonly documents = new Map();\n\n public async detectLanguage(doc: ITextDocument): Promise {\n const docUri = doc.uri.toString();\n let language = this.documents.get(docUri);\n if (!language) {\n language = new Language(doc.languageId, true, '.ext');\n this.documents.set(docUri, language);\n }\n return language;\n }\n\n public assertLanguageHasBeenDetected(uri: URI, expectedLanguageId: string) {\n const language = this.documents.get(uri.toString());\n assert.ok(language, `No language detected for ${uri}`);\n assert.deepStrictEqual(\n language.languageId,\n expectedLanguageId,\n `Expected language ${expectedLanguageId} but got ${language.languageId}`\n );\n }\n}\n\nexport class FixedLanguageDetection extends LanguageDetection {\n constructor(private readonly language: string) {\n super();\n }\n\n public async detectLanguage(doc: ITextDocument): Promise {\n return new Language(this.language, true, '.ext');\n }\n}\n","import {CopilotToken, TokenEnvelope} from '../auth/copilotToken';\nimport {CopilotTokenNotifier} from '../auth/copilotTokenNotifier';\nimport {Context} from '../context';\n\nexport enum ProductFeature {\n selfSignedCerts = 'ssc',\n}\n\nconst testEnvelope = {} as TokenEnvelope;\n\nexport class TestProductFeatures {\n token: CopilotToken = new CopilotToken('token');\n constructor(private readonly ctx: Context) {\n ctx.get(CopilotTokenNotifier).on('onCopilotToken', copilotToken => {\n this.token = copilotToken;\n });\n }\n\n public enable(feature: ProductFeature): this {\n if (this.token.getTokenValue(feature) !== '1') {\n const newToken = `${this.token.token};${feature}=1`;\n const notifier = this.ctx.get(CopilotTokenNotifier);\n notifier.emit('onCopilotToken', new CopilotToken(newToken, this.token.organization_list), testEnvelope);\n }\n return this;\n }\n\n public disable(feature: ProductFeature): this {\n if (this.token.getTokenValue(feature) === '1') {\n const newToken = this.token.token.replace(';' + feature + '=1', '').replace(feature + '=1', '');\n const notifier = this.ctx.get(CopilotTokenNotifier);\n notifier.emit('onCopilotToken', new CopilotToken(newToken, this.token.organization_list), testEnvelope);\n }\n return this;\n }\n}\n","import {TextDocument, TextDocumentContentChangeEvent} from 'vscode-languageserver-textdocument';\nimport {URI} from 'vscode-uri';\nimport {Event} from '../common/event';\nimport {\n ILine,\n INotebookCell,\n INotebookDocument,\n IPosition,\n IRange,\n ITextDocument,\n LocationFactory,\n} from '../textDocument';\nimport {\n CursorChangeEvent,\n TextDocumentChangeEvent,\n TextDocumentFocusedEvent,\n TextDocumentManager,\n} from '../textDocumentManager';\n\nexport class InMemoryTextDocument implements ITextDocument {\n private _textDocument: TextDocument;\n private _uri: URI;\n private _relativePath: string | undefined;\n\n constructor(uri: URI, languageId: string, version: number, text: string, relativePath?: string) {\n this._uri = uri;\n this._textDocument = TextDocument.create(uri.toString(), languageId, version, text);\n this._relativePath = relativePath;\n }\n\n public get uri(): URI {\n return this._uri;\n }\n\n public get relativePath(): string | undefined {\n return this._relativePath;\n }\n\n public get fileName(): string {\n return this._uri.fsPath;\n }\n\n public get languageId(): string {\n return this._textDocument.languageId;\n }\n\n public get version(): number {\n return this._textDocument.version;\n }\n\n public get lineCount() {\n return this._textDocument.lineCount;\n }\n\n getText(range?: IRange): string {\n return this._textDocument.getText(range);\n }\n\n positionAt(offset: number): IPosition {\n return this._textDocument.positionAt(offset);\n }\n\n offsetAt(position: IPosition): number {\n return this._textDocument.offsetAt(position);\n }\n\n lineAt(position: number | IPosition): ILine {\n const lineNumber = typeof position === 'number' ? position : position.line;\n const lines = this.getText().split('\\n');\n const text = lines[lineNumber];\n const range: IRange = {\n start: {line: lineNumber, character: 0},\n end: {line: lineNumber, character: text.length},\n };\n\n const isEmptyOrWhitespace = text.trim().length === 0;\n return {text, range, isEmptyOrWhitespace};\n }\n\n getWordRangeAtPosition(position: IPosition): IRange | undefined {\n //TODO: Try to come up with some nice implementation here.\n return undefined;\n }\n\n update(changes: TextDocumentContentChangeEvent[], version: number) {\n TextDocument.update(this._textDocument, changes, version);\n }\n}\n\nexport class InMemoryNotebookDocument implements INotebookDocument {\n constructor(private readonly _cells: INotebookCell[]) {}\n getCells(): INotebookCell[] {\n return this._cells;\n }\n}\n\nexport class TestTextDocumentManager extends TextDocumentManager {\n private _openTextDocuments: ITextDocument[] = [];\n private _closedTextDocuments: ITextDocument[] = [];\n private _notebookDocuments: Map = new Map();\n\n get textDocuments(): readonly ITextDocument[] {\n return this._openTextDocuments;\n }\n\n onDidFocusTextDocument: Event = () => {\n return {dispose: () => {}};\n };\n\n onDidChangeTextDocument: Event = () => {\n return {dispose: () => {}};\n };\n\n onDidChangeCursor: Event = () => {\n return {dispose: () => {}};\n };\n\n async getTextDocument(uri: URI): Promise {\n return (\n this.textDocuments.find(t => t.uri.toString() == uri.toString()) ??\n this._closedTextDocuments.find(t => t.uri.toString() == uri.toString())\n );\n }\n\n async getRelativePath(doc: ITextDocument): Promise {\n return undefined;\n }\n\n setTextDocument(uri: URI, languageId: string, text: string) {\n this._openTextDocuments.push(new InMemoryTextDocument(uri, languageId, 0, text));\n }\n\n setClosedTextDocument(uri: URI, languageId: string, text: string) {\n this._closedTextDocuments.push(new InMemoryTextDocument(uri, languageId, 0, text));\n }\n\n setNotebookDocument(doc: ITextDocument, notebook: INotebookDocument) {\n this._notebookDocuments.set(doc.fileName, notebook);\n }\n\n findNotebook(doc: ITextDocument): INotebookDocument | undefined {\n return this._notebookDocuments.get(doc.fileName);\n }\n\n getWorkspaceFolders(): URI[] {\n return [];\n }\n}\n\nexport class TestLocationFactory extends LocationFactory {\n position(line: number, character: number): IPosition {\n return {line, character};\n }\n range(start: IPosition, end: IPosition): IRange;\n range(startLine: number, startCharacter: number, endLine: number, endCharacter: number): IRange;\n range(startLine: any, startCharacter: any, endLine?: any, endCharacter?: any): IRange {\n if (typeof startLine === 'number') {\n return {\n start: {line: startLine, character: startCharacter},\n end: {line: endLine, character: endCharacter},\n };\n } else {\n return {\n start: startLine,\n end: startCharacter,\n };\n }\n }\n}\n","import {URI} from 'vscode-uri';\n\nexport interface IPosition {\n /**\n * Line position in a document (zero-based).\n */\n line: number;\n /**\n * Character offset on a line in a document (zero-based). Assuming that the line is\n * represented as a string, the `character` value represents the gap between the\n * `character` and `character + 1`.\n */\n character: number;\n}\n\nexport interface IRange {\n /**\n * The range's start position\n */\n start: IPosition;\n /**\n * The range's end position.\n */\n end: IPosition;\n}\n\nexport interface ISelection {\n /**\n * The position at which the selection starts.\n */\n anchor: IPosition;\n /**\n * The position of the cursor.\n */\n active: IPosition;\n}\n\nexport abstract class LocationFactory {\n abstract position(line: number, character: number): IPosition;\n abstract range(start: IPosition, end: IPosition): IRange;\n abstract range(startLine: number, startCharacter: number, endLine: number, endCharacter: number): IRange;\n}\n\nexport interface ILine {\n /**\n * The line's text content. Doesn't include the trailing newline\n */\n text: string;\n range: IRange;\n isEmptyOrWhitespace: boolean;\n}\n\nexport interface ITextDocument {\n /**\n * The associated URI for this document. Most documents have the __file__-scheme, indicating that they\n * represent files on disk. However, some documents may have other schemes indicating that they are not\n * available on disk.\n *\n * @readonly\n */\n readonly uri: URI;\n\n /**\n * The identifier of the language associated with this document.\n *\n * @readonly\n */\n readonly languageId: string;\n\n /**\n * The version number of this document (it will increase after each\n * change, including undo/redo).\n *\n * @readonly\n */\n readonly version: number;\n\n /**\n * The file system path of the associated resource. Shorthand\n * notation for `TextDocument.uri.fsPath`. Independent of the uri scheme.\n */\n readonly fileName: string;\n\n /**\n * Get the text of this document. A substring can be retrieved by\n * providing a range.\n *\n * @param range (optional) An range within the document to return.\n * If no range is passed, the full content is returned.\n * Invalid range positions are adjusted as described in `Position.line` and `Position.character`.\n * If the start range position is greater than the end range position,\n * then the effect of getText is as if the two positions were swapped.\n\n * @return The text of this document or a substring of the text if a\n * range is provided.\n */\n getText(range?: IRange): string;\n\n /**\n * Converts a zero-based offset to a position.\n *\n * @param offset A zero-based offset.\n * @return A valid `position`.\n */\n positionAt(offset: number): IPosition;\n\n /**\n * Converts the position to a zero-based offset.\n * Invalid positions are adjusted as described in `Position.line` and `Position.character`.\n *\n * @param position A position.\n * @return A valid zero-based offset.\n */\n offsetAt(position: IPosition): number;\n\n /**\n * The number of lines in this document.\n *\n * @readonly\n */\n readonly lineCount: number;\n\n /**\n * Returns a text line denoted by the line number.\n */\n lineAt(position: number | IPosition): ILine;\n\n getWordRangeAtPosition(position: IPosition): IRange | undefined;\n}\n\nexport interface INotebookCell {\n /**\n * The index of this cell in its `NotebookDocument.cellAt` containing notebook. The\n * index is updated when a cell is moved within its notebook. The index is `-1`\n * when the cell has been removed from its notebook.\n */\n readonly index: number;\n\n /**\n * The text of this cell, represented as `ITextDocument`.\n */\n readonly document: ITextDocument;\n\n /**\n * The metadata of this cell. Can be anything but must be JSON-stringifyable.\n */\n readonly metadata: {[key: string]: any};\n\n /**\n * The kind of this cell.\n * 1 = Markup\n * 2 = Code\n */\n readonly kind: 1 | 2;\n}\n\nexport interface INotebookDocument {\n /**\n * Get the cells of this notebook.\n *\n * @returns The cells contained by the range or all cells.\n */\n getCells(): INotebookCell[];\n}\n","import path = require('path');\nimport {URI} from 'vscode-uri';\nimport {Event} from './common/event';\nimport {INotebookDocument, IRange, ISelection, ITextDocument} from './textDocument';\n\n/**\n * An event describing an individual change in the text of a `ITextDocument`.\n */\nexport interface TextDocumentContentChangeEvent {\n /**\n * The range that got replaced.\n */\n readonly range: IRange;\n /**\n * The offset of the range that got replaced.\n */\n readonly rangeOffset: number;\n /**\n * The length of the range that got replaced.\n */\n readonly rangeLength: number;\n /**\n * The new text for the range.\n */\n readonly text: string;\n}\n\n/**\n * An event describing a transactional `ITextDocument` change.\n */\nexport interface TextDocumentChangeEvent {\n /**\n * The affected document.\n */\n readonly document: ITextDocument;\n\n /**\n * An array of content changes.\n */\n readonly contentChanges: readonly TextDocumentContentChangeEvent[];\n}\n\nexport interface TextDocumentFocusedEvent {\n readonly document: {readonly uri: URI};\n}\n\nexport interface CursorChangeEvent {\n /**\n * The {@link TextEditor text editor} for which the selections have changed.\n */\n readonly textEditor: {readonly document: ITextDocument};\n /**\n * The new value for the {@link TextEditor.selections text editor's selections}.\n */\n readonly selections: readonly ISelection[];\n}\n\n/**\n * Get the path of the given document relative to one of the workspace folders,\n * or undefined if it is not under any of the workspace folders.\n */\nexport function getRelativePath(workspaceFolders: URI[], docPath: string): string | undefined {\n for (const uri of workspaceFolders) {\n const folderPath = uri.fsPath;\n if (docPath.startsWith(folderPath + path.sep)) {\n return path.relative(folderPath, docPath);\n }\n }\n return undefined;\n}\n\nexport abstract class TextDocumentManager {\n abstract onDidChangeTextDocument: Event;\n abstract onDidFocusTextDocument: Event;\n abstract onDidChangeCursor: Event;\n abstract getTextDocument(uri: URI): Promise;\n abstract textDocuments: readonly ITextDocument[];\n /**\n * Get the path of the given document relative to one of the workspace folders,\n * or its basename if it is not under any of the workspace folders.\n * Returns `undefined` if the file is untitled.\n */\n abstract getRelativePath(doc: ITextDocument): Promise;\n\n /**\n * If `TextDocument` represents notebook returns `INotebookDocument` instance, otherwise returns `undefined`\n */\n abstract findNotebook(doc: ITextDocument): INotebookDocument | undefined;\n\n abstract getWorkspaceFolders(): URI[];\n\n async getWorkspaceFolder(doc: ITextDocument): Promise {\n return this.getWorkspaceFolders().find(folder => {\n if (doc.fileName.startsWith(folder.fsPath)) {\n return folder;\n }\n });\n }\n}\n","import open = require('open');\n\n/**\n * Encapsulates all the functionality related opening urls in a browser.\n */\nexport abstract class UrlOpener {\n abstract open(target: string): void;\n}\n\nexport class RealUrlOpener extends UrlOpener {\n async open(target: string): Promise {\n await open(target);\n }\n}\n","import {homedir} from 'os';\n\n/**\n * Redacts all things that look like a file path from a given input string.\n */\nexport function redactPaths(input: string): string {\n return input\n .replace(/([\\s|(]|file:\\/\\/)(\\/[^\\s]+)/g, '$1[redacted]') // unix path\n .replace(/([\\s|(]|file:\\/\\/)([a-zA-Z]:[(\\\\|/){1,2}][^\\s]+)/gi, '$1[redacted]') // windows path\n .replace(/([\\s|(]|file:\\/\\/)(\\\\[^\\s]+)/gi, '$1[redacted]'); // unc path\n}\n\nfunction escapeForRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nconst homedirRegExp = new RegExp(\n '(?<=^|[\\\\s|(\"\\'`]|file://)' + // zero-width lookbehind\n escapeForRegExp(homedir()) +\n '(?=$|[\\\\\\\\/:\"\\'`])', // zero-width lookahead\n 'g'\n);\n\nexport function redactHomeDir(input: string): string {\n return input.replace(homedirRegExp, '~');\n}\n","type ShortCircuitableFunction = (this: T, ...args: A) => Promise;\n\n// TODO: need to log whenever we hit this short circuit\nexport function shortCircuit(\n fn: ShortCircuitableFunction,\n shortCircuitMs: number,\n shortCircuitReturn: R\n): ShortCircuitableFunction {\n return async function (this: T, ...args: A) {\n return await Promise.race([\n fn.apply(this, args),\n new Promise(resolve => {\n setTimeout(resolve, shortCircuitMs, shortCircuitReturn);\n }),\n ]);\n };\n}\n","import {URI} from 'vscode-uri';\nexport abstract class WorkspaceFileSystem {\n abstract findFiles(include: string, exclude?: string, maxResults?: number): Promise;\n abstract getWorkspaceFolder(uri: URI): Promise;\n}\n","/**\n * @fileoverview\n * This is the main class for using Elidable Texts,\n * a way to represent a larger, possibly multimodal document\n * to be used as prompt to an LLM.\n *\n * That document will need to be shortened to fit into a token budget.\n * Elidable Texts shorten it by dropping the least relevant lines,\n * and replacing them by ellipses (`[...]`).\n *\n * A typical way of using this class is to\n * - create an ElidableText from a some inputs,\n * - then call `makePrompt` to get a prompt that fits into a token budget.\n *\n * Like this:\n * ```\n * const question = new ElidableText(\n * [`Could you look over Albert's PR and check whether we need to add tests for that one file?`, 0.5],\n * [`They made the following changes to file ${this.filename} (in git diff format):`, 0.9],\n * [this.diff, 0.7], // this.diff is an already constructed ElidableText\n * [`The file now looks like this:`, 0.95],\n * [documentWithLanguage, 0.8],\n * [`Should I write tests for that?`, 1],\n * );\n * const prompt = question.makePrompt(1000); // makes sure no more than 1000 tokens\n * ```\n */\n\nimport {DocumentInfo} from '../prompt';\nimport {getTokenizer} from '../tokenization';\nimport {elidableTextForSourceCode} from './fromSourceCode';\nimport {LineWithValueAndCost} from './lineWithValueAndCost';\n\ntype InterpretableAsElidableText = string | ElidableText | DocumentInfo;\n\nexport class ElidableText {\n lines: LineWithValueAndCost[] = [];\n\n /**\n * Create a text from a list of chunks, which can be strings or ElidableTexts.\n * Supplying a number to the chunk corresponds to a priority.\n * If the chunk is already elidable, the priorities are multiplied.\n *\n * If x is an ElidableText, then ElidableText(x) is the same as x.\n * @param chunks\n */\n constructor(...chunks: (InterpretableAsElidableText | [InterpretableAsElidableText, number])[]) {\n const lines: LineWithValueAndCost[] = [];\n for (const chunk of chunks) {\n // if array, take the second element as priority\n const value = Array.isArray(chunk) ? chunk[1] : 1;\n const input = Array.isArray(chunk) ? chunk[0] : chunk;\n if (typeof input === 'string') {\n input.split('\\n').forEach(line => lines.push(new LineWithValueAndCost(line, value)));\n } else if (input instanceof ElidableText) {\n lines.push(...input.lines.map(line => line.copy().adjustValue(value)));\n } else if ('source' in input && 'languageId' in input) {\n lines.push(...elidableTextForSourceCode(input).lines.map(line => line.copy().adjustValue(value)));\n }\n }\n this.lines = lines;\n }\n\n adjust(multiplier: number): void {\n this.lines.forEach(line => line.adjustValue(multiplier));\n }\n\n /** Change the cost of lines according to a specified function; e.g. to take into account different tokenziers */\n recost(coster = (x: string) => getTokenizer().tokenLength(x + '\\n')): void {\n this.lines.forEach(line => line.recost(coster));\n }\n\n /**\n * Elides lines to make the prompt fit into a token budget.\n * This is done by dropping the least desirable lines.\n * @param maxTokens The maximum number of tokens to allow.\n * @param ellipsis The string to use for ellipses.\n * @param indentEllipses If true, indents ellipses with the minimum indentation of the elided lines.\n * - only guarantees ellipses' indentation if there are sufficient tokens for it.\n * - does not currently work well for tab-indented lines (will insert spaces instead of tabs)\n * @param strategy \"removeLeastDesirable\" will greedily remove undesirable lines,\n * \"removeLeastBangForBuck\" will remove the line that has the lowest value/cost ratio.\n * The former is more likely to elide continguous blocks and thus often feels more natural.\n * The latter can be more frugal by being less tempted to elide things like single whitespace lines.\n * @param tokenizer The tokenizer to use for tokenizing the prompt.\n */\n makePrompt(\n maxTokens: number,\n ellipsis = '[...]',\n indentEllipses = true,\n strategy: 'removeLeastDesirable' | 'removeLeastBangForBuck' = 'removeLeastDesirable',\n tokenizer = getTokenizer()\n ): string {\n // the function is factored out so that we can be sure that this.lines is not mutated\n const lines = this.lines.map(line => line.copy());\n return makePrompt(lines, maxTokens, ellipsis, indentEllipses, strategy, tokenizer);\n }\n}\n\n/**\n * Worker function for {@link ElidableText.makePrompt}.\n * All params are the same except\n * @param lines The lines desired to be in the prompt -- will be mutated.\n */\nfunction makePrompt(\n lines: LineWithValueAndCost[],\n maxTokens: number,\n ellipsis: string,\n indentEllipses: boolean,\n strategy: 'removeLeastDesirable' | 'removeLeastBangForBuck',\n tokenizer: ReturnType\n) {\n if (tokenizer.tokenLength(ellipsis + '\\n') > maxTokens) {\n throw new Error('maxTokens must be larger than the ellipsis length');\n }\n if (strategy === 'removeLeastBangForBuck') {\n // adjust all line's values by dividing by their cost\n lines.forEach(line => line.adjustValue(1 / line.cost));\n }\n // infiniteWorth is 1 bigger than the most desirable line\n const infiniteWorth = lines.reduce((a, b) => Math.max(a, b.value), 0) + 1;\n // indentationInfinity is longer than the longest line.text\n const infiniteIndentation = lines.reduce((a, b) => Math.max(a, b.text.length), 0) + 1;\n // the test of equality to possibly indented ellipses is whether it's identical to the trimmed ellipsis\n const trimmedEllipsis = ellipsis.trim();\n\n let totalCost = lines.reduce((sum, line) => sum + line.cost, 0);\n let defensiveCounter = lines.length + 1;\n while (totalCost > maxTokens && defensiveCounter-- >= -1) {\n // find the least desirable line\n const leastDesirable = lines.reduce((least, line) => {\n if (line.value < least.value) {\n return line;\n } else {\n return least;\n }\n });\n // drop it, but replace with ellipsis if it's between two non-ellipsis lines\n const index = lines.indexOf(leastDesirable);\n // the right indentation is the indentation of the line (if not blank) or the most recent non-blank line\n const mostRecentNonBlankLine = lines\n .slice(0, index + 1)\n .reverse()\n .find(line => line.text.trim() !== '') ?? {text: ''};\n const indentation = indentEllipses\n ? Math.min(\n // the smallest one of: the index indentation, and the before and after indentation _should they be ellipses_\n // note that whitespace lines do not count\n mostRecentNonBlankLine.text.match(/^\\s*/)?.[0].length ?? 0,\n lines[index - 1]?.text.trim() === trimmedEllipsis\n ? lines[index - 1]?.text.match(/^\\s*/)?.[0].length ?? 0\n : infiniteIndentation,\n lines[index + 1]?.text.trim() === trimmedEllipsis\n ? lines[index + 1]?.text.match(/^\\s*/)?.[0].length ?? 0\n : infiniteIndentation\n )\n : 0;\n\n // Known limitation: indentation will be off for tab-indented lines\n const insert = ' '.repeat(indentation) + ellipsis;\n const newEllipis = new LineWithValueAndCost(\n insert,\n infiniteWorth,\n tokenizer.tokenLength(insert + '\\n'),\n // validate only loosely -- infiniteWorth may be > 1, and that's ok here\n 'loose'\n );\n\n // now replace this line by the new ellipsis\n lines.splice(index, 1, newEllipis);\n // then delete the lines before and after if they are ellipses\n if (lines[index + 1]?.text.trim() === trimmedEllipsis) {\n lines.splice(index + 1, 1);\n }\n if (lines[index - 1]?.text.trim() === trimmedEllipsis) {\n lines.splice(index - 1, 1);\n }\n\n const newTotalCost = lines.reduce((sum, line) => sum + line.cost, 0);\n // if we don't make progress _and_ it's all ellipses, we've reached the case where we need to forgo indentation\n if (newTotalCost >= totalCost && lines.every(line => line.value === infiniteWorth)) {\n indentEllipses = false;\n }\n totalCost = newTotalCost;\n }\n if (defensiveCounter < 0) {\n // this should not have happened, throw an error\n throw new Error(\n `Infinite loop in ElidableText.makePrompt: Defensive counter < 0 in ElidableText.makePrompt with end text:\\n ${lines\n .map(line => line.text)\n .join('\\n')}`\n );\n }\n return lines.map(line => line.text).join('\\n');\n}\n","import * as diff from 'diff';\nimport {flattenVirtual, mapLabels, parseTree, visitTree} from '../indentation';\nimport {DocumentInfo} from '../prompt';\nimport {ElidableText} from './elidableText';\nimport {fromTreeWithFocussedLines} from './fromIndentationTrees';\n\n/**\n * Returns two {@link ElidableText} objects, one for each of the two contents.\n * Lines that changed are focussed on.\n * @param oldContent\n * @param newContent\n * @returns\n */\nexport function elidableTextForDiff(\n oldContent: string | DocumentInfo,\n newContent: string | DocumentInfo\n): [ElidableText, ElidableText] {\n // languageId is: if one of the contents is a DocumentInfo, use its, otherwise only if both are equal\n const languageId =\n typeof oldContent === 'string'\n ? typeof newContent === 'string'\n ? undefined\n : newContent.languageId\n : typeof newContent === 'string'\n ? oldContent.languageId\n : oldContent.languageId === newContent.languageId\n ? oldContent.languageId\n : undefined;\n oldContent = typeof oldContent === 'string' ? oldContent : oldContent.source;\n newContent = typeof newContent === 'string' ? newContent : newContent.source;\n\n // collect lines that changed\n const patch = diff.structuredPatch('', '', oldContent, newContent);\n const changedLinesOld = new Set();\n const changedLinesNew = new Set();\n for (const hunk of patch.hunks) {\n for (let i = hunk.oldStart; i < hunk.oldStart + hunk.oldLines; i++) {\n changedLinesOld.add(i);\n }\n for (let i = hunk.newStart; i < hunk.newStart + hunk.newLines; i++) {\n changedLinesNew.add(i);\n }\n }\n\n // build indentation trees\n const oldTree = mapLabels(flattenVirtual(parseTree(oldContent, languageId)), () => false);\n const newTree = mapLabels(flattenVirtual(parseTree(newContent, languageId)), () => false);\n\n // mark changed lines\n visitTree(\n oldTree,\n node => {\n if (node.type === 'line' || node.type === 'blank') {\n if (changedLinesOld.has(node.lineNumber)) {\n node.label = true;\n }\n }\n },\n 'topDown'\n );\n visitTree(\n newTree,\n node => {\n if (node.type === 'line' || node.type === 'blank') {\n if (changedLinesNew.has(node.lineNumber)) {\n node.label = true;\n }\n }\n },\n 'topDown'\n );\n\n return [fromTreeWithFocussedLines(oldTree), fromTreeWithFocussedLines(newTree)];\n}\n","/**\n * @fileoverview Utility functions for creating elidable texts from indentation trees.\n */\n\nimport {IndentationTree, deparseLine, foldTree, isBlank, mapLabels, visitTree} from '../indentation';\nimport {ElidableText} from './elidableText';\n\n/** All these costs are multiplicative, i.e. should be between 0 and 1 */\nexport type TreeTraversalConfig = {worthUp: number; worthSibling: number; worthDown: number};\nexport const DEFAULT_TREE_TRAVERSAL_CONFIG: TreeTraversalConfig = {\n worthUp: 0.9,\n worthSibling: 0.88,\n worthDown: 0.8,\n};\n\n/**\n * Take some nodes of an indentation tree and make an elidable text from it,\n * valuing nodes closer to nodes labeled \"true\" more highly.\n * @param tree\n */\nexport function fromTreeWithFocussedLines(\n tree: IndentationTree,\n config: TreeTraversalConfig = DEFAULT_TREE_TRAVERSAL_CONFIG\n): ElidableText {\n // go through the tree and relabel the nodes with their distance from the nearest \"true\" node\n const treeWithDistances = mapLabels(tree, (x: boolean) => (x ? (1 as number) : undefined));\n // traverse the tree bottomUp to add config.costUp to the labels of the parents\n visitTree(\n treeWithDistances,\n node => {\n if (isBlank(node)) return;\n const maxChildLabel = Math.max(...node.subs.map(child => child.label ?? 0));\n node.label = Math.max(node.label ?? 0, maxChildLabel * config.worthUp);\n },\n 'bottomUp'\n );\n // traverse the tree topDown and for all children, add config.costDown and config.costSibling\n visitTree(\n treeWithDistances,\n node => {\n if (isBlank(node)) {\n return;\n }\n const values = node.subs.map(sub => sub.label ?? 0);\n let new_values = [...values];\n for (let i = 0; i < values.length; i++) {\n if (values[i] === 0) {\n continue;\n } else {\n new_values = new_values.map((v, j) =>\n Math.max(v, Math.pow(config.worthSibling, Math.abs(i - j)) * values[i])\n );\n }\n }\n // add config.costDown\n const nodeLabel = node.label;\n if (nodeLabel !== undefined) {\n new_values = new_values.map(v => Math.max(v, config.worthDown * nodeLabel));\n }\n node.subs.forEach((sub, i) => (sub.label = new_values[i]));\n },\n 'topDown'\n );\n return fromTreeWithValuedLines(treeWithDistances);\n}\n\nexport function fromTreeWithValuedLines(tree: IndentationTree): ElidableText {\n const valuedLines = foldTree(\n tree,\n [] as [string, number][],\n (node, acc) => {\n if (node.type === 'line' || node.type === 'blank') {\n acc.push(node.type === 'line' ? [deparseLine(node).trimEnd(), node.label ?? 0] : ['', node.label ?? 0]);\n }\n return acc;\n },\n 'topDown'\n );\n return new ElidableText(...valuedLines);\n}\n","import {flattenVirtual, isBlank, isLine, mapLabels, parseTree, visitTree} from '../indentation';\nimport {DocumentInfo} from '../prompt';\nimport {ElidableText} from './elidableText';\nimport {fromTreeWithFocussedLines} from './fromIndentationTrees';\n\n/**\n * Construct an {@link ElidableText} from a piece of source code, focussing on\n * the first line and last leaf that is not a closer.\n */\nexport function elidableTextForSourceCode(\n contents: string | DocumentInfo,\n focusOnLastLeaf = true,\n focusOnFirstLine = true\n): ElidableText {\n // if contents is a DocumentInfo, it has source and languageId, and we want to pass both to parseTree\n const tree = typeof contents === 'string' ? parseTree(contents) : parseTree(contents.source, contents.languageId);\n flattenVirtual(tree);\n // we may want to include the last leaf that is not a closer, seeing the end as informative e.g. for appending\n const treeWithFocussedLines = mapLabels(tree, label => focusOnLastLeaf && label !== 'closer');\n // if the label was closer, it's false now, but if there was no label, there still is no label\n // let's make it explicit that a node is true iff it's not a closer and we do want to focusOnLastLeaf\n visitTree(\n treeWithFocussedLines,\n node => {\n if (node.label === undefined) {\n node.label = focusOnLastLeaf && node.label !== false;\n }\n },\n 'topDown'\n );\n if (focusOnLastLeaf) {\n visitTree(\n treeWithFocussedLines,\n node => {\n if (node.label) {\n let foundLastTrue = false;\n for (const subnode of [...node.subs].reverse()) {\n if (subnode.label && !foundLastTrue) {\n foundLastTrue = true;\n } else {\n subnode.label = false;\n }\n }\n } else {\n // all subs get label false\n for (const subnode of node.subs) {\n subnode.label = false;\n }\n }\n // we want to find the last _leaf_, so if there are subs, this is not it\n if (node.subs.length > 0) {\n node.label = false;\n }\n },\n 'topDown'\n );\n }\n // we may want to focus on the first lines, seeing the beginning as informative e.g. for the setup\n if (focusOnFirstLine) {\n visitTree(\n treeWithFocussedLines,\n node => {\n node.label ||= (isLine(node) || isBlank(node)) && node.lineNumber == 0;\n },\n 'topDown'\n );\n }\n\n return fromTreeWithFocussedLines(treeWithFocussedLines);\n}\n","export * from './elidableText';\nexport * from './fromDiff';\nexport * from './fromIndentationTrees';\nexport * from './fromSourceCode';\nexport * from './lineWithValueAndCost';\n","import {getTokenizer} from '../tokenization';\n\n/**\n * A line of text together with:\n * * a value >= 0 representing how desirable it is (the higher the better)\n * * a cost >= 0 representing how costly it is to insert it, e.g. in tokens.\n * The text is expected to contain no \"\\n\" character.\n */\nexport class LineWithValueAndCost {\n /**\n * Create a line of text with a value and a cost.\n * @param text The line of text without the `\\n` character.\n * @param value The value, expressed from 0 (worthless) to 1 (essential). Values are expected to be combined multiplicatively.\n * @param cost How costly it is to insert this line, e.g. in tokens. Costs are expected to be combined additively.\n * @param validate Whether to validate the input. In some cases, it can make sense to extend the value to above 1 in very rare cases, but these must be deliberately allowed.\n */\n public constructor(\n public readonly text: string,\n private _value: number,\n private _cost = getTokenizer().tokenLength(text + '\\n'),\n validate: 'strict' | 'loose' | 'none' = 'strict'\n ) {\n // check that the text does not contain newlines\n if (text.includes('\\n') && validate !== 'none') {\n throw new Error('LineWithValueAndCost: text contains newline');\n }\n if (_value < 0 && validate !== 'none') {\n throw new Error('LineWithValueAndCost: value is negative');\n }\n if (_cost < 0 && validate !== 'none') {\n throw new Error('LineWithValueAndCost: cost is negative');\n }\n if (validate == 'strict' && _value > 1) {\n throw new Error(\n 'Value should normally be between 0 and 1 -- set validation to `loose` to ignore this error'\n );\n }\n }\n\n public get value() {\n return this._value;\n }\n public get cost() {\n return this._cost;\n }\n\n /** Multiply the value with a multiplier, typically between 0 and 1 */\n public adjustValue(multiplier: number): this {\n this._value *= multiplier;\n return this;\n }\n\n /** Change the cost of lines according to a specified function; e.g. to take into account different tokenizers */\n public recost(coster = (x: string) => getTokenizer().tokenLength(x + '\\n')): this {\n this._cost = coster(this.text);\n return this;\n }\n\n public copy(): LineWithValueAndCost {\n return new LineWithValueAndCost(this.text, this.value, this.cost, 'none');\n }\n}\n","import {promises as fsp} from 'fs';\n\n/**\n * The `FileStat`-type represents metadata about a file\n */\nexport interface FileStat {\n /**\n * The creation timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n */\n ctime: number;\n\n /**\n * The modification timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.\n *\n * *Note:* If the file changed, it is important to provide an updated `mtime` that advanced\n * from the previous value. Otherwise there may be optimizations in place that will not show\n * the updated file contents in an editor for example.\n */\n\n mtime: number;\n /**\n * The size in bytes.\n *\n * *Note:* If the file changed, it is important to provide an updated `size`. Otherwise there\n * may be optimizations in place that will not show the updated file contents in an editor for\n * example.\n */\n size: number;\n}\n\n/**\n * A basic file-system interface for reading files and checking their mtime.\n */\nexport abstract class FileSystem {\n /**\n * Read the entire contents of the given file.\n *\n * cf https://nodejs.org/api/fs.html#fs_fspromises_readfile_path_options\n */\n abstract readFile(uri: string): Promise;\n\n /**\n * Get the mtime in milliseconds of the given file.\n *\n * cf https://nodejs.org/api/fs.html#fs_stats_mtimems\n */\n abstract mtime(uri: string): Promise;\n\n abstract stat(uri: string): Promise;\n}\n\nexport const defaultFileSystem: FileSystem = {\n readFile(uri: string) {\n return fsp.readFile(uri);\n },\n\n async mtime(uri: string) {\n let stat = await fsp.stat(uri);\n return stat.mtimeMs;\n },\n\n async stat(uri: string): Promise {\n const stat = await fsp.stat(uri);\n return {\n ctime: stat.ctimeMs,\n mtime: stat.mtimeMs,\n size: stat.size,\n };\n },\n};\n","export type IndentationTree = TopNode | VirtualNode | LineNode | BlankNode;\nexport type IndentationSubTree = Exclude, TopNode>;\n\ninterface NodeBase {\n label?: L;\n subs: IndentationSubTree[];\n}\n\n/**\n * Virtual nodes represent groupings are not directly visible in indentation.\n **/\nexport interface VirtualNode extends NodeBase {\n type: 'virtual';\n indentation: number;\n}\n\nexport interface TopNode extends NodeBase {\n type: 'top';\n indentation: -1;\n}\n\n/**\n * A line of source code and its sub-nodes\n * */\nexport interface LineNode extends NodeBase {\n type: 'line';\n indentation: number;\n lineNumber: number;\n sourceLine: string;\n}\n\n/**\n * A blank line\n */\nexport interface BlankNode extends NodeBase {\n type: 'blank';\n lineNumber: number;\n subs: never[]; // Type trick to make it easier to code\n}\n\n/** Construct a virtual node */\nexport function virtualNode(indentation: number, subs: IndentationSubTree[], label?: L): VirtualNode {\n return {type: 'virtual', indentation, subs, label};\n}\n\n/** Construct a line node */\nexport function lineNode(\n indentation: number,\n lineNumber: number,\n sourceLine: string,\n subs: IndentationSubTree[],\n label?: L\n): LineNode {\n if (sourceLine === '') {\n throw new Error('Cannot create a line node with an empty source line');\n }\n return {type: 'line', indentation, lineNumber, sourceLine, subs, label};\n}\n\n/** Return a blank node */\nexport function blankNode(line: number): BlankNode {\n return {type: 'blank', lineNumber: line, subs: []};\n}\n\n/** Return a node representing the top node */\nexport function topNode(subs?: IndentationSubTree[]): TopNode {\n return {\n type: 'top',\n indentation: -1,\n subs: subs ?? [],\n };\n}\n\nexport function isBlank(tree: IndentationTree): tree is BlankNode {\n return tree.type === 'blank';\n}\n\nexport function isLine(tree: IndentationTree): tree is LineNode {\n return tree.type === 'line';\n}\n\nexport function isVirtual(tree: IndentationTree): tree is VirtualNode {\n return tree.type === 'virtual';\n}\n\nexport function isTop(tree: IndentationTree): tree is TopNode {\n return tree.type === 'top';\n}\n\n/**\n * Return the tree which consists of everything up to the line node with the\n * given number. All later siblings of that line node, recursively, are removed.\n *\n * This function does not assume the line numbers appear contiguously, but will\n * return anything before the numbered line, whether its line number is greater\n * or not.\n *\n * This is destructive and modifies the tree.\n */\nexport function cutTreeAfterLine(tree: IndentationTree, lineNumber: number) {\n function cut(tree: IndentationTree): boolean {\n if (!isVirtual(tree) && !isTop(tree) && tree.lineNumber === lineNumber) {\n tree.subs = [];\n return true;\n }\n for (let i = 0; i < tree.subs.length; i++) {\n if (cut(tree.subs[i])) {\n tree.subs = tree.subs.slice(0, i + 1);\n return true;\n }\n }\n return false;\n }\n cut(tree);\n}\n\n/**\n * A type expressing that JSON.parse(JSON.stringify(x)) === x.\n */\nexport type JsonStable = string | number | JsonStable[] | {[key: string]: JsonStable};\n\n/**\n * Return a deep duplicate of the tree -- this will only work if the labels can be stringified to parseable JSON.\n */\nexport function duplicateTree(tree: IndentationTree): IndentationTree {\n return JSON.parse(JSON.stringify(tree));\n}\n","import {IndentationTree, isBlank, isLine, isTop, isVirtual, JsonStable, LineNode} from './classes';\nimport {foldTree} from './manipulation';\n\n/**\n * Format only the given line node, and *NOT* its subnodes.\n * This essentially comprise indentation and a trailing newline.\n */\nexport function deparseLine(node: LineNode): string {\n return ' '.repeat(node.indentation) + node.sourceLine + '\\n';\n}\n\n/**\n * Return a flat string representation of the indentation tree.\n */\nexport function deparseTree(tree: IndentationTree): string {\n function accumulator(tree: IndentationTree, accum: string): string {\n let str = '';\n if (isLine(tree)) {\n str = deparseLine(tree);\n } else if (isBlank(tree)) {\n str = '\\n';\n }\n return accum + str;\n }\n return foldTree(tree, '', accumulator, 'topDown');\n}\n\n/**\n * Return a list of flat strings whose concatenation equals `deparseTree`.\n * The source is cut at the lines whose labels appear in `cutAt`. In other\n * words, if a node has a labelled `A` that appears in `cutAt`, then there will\n * be at least three strings in the result: the concatenation of lines before\n * the node `A`, the lines covered by node `A`, and lines after the node `A`.\n *\n * FIXME: The cuts are *not* applied recursively: If e.g. node `A` has a\n * sub-node labelled `B` which is also in `cutAt`, then the result will still\n * contain only a single string for node `A`.\n *\n */\nexport function deparseAndCutTree(tree: IndentationTree, cutAt: L[]): {label: L | undefined; source: string}[] {\n const cutAtSet = new Set(cutAt);\n const cuts: {label: L | undefined; source: string}[] = [];\n let curUndef = '';\n // Reimplement visitTree to avoid descending into cut nodes.\n function visit(tree: IndentationTree) {\n if (tree.label !== undefined && cutAtSet.has(tree.label)) {\n if (curUndef !== '') {\n cuts.push({label: undefined, source: curUndef});\n }\n cuts.push({\n label: tree.label,\n source: deparseTree(tree),\n });\n curUndef = '';\n } else {\n if (isLine(tree)) {\n curUndef += deparseLine(tree);\n }\n tree.subs.forEach(visit);\n }\n }\n visit(tree);\n if (curUndef !== '') {\n cuts.push({label: undefined, source: curUndef});\n }\n return cuts;\n}\n\n/**\n * Return a readable string representation of the tree.\n *\n * The output is closely related to building trees using the helper functions in\n * `indentation.test.ts`.\n */\nexport function describeTree(tree: IndentationTree, indent = 0): string {\n const ind = ' '.repeat(indent);\n if (tree === undefined) {\n return 'UNDEFINED NODE';\n }\n let children: string;\n if (tree.subs === undefined) {\n children = 'UNDEFINED SUBS';\n } else {\n children = tree.subs\n .map((child: IndentationTree) => {\n return describeTree(child, indent + 2);\n })\n .join(',\\n');\n }\n if (children === '') {\n children = '[]';\n } else {\n children = `[\\n${children}\\n ${ind}]`;\n }\n const prefix = (isVirtual(tree) || isTop(tree) ? ' ' : String(tree.lineNumber).padStart(3, ' ')) + `: ${ind}`;\n const labelString = tree.label === undefined ? '' : JSON.stringify(tree.label);\n if (isVirtual(tree) || isTop(tree)) {\n return `${prefix}vnode(${tree.indentation}, ${labelString}, ${children})`;\n } else if (isBlank(tree)) {\n return `${prefix}blank(${labelString ?? ''})`;\n } else {\n return `${prefix}lnode(${tree.indentation}, ${labelString}, ${JSON.stringify(tree.sourceLine)}, ${children})`;\n }\n}\n\n/**\n * Return a string that mimics the call that would construct the tree\n * This is less readable than describeTree, but useful to write code.\n */\nexport function encodeTree(tree: IndentationTree, indent = ''): string {\n const labelString = tree.label === undefined ? '' : `, ${JSON.stringify(tree.label)}`;\n\n const subString =\n !isBlank(tree) && tree.subs.length > 0\n ? `[\\n${tree.subs.map(node => encodeTree(node, indent + ' ')).join(', \\n')}\\n${indent}]`\n : '[]';\n\n switch (tree.type) {\n case 'blank':\n return `${indent}blankNode(${tree.lineNumber}${labelString})`;\n case 'top':\n return `topNode(${subString}${labelString})`;\n case 'virtual':\n return `${indent}virtualNode(${tree.indentation}, ${subString}${labelString})`;\n case 'line':\n return `${indent}lineNode(${tree.indentation}, ${tree.lineNumber}, \"${tree.sourceLine}\", ${subString}${labelString})`;\n }\n}\n\n/**\n * Return the first line number of the given tree.\n */\nexport function firstLineOf(tree: IndentationTree): number | undefined {\n if (isLine(tree) || isBlank(tree)) {\n return tree.lineNumber;\n }\n for (const sub of tree.subs) {\n const firstLine = firstLineOf(sub);\n if (firstLine !== undefined) {\n return firstLine;\n }\n }\n return undefined;\n}\n\n/**\n * Return the last line number of the given tree.\n */\nexport function lastLineOf(tree: IndentationTree): number | undefined {\n let lastLine: number | undefined = undefined;\n let i = tree.subs.length - 1;\n while (i >= 0 && lastLine === undefined) {\n lastLine = lastLineOf(tree.subs[i]);\n i--;\n }\n if (lastLine === undefined && !isVirtual(tree) && !isTop(tree)) {\n return tree.lineNumber;\n } else {\n return lastLine;\n }\n}\n","import {processJava} from './java';\nimport {processMarkdown} from './markdown';\nimport {registerLanguageSpecificParser} from './parsing';\n\nregisterLanguageSpecificParser('markdown', processMarkdown);\nregisterLanguageSpecificParser('java', processJava);\n\nexport * from './classes';\nexport * from './description';\nexport * from './manipulation';\nexport * from './parsing';\n","import {IndentationTree, isBlank} from './classes';\nimport {visitTree} from './manipulation';\nimport {\n LabelRule,\n buildLabelRules,\n combineClosersAndOpeners,\n flattenVirtual,\n labelLines,\n labelVirtualInherited,\n} from './parsing';\n\n/**\n * Java labels.\n *\n * * package: A package declaration;\n * * import: An import stament\n * * comment_single: Single-line comments starting with //\n * * comment_multi: Multi-line comments starting with /*, or a vnode of\n * multiple single-line comments.\n * * annotation: A line starting with \"@\". Note that fields are habitually\n * declared on one line, even if they have an annotation. In this case, the\n * field will have the label \"annotation\" rather than \"member\".\n * * closeBrace: A closing brace alone on a line.\n * * member: Anything inside a class or interface that does not have a more\n * specific label.\n */\nconst _javaLabelRules = {\n package: /^package /,\n import: /^import /,\n class: /\\bclass /,\n interface: /\\binterface /,\n javadoc: /^\\/\\*\\*/,\n comment_multi: /^\\/\\*[^*]/,\n comment_single: /^\\/\\//,\n annotation: /^@/,\n opener: /^[\\[({]/,\n closer: /^[\\])}]/,\n} as const;\nconst javaLabelRules: LabelRule[] = buildLabelRules(_javaLabelRules);\n\n/**\n * processJava(parseRaw(text)) is supposed to serve as superior alternative to alternative parseTree(text, \"generic\")\n */\nexport function processJava(originalTree: IndentationTree): IndentationTree {\n let tree = originalTree as IndentationTree;\n labelLines(tree, javaLabelRules);\n tree = combineClosersAndOpeners(tree);\n tree = flattenVirtual(tree);\n labelVirtualInherited(tree);\n // Label all non-labelled subs of class and interface as member.\n // We also relabel annotations that are direct subs of class or interface as\n // member.\n visitTree(\n tree,\n (tree: IndentationTree) => {\n if (tree.label === 'class' || tree.label === 'interface') {\n for (const sub of tree.subs) {\n if (!isBlank(sub) && (sub.label === undefined || sub.label === 'annotation')) {\n sub.label = 'member';\n }\n }\n }\n },\n 'bottomUp'\n );\n return tree;\n}\n","import {IndentationSubTree, IndentationTree, TopNode, isTop, isVirtual, topNode} from './classes';\n\n/**\n * Clear all labels (and their types) from the tree.\n * This will modify the tree in place, or return a retyped tree.\n */\nexport function clearLabels(tree: IndentationTree): IndentationTree {\n visitTree(\n tree,\n (tree: IndentationTree) => {\n tree.label = undefined;\n },\n 'bottomUp'\n );\n return tree;\n}\n\n/** clear labels if condition is true */\nexport function clearLabelsIf(\n tree: IndentationTree,\n condition: (arg: L | S) => arg is S\n): IndentationTree {\n visitTree(\n tree,\n (tree: IndentationTree) => {\n tree.label = tree.label ? (condition(tree.label) ? undefined : tree.label) : undefined;\n },\n 'bottomUp'\n );\n return tree as IndentationTree;\n}\n\nexport function mapLabels(\n tree: IndentationSubTree,\n map: (arg: L1) => L2 | undefined\n): IndentationSubTree;\nexport function mapLabels(tree: TopNode, map: (arg: L1) => L2 | undefined): TopNode;\nexport function mapLabels(tree: IndentationTree, map: (arg: L1) => L2 | undefined): IndentationTree;\n/**\n * Apply a type changing function to all labels.\n * This will return a new, retyped tree.\n * (For applying a type keeping function to a tree\n * that modifies it in place, use `visitTree`.)\n */\nexport function mapLabels(tree: IndentationTree, map: (arg: L1) => L2 | undefined): IndentationTree {\n switch (tree.type) {\n case 'line':\n case 'virtual':\n const newSubs = tree.subs.map(sub => mapLabels(sub, map));\n return {...tree, subs: newSubs, label: tree.label ? map(tree.label) : undefined};\n case 'blank':\n return {...tree, label: tree.label ? map(tree.label) : undefined};\n case 'top':\n return {\n ...tree,\n subs: tree.subs.map(sub => mapLabels(sub, map)),\n label: tree.label ? map(tree.label) : undefined,\n };\n }\n}\n\n/**\n * Renumber the line numbers of the tree contiguously from 0 and up.\n */\nexport function resetLineNumbers(tree: IndentationTree): void {\n let lineNumber = 0;\n function visitor(tree: IndentationTree) {\n if (!isVirtual(tree) && !isTop(tree)) {\n tree.lineNumber = lineNumber;\n lineNumber++;\n }\n }\n visitTree(tree, visitor, 'topDown');\n}\n\n/**\n * Visit the tree with a function that is called on each node.\n *\n * If direction is topDown, then parents are visited before their children.\n * If direction is bottomUp, children are visited in order before their parents,\n * so that leaf nodes are visited first.\n */\nexport function visitTree(\n tree: IndentationTree,\n visitor: (tree: IndentationTree) => void,\n direction: 'topDown' | 'bottomUp'\n): void {\n function _visit(tree: IndentationTree) {\n if (direction === 'topDown') {\n visitor(tree);\n }\n tree.subs.forEach(subtree => {\n _visit(subtree);\n });\n if (direction === 'bottomUp') {\n visitor(tree);\n }\n }\n _visit(tree);\n}\n\n/**\n * Visit the tree with a function that is called on each node --\n * if it returns false, children are not visited (in case of topDown),\n * or the parent is not visited anymore (in case of bottomUp).\n *\n * If direction is topDown, then parents are visited before their children.\n * If direction is bottomUp, children are visited in order before their parents,\n * so that leaf nodes are visited first.\n */\nexport function visitTreeConditionally(\n tree: IndentationTree,\n visitor: (tree: IndentationTree) => boolean,\n direction: 'topDown' | 'bottomUp'\n): void {\n // IDEA: rewrite visitTree to reuse this code\n function _visit(tree: IndentationTree): boolean {\n if (direction === 'topDown') {\n if (!visitor(tree)) {\n return false;\n }\n }\n let shouldContinue = true;\n tree.subs.forEach(subtree => {\n shouldContinue = shouldContinue && _visit(subtree);\n });\n if (direction === 'bottomUp') {\n shouldContinue = shouldContinue && visitor(tree);\n }\n return shouldContinue;\n }\n _visit(tree);\n}\n\n/**\n * Fold an accumulator function over the tree.\n *\n * If direction is topDown, then parents are visited before their children.\n * If direction is bottomUp, children are visited in order before their parents,\n * so that leaf nodes are visited first.\n */\nexport function foldTree(\n tree: IndentationTree,\n init: T,\n accumulator: (tree: IndentationTree, acc: T) => T,\n direction: 'topDown' | 'bottomUp'\n): T {\n let acc = init;\n function visitor(tree: IndentationTree) {\n acc = accumulator(tree, acc);\n }\n visitTree(tree, visitor, direction);\n return acc;\n}\n\nexport type Rebuilder = (tree: IndentationTree) => IndentationTree | undefined;\n/**\n * Rebuild the tree from the bottom up by applying a function to each node.\n * The visitor function takes a node whose children have already been rebuilt,\n * and returns a new node to replace it (or undefined if it should be deleted).\n * Optionally, a function can be provided to skip nodes that should just be kept\n * without visiting them or their sub-nodes.\n */\nexport function rebuildTree(\n tree: IndentationTree,\n visitor: Rebuilder,\n skip?: (tree: IndentationTree) => boolean\n): IndentationTree {\n const rebuild: Rebuilder = (tree: IndentationTree) => {\n if (skip !== undefined && skip(tree)) {\n return tree;\n } else {\n const newSubs = tree.subs.map(rebuild).filter(sub => sub !== undefined) as IndentationSubTree[];\n tree.subs = newSubs;\n return visitor(tree);\n }\n };\n const rebuilt = rebuild(tree);\n if (rebuilt !== undefined) {\n return rebuilt;\n } else {\n return topNode();\n }\n}\n","import {IndentationTree, isBlank, LineNode, TopNode, VirtualNode} from './classes';\nimport {buildLabelRules, flattenVirtual, groupBlocks, labelLines, LabelRule, labelVirtualInherited} from './parsing';\n\n/**\n\n */\nconst _MarkdownLabelRules = {\n heading: /^# /,\n subheading: /^## /,\n subsubheading: /### /,\n} as const;\nconst MarkdownLabelRules: LabelRule[] = buildLabelRules(_MarkdownLabelRules);\n\n/**\n * processMarkdown(parseRaw(text)) is supposed to serve as a superior alternative to parseTree(text, \"generic\")\n */\nexport function processMarkdown(originalTree: IndentationTree): IndentationTree {\n let tree = originalTree as IndentationTree;\n labelLines(tree, MarkdownLabelRules);\n\n // We'll want to refer to the tree's subs, so let the type checker know it won't be blank\n if (isBlank(tree)) {\n return tree;\n }\n\n // the top level is ordered according to headings / subheadings / subsubheadings\n function headingLevel(sub: IndentationTree): number | undefined {\n // 0 is the tree itself, so we start at 1\n if (sub.label === 'heading') return 1;\n if (sub.label === 'subheading') return 2;\n if (sub.label === 'subsubheading') return 3;\n return undefined;\n }\n let currentHierarchy: (TopNode | LineNode | VirtualNode)[] = [tree];\n let oldTreeSubs = [...tree.subs];\n tree.subs = [];\n for (const sub of oldTreeSubs) {\n const level = headingLevel(sub);\n if (level === undefined || isBlank(sub)) {\n currentHierarchy[currentHierarchy.length - 1].subs.push(sub);\n } else {\n // take care of \"dangling\" levels, e.g. if we have a subsubheading after a heading\n while (currentHierarchy.length < level) {\n currentHierarchy.push(currentHierarchy[currentHierarchy.length - 1]);\n }\n // add this to the parent\n currentHierarchy[level - 1].subs.push(sub);\n // make this the tip of the hierarchy\n currentHierarchy[level] = sub;\n // delete all higher levels\n while (currentHierarchy.length > level + 1) {\n currentHierarchy.pop();\n }\n }\n }\n\n // now group paragraphs\n tree = groupBlocks(tree);\n tree = flattenVirtual(tree);\n labelVirtualInherited(tree);\n\n return tree;\n}\n","import {\n blankNode,\n IndentationSubTree,\n IndentationTree,\n isBlank,\n isLine,\n isVirtual,\n lineNode,\n LineNode,\n TopNode,\n topNode,\n virtualNode,\n VirtualNode,\n} from './classes';\nimport {clearLabelsIf, Rebuilder, rebuildTree, visitTree} from './manipulation';\n\n/**\n * Perform a raw indentation-tree parse of a string. This is completely\n * language-agnostic and the returned tree is unlabeled.\n *\n * - Blank lines pertain to the top-most node that they may, as restricted\n * by next non-blank line. So e.g.\n *\n * E\n * e1\n * e2\n *\n * e3\n *\n * Then e1.subs = [e2], and E.subs = [ e1, blank, e3 ].\n *\n */\nexport function parseRaw(source: string): IndentationTree {\n const rawLines = source.split('\\n');\n // TODO: How to handle mix of tabs and spaces?\n const indentations = rawLines.map(line => line.match(/^\\s*/)![0].length);\n const lines = rawLines.map(line => line.trimLeft());\n function parseNode(line: number): [LineNode, number] {\n const [subs, nextLine] = parseSubs(line + 1, indentations[line]);\n const node: LineNode = lineNode(indentations[line], line, lines[line], subs);\n return [node, nextLine];\n }\n function parseSubs(initialLine: number, parentIndentation: number): [IndentationSubTree[], number] {\n let sub: IndentationTree | undefined;\n const subs: IndentationSubTree[] = [];\n let line = initialLine;\n let lastBlank: number | undefined = undefined;\n while (line < lines.length && (lines[line] === '' || indentations[line] > parentIndentation)) {\n if (lines[line] === '') {\n if (lastBlank === undefined) {\n lastBlank = line;\n }\n line += 1;\n } else {\n if (lastBlank !== undefined) {\n for (let i = lastBlank; i < line; i++) {\n subs.push(blankNode(i));\n }\n lastBlank = undefined;\n }\n [sub, line] = parseNode(line);\n subs.push(sub);\n }\n }\n // Trailing blanks are left for the grandparent\n if (lastBlank !== undefined) {\n line = lastBlank;\n }\n return [subs, line];\n }\n const [subs, parsedLine] = parseSubs(0, -1);\n let line = parsedLine;\n // Special case: trailing blank lines at end of file\n while (line < lines.length && lines[line] === '') {\n subs.push(blankNode(line));\n line += 1;\n }\n if (line < lines.length) {\n throw new Error(`Parsing did not go to end of file. Ended at ${line} out of ${lines.length}`);\n }\n return topNode(subs);\n}\n\ntype LineMatcher = (sourceLine: string) => boolean;\nexport interface LabelRule {\n matches: LineMatcher;\n label: L | undefined;\n}\n\n/** Labels the line elements of the tree in-place according to rules */\nexport function labelLines(tree: IndentationTree, labelRules: LabelRule[]): void {\n function visitor(tree: IndentationTree): void {\n if (isLine(tree)) {\n const rule = labelRules.find(rule => rule.matches(tree.sourceLine));\n if (rule) {\n tree.label = rule.label;\n }\n }\n }\n visitTree(tree, visitor, 'bottomUp');\n}\n\n/**\n * For each virtual node, if the node has only one non-blank sub, then label\n * the virtual node as that sub.\n */\nexport function labelVirtualInherited(tree: IndentationTree): void {\n function visitor(tree: IndentationTree): void {\n if (isVirtual(tree) && tree.label === undefined) {\n const subs = tree.subs.filter(sub => !isBlank(sub));\n if (subs.length === 1) {\n tree.label = subs[0].label;\n }\n }\n }\n visitTree(tree, visitor, 'bottomUp');\n}\n\n/**\n * Function to convert a mapped object to a list of rules.\n * This allows some type magic for extracting a label type from a mapping of rules.\n */\nexport function buildLabelRules(ruleMap: L): LabelRule[] {\n return (Object.keys(ruleMap) as (keyof L)[]).map(key => {\n let matches: (sourceLine: string) => boolean;\n if ((ruleMap[key] as RegExp).test) {\n matches = sourceLine => (ruleMap[key] as RegExp).test(sourceLine);\n } else {\n matches = ruleMap[key] as LineMatcher;\n }\n return {\n matches,\n label: key,\n };\n });\n}\n\n/**\n * Fills the opener and closer indentation spec of\n * https://docs.google.com/document/d/1WxjTDzx8Qbf4Bklrp9KwiQsB4-kTOloAR5h86np3_OM/edit#heading=h.y5nobcviainb\n * 1. Openers alone in a line whose older sibling is a line are moved to be the first of that sibling's children,\n * and their children integrated as subsequent children of their new parent.\n * 2. Closers following an older sibling (maybe with blanks in between) are moved to be the last of that sibling.\n * 3. If the closer in 2 has children themselves, their older siblings are wrapped in a virtual node\n */\nexport function combineClosersAndOpeners(\n tree: IndentationTree\n): IndentationTree {\n // We'll make new virtual nodes, which comprise older siblings of a closer and get a temporary label\n type S = L | 'opener' | 'closer' | 'newVirtual';\n const rebuilder: Rebuilder = function (tree: IndentationTree) {\n if (\n tree.subs.length === 0 ||\n tree.subs.findIndex(sub => sub.label === 'closer' || sub.label === 'opener') === -1\n ) {\n return tree;\n }\n const newSubs: IndentationSubTree[] = [];\n let lastNew: TopNode | VirtualNode | LineNode | undefined;\n for (let i = 0; i < tree.subs.length; i++) {\n const sub = tree.subs[i];\n const directOlderSibling = tree.subs[i - 1];\n // 1. if opener whose older sibling is a line, move to first of that sibling's children\n if (sub.label === 'opener' && directOlderSibling !== undefined && isLine(directOlderSibling)) {\n // Move the bracket to be the last child of it\n directOlderSibling.subs.push(sub);\n sub.subs.forEach(sub => directOlderSibling.subs.push(sub));\n sub.subs = [];\n }\n // 2. if a closer following an older sibling\n else if (\n sub.label === 'closer' &&\n lastNew !== undefined &&\n (isLine(sub) || isVirtual(sub)) &&\n sub.indentation >= lastNew.indentation\n ) {\n // Move intervening blanks from newSubs to lastNew.subs\n let j = newSubs.length - 1;\n while (j > 0 && isBlank(newSubs[j])) {\n j -= 1;\n }\n lastNew.subs.push(...newSubs.splice(j + 1));\n\n // 3.if the closer in 2 has children themselves, their older siblings are wrapped in a virtual node to distinguish them\n // Except for leading blocks of virtual nodes which have already been wrapped that way\n // i.e. take the longest initial subsequence of lastNew.subs that are all labeled 'virtual' and don't wrap those again\n if (sub.subs.length > 0) {\n const firstNonVirtual = lastNew.subs.findIndex(sub => sub.label !== 'newVirtual');\n const subsToKeep = lastNew.subs.slice(0, firstNonVirtual);\n const subsToWrap = lastNew.subs.slice(firstNonVirtual);\n const wrappedSubs =\n subsToWrap.length > 0 ? [virtualNode(sub.indentation, subsToWrap, 'newVirtual')] : [];\n lastNew.subs = [...subsToKeep, ...wrappedSubs, sub];\n } else {\n lastNew.subs.push(sub);\n }\n } else {\n // nothing to do here, just add it normally\n newSubs.push(sub);\n if (!isBlank(sub)) {\n lastNew = sub;\n }\n }\n }\n tree.subs = newSubs;\n return tree;\n };\n const returnTree = rebuildTree(tree, rebuilder);\n clearLabelsIf(tree, (arg: S): arg is 'newVirtual' => arg === 'newVirtual');\n // now returnTree does not have the helper label 'newVirtual' anymore\n return returnTree as IndentationTree;\n}\n\n/**\n * If there are more than 1 consecutive sibling separated from others by delimiters,\n * combine them into a virtual node.\n * The possibly several consecutive delimiters will be put with the preceding siblings into the virtual node.\n * Note that offside groupings should be done before this.\n */\nexport function groupBlocks(\n tree: IndentationTree,\n isDelimiter: (node: IndentationTree) => boolean = isBlank,\n label?: L\n): IndentationTree {\n const rebuilder: Rebuilder = function (tree: IndentationTree) {\n if (tree.subs.length <= 1) {\n return tree;\n }\n const newSubs: IndentationSubTree[] = [];\n let nodesSinceLastFlush: IndentationSubTree[] = [];\n let currentBlockIndentation: number | undefined;\n let lastNodeWasDelimiter = false;\n\n // we write to nodesSinceLastDelimiter as cache\n // if we have a non-delimiter after a delimiter, we flush\n // to a new virtual node appended to the newSubs array\n\n function flushBlockIntoNewSubs(\n final: boolean = false // if final, only wrap in virtual if there are newSubs already\n ): void {\n if (currentBlockIndentation !== undefined && (newSubs.length > 0 || !final)) {\n const virtual = virtualNode(currentBlockIndentation, nodesSinceLastFlush, label);\n newSubs.push(virtual);\n } else {\n nodesSinceLastFlush.forEach(node => newSubs.push(node));\n }\n }\n\n for (let i = 0; i < tree.subs.length; i++) {\n const sub = tree.subs[i];\n const subIsDelimiter = isDelimiter(sub);\n if (!subIsDelimiter && lastNodeWasDelimiter) {\n flushBlockIntoNewSubs();\n nodesSinceLastFlush = [];\n }\n lastNodeWasDelimiter = subIsDelimiter;\n nodesSinceLastFlush.push(sub);\n if (!isBlank(sub)) {\n currentBlockIndentation = currentBlockIndentation ?? sub.indentation;\n }\n }\n\n // treat the end of node like a block end, and make the virtual block if it wouldn't be a singleton\n flushBlockIntoNewSubs(true);\n tree.subs = newSubs;\n return tree;\n };\n return rebuildTree(tree, rebuilder);\n}\n\n/**\n * Remove unlabeled virtual nodes which either:\n * - Have one or no children\n * - Are the only child of their parent\n * In either case, it is replaced by their children.\n */\nexport function flattenVirtual(tree: IndentationTree): IndentationTree {\n const rebuilder: Rebuilder = function (tree) {\n if (isVirtual(tree) && tree.label === undefined && tree.subs.length <= 1) {\n if (tree.subs.length === 0) {\n return undefined;\n } else {\n //tree.subs.length === 1\n return tree.subs[0];\n }\n } else if (tree.subs.length === 1 && isVirtual(tree.subs[0]) && tree.subs[0].label === undefined) {\n tree.subs = tree.subs[0].subs;\n }\n return tree;\n };\n return rebuildTree(tree, rebuilder);\n}\n\n/**\n * Generic labels.\n *\n * * opener: A line starting with an opening parens, square bracket, or curly brace\n * * closer: A line starting with a closing parens, square bracket, or curly brace\n */\nconst _genericLabelRules = {\n opener: /^[\\[({]/,\n closer: /^[\\])}]/,\n} as const;\nconst genericLabelRules: LabelRule<'opener' | 'closer'>[] = buildLabelRules(_genericLabelRules);\n\nconst LANGUAGE_SPECIFIC_PARSERS: {[key: string]: (raw: IndentationTree) => IndentationTree} = {};\n/**\n * Register a language-specific parser for a language.\n * This should normally be called in index.ts.\n */\nexport function registerLanguageSpecificParser(\n language: string,\n parser: (raw: IndentationTree) => IndentationTree\n): void {\n LANGUAGE_SPECIFIC_PARSERS[language] = parser;\n}\n\nexport function parseTree(source: string, languageId?: string): IndentationTree {\n const raw = parseRaw(source);\n const languageSpecificParser = LANGUAGE_SPECIFIC_PARSERS[languageId ?? ''];\n if (languageSpecificParser) {\n return languageSpecificParser(raw);\n } else {\n labelLines(raw, genericLabelRules);\n const processedTree = combineClosersAndOpeners(raw);\n return processedTree;\n }\n}\n","import {DocumentInfo} from './prompt';\n\n/**\n * Interface for writing single-line comments in a given language.\n * Does not include the terminal new-line character (i.e. for many languages,\n * `end` will just be the empty string).\n */\ninterface CommentMarker {\n start: string;\n end: string;\n}\n\n// Language files in VSCode:\n// https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers\n//\n// Missing below from this list are:\n// Diff diff\n// Git\tgit-commit and git-rebase\n// JSON\tjson\n// ShaderLab\tshaderlab\n// Additional to that list are:\n// Erlang\n// Haskell\n// Kotlin\n// QL\n// Scala\n// Verilog\nexport const languageCommentMarkers: {[language: string]: CommentMarker} = {\n abap: {start: '\"', end: ''},\n bat: {start: 'REM', end: ''},\n bibtex: {start: '%', end: ''},\n blade: {start: '#', end: ''},\n c: {start: '//', end: ''},\n clojure: {start: ';', end: ''},\n coffeescript: {start: '//', end: ''},\n cpp: {start: '//', end: ''},\n csharp: {start: '//', end: ''},\n css: {start: '/*', end: '*/'},\n dart: {start: '//', end: ''},\n dockerfile: {start: '#', end: ''},\n elixir: {start: '#', end: ''},\n erb: {start: '<%#', end: '%>'},\n erlang: {start: '%', end: ''},\n fsharp: {start: '//', end: ''},\n go: {start: '//', end: ''},\n groovy: {start: '//', end: ''},\n haml: {start: '-#', end: ''},\n handlebars: {start: '{{!', end: '}}'},\n haskell: {start: '--', end: ''},\n html: {start: ''},\n ini: {start: ';', end: ''},\n java: {start: '//', end: ''},\n javascript: {start: '//', end: ''},\n javascriptreact: {start: '//', end: ''},\n jsonc: {start: '//', end: ''},\n jsx: {start: '//', end: ''},\n julia: {start: '#', end: ''},\n kotlin: {start: '//', end: ''},\n latex: {start: '%', end: ''},\n less: {start: '//', end: ''},\n lua: {start: '--', end: ''},\n makefile: {start: '#', end: ''},\n markdown: {start: '[]: #', end: ''},\n 'objective-c': {start: '//', end: ''},\n 'objective-cpp': {start: '//', end: ''},\n perl: {start: '#', end: ''},\n php: {start: '//', end: ''},\n powershell: {start: '#', end: ''},\n pug: {start: '//', end: ''},\n python: {start: '#', end: ''},\n ql: {start: '//', end: ''}, // QL is a query language for CodeQL\n r: {start: '#', end: ''},\n razor: {start: ''},\n ruby: {start: '#', end: ''},\n rust: {start: '//', end: ''},\n sass: {start: '//', end: ''},\n scala: {start: '//', end: ''},\n scss: {start: '//', end: ''},\n shellscript: {start: '#', end: ''},\n slim: {start: '/', end: ''},\n solidity: {start: '//', end: ''},\n sql: {start: '--', end: ''},\n stylus: {start: '//', end: ''},\n svelte: {start: ''},\n swift: {start: '//', end: ''},\n terraform: {start: '#', end: ''},\n tex: {start: '%', end: ''},\n typescript: {start: '//', end: ''},\n typescriptreact: {start: '//', end: ''},\n vb: {start: \"'\", end: ''},\n verilog: {start: '//', end: ''},\n 'vue-html': {start: ''},\n vue: {start: '//', end: ''},\n xml: {start: ''},\n xsl: {start: ''},\n yaml: {start: '#', end: ''},\n};\n\nconst dontAddLanguageMarker: string[] = [\n 'php', // We don't know if the file starts with `\",\n \"python\": \"#\\!/usr/bin/env python3\",\n \"ruby\": \"#\\!/usr/bin/env ruby\",\n \"shellscript\": \"#\\!/bin/sh\",\n \"yaml\": \"# YAML data\"\n}\n\n/**\n * Best-effort determining whether the top of the source already contains a\n * discernible language marker, in particular a shebang line\n * @param languageId The string name of the language\n * @returns True iff we determined a recognisable language marker\n */\n// prettier-ignore\nexport function hasLanguageMarker({ source } : DocumentInfo): boolean {\n return source.startsWith(\"#\\!\") || source.startsWith(\" comment(line, languageId)).join('\\n');\n return trailingNewline ? commented + '\\n' : commented;\n}\n\n/**\n * Return a one-line comment or text which describes the language of a\n * document, e.g. a shebang line or a comment.\n *\n * @param doc The document we want the marker for.\n * @returns A one-line string that describes the language.\n */\nexport function getLanguageMarker(doc: DocumentInfo): string {\n const {languageId} = doc;\n if (dontAddLanguageMarker.indexOf(languageId) === -1 && !hasLanguageMarker(doc)) {\n if (languageId in shebangLines) {\n return shebangLines[languageId];\n } else {\n return comment(`Language: ${languageId}`, languageId);\n }\n }\n return '';\n}\n\n/**\n * Return a one-line comment containing the relative path of the document, if known.\n *\n * @param doc The document we want the marker for.\n * @returns A one-line comment that contains the relative path of the document.\n */\nexport function getPathMarker(doc: DocumentInfo): string {\n if (doc.relativePath) {\n return comment(`Path: ${doc.relativePath}`, doc.languageId);\n }\n return '';\n}\n","import {resolve} from 'path';\nimport {Worker} from 'worker_threads';\n\nexport * from './elidableText';\nexport {FileStat, FileSystem} from './fileSystem';\nexport * from './indentation';\nexport {comment, commentBlockAsSingles, languageCommentMarkers} from './languageMarker';\nexport * from './parse';\nexport * from './parseBlock';\nexport * from './prompt';\nexport {CursorContextInfo, CursorContextOptions, getCursorContext} from './snippetInclusion/cursorContext';\nexport * from './snippetInclusion/cursorMatching';\nexport {NeighboringSnippetType, NeighboringTabsOption} from './snippetInclusion/neighboringFiles';\nexport {ScoredSnippet} from './snippetInclusion/selectRelevance';\nexport {SnippetProviderType, SnippetSemantics, SnippetWithProviderInfo} from './snippetInclusion/snippets';\nexport * from './tokenization';\n\n/**\n * Create a worker that can be used to invoke promptlib functions on a separate thread.\n *\n * The worker accepts messages of the form `{ id, fn, args }`, where `id` can be freely chosen by\n * the client, `fn` is the name of a function exported by the promptlib, and `args` is an array\n * of arguments to pass to the function.\n *\n * The worker will run the function named `fn` on a worker thread. If the function returns normally,\n * the worker sends a message `{ id, res }`, where `id` is the same as in the incoming message and\n * `res` is the result of the function. If the function throws an exception, the worker sends a\n * message `{ id, err }`, where `err` is the thrown exception.\n *\n * Note that arguments and results of functions invoked this way must be serializable as described\n * [in the Node.js documentation](https://nodejs.org/api/worker_threads.html#worker_threads_port_postmessage_value_transferlist).\n */\nexport function createWorker() {\n return new Worker(resolve(__dirname, '..', 'dist', 'worker.js'));\n}\n","import {dirname, extname, join} from 'path';\nimport {SyntaxNode} from 'web-tree-sitter';\nimport {FileSystem} from './fileSystem';\nimport {getFirstPrecedingComment, parseTreeSitter, queryExports} from './parse';\nimport {DocumentInfoWithOffset} from './prompt';\n\n/**\n * Resolve the import `imp`, which is a TypeScript `import` statement appearing in a module whose\n * path is `importerPath`, using `fs`.\n *\n * If the import is not a local import (i.e., the import path does not start with `.`), or the file\n * it imports has an extension other than `.ts`, return `null`.\n */\nfunction resolveLocalTypeScriptImport(importerPath: string, imp: SyntaxNode): string | null {\n let src = imp.namedChild(1)?.text.slice(1, -1);\n if (!src || !src.startsWith('.')) return null;\n\n if (extname(src) === '') {\n src = src + '.ts';\n } else if (extname(src) !== '.ts') {\n return null;\n }\n\n return join(dirname(importerPath), src);\n}\n\n/**\n * Get a list of all names imported by `imp` (possibly with renaming), where\n * `imp` must be a TypeScript `import` statement.\n */\nfunction getTypescriptImportedNames(imp: SyntaxNode): {name: string; alias: string | undefined}[] {\n let names = [];\n if (imp.namedChild(0)?.type === 'import_clause') {\n let importClause = imp.namedChild(0);\n if (importClause?.namedChild(0)?.type === 'named_imports') {\n let namedImports = importClause.namedChild(0);\n for (let namedImport of namedImports?.namedChildren ?? []) {\n if (namedImport.type === 'import_specifier') {\n const name = namedImport.childForFieldName('name')?.text;\n if (name) {\n const alias = namedImport.childForFieldName('alias')?.text;\n names.push({name, alias});\n }\n }\n }\n }\n }\n return names;\n}\n\n/**\n * Module exports are modelled as a mapping from names to lists of declarations.\n *\n * The same name can map to multiple declarations for function signature exports.\n */\ntype Exports = Map;\n\nconst exportsCache = new Map();\n\nconst EXPORTS_CACHE_LOW_WATER_MARK = 1000;\nconst EXPORTS_CACHE_HIGH_WATER_MARK = 2000;\n\n/**\n * Given a definition of a function or type, return its name and a corresponding\n * TypeScript declaration that only contains types but no code.\n *\n * For ambient declarations, we recursively process the wrapped declaration.\n *\n * For interfaces, enums, and type aliases, they are returned as-is.\n *\n * For function signatures and declarations, we turn them into signatures as\n * explained in the documentation for `extractTypeScriptFunctionDeclaration` below.\n *\n * Classes are turned into ambient declarations, using `extractTypeScriptMemberDeclaration`\n * to recursively process their members.\n */\nfunction extractTypeScriptDeclaration(srcString: string, defn: SyntaxNode | null): {name: string; decl: string} {\n let name = defn?.childForFieldName('name')?.text ?? '';\n\n switch (defn?.type) {\n case 'ambient_declaration':\n return extractTypeScriptDeclaration(srcString, defn.namedChild(0));\n case 'interface_declaration':\n case 'enum_declaration':\n case 'type_alias_declaration':\n return {name, decl: defn.text};\n case 'function_declaration':\n case 'function_signature':\n return {name, decl: extractTypeScriptFunctionDeclaration(srcString, defn)};\n case 'class_declaration': {\n let memberDecls = extractTypeScriptBodyDecls(srcString, defn);\n let decl = '';\n if (memberDecls) {\n let body = defn.childForFieldName('body')!;\n // first, we take everything up to and including the start of the body\n decl = `declare ${srcString.substring(defn.startIndex, body.startIndex + 1)}`;\n\n // then we add the member declarations\n decl += memberDecls.map(d => '\\n' + d).join('');\n\n // finally, we add the closing brace\n decl += `\\n}`;\n }\n return {name, decl};\n }\n }\n\n return {name, decl: ''};\n}\n\n/**\n * Given a definition or a signature of a TypeScript function or method, return\n * a corresponding TypeScript declaration that only contains types but no code.\n *\n * We do this by taking the prefix up to and including the return type\n * annotation if present, or the parameter list otherwise. This does not always\n * yield a valid signature, for example in the presence of default parameters\n * and parameter properties, but it's good enough for the purposes of prompt\n * crafting.\n *\n * For functions (but nor for methods) we additionally prepend the `declare` keyword\n * to turn it into an ambient declaration.\n */\nfunction extractTypeScriptFunctionDeclaration(srcString: string, defn: SyntaxNode): string {\n const endIndex = defn.childForFieldName('return_type')?.endIndex ?? defn.childForFieldName('parameters')?.endIndex;\n if (endIndex !== undefined) {\n let signature = srcString.substring(defn.startIndex, endIndex) + ';';\n if (defn.type === 'function_declaration' || defn.type === 'function_signature') {\n return 'declare ' + signature;\n } else {\n return signature;\n }\n }\n return '';\n}\n\n/**\n * Get the indentation of `node`, that is, the shortest string of spaces and\n * tabs that starts at the beginning of a line and ends at the beginning of\n * `node`. If no such string exists, return `undefined`.\n */\nfunction getIndentation(srcString: string, node: SyntaxNode): string | undefined {\n // skip backwards over tabs and spaces\n let i = node.startIndex - 1;\n while (i >= 0 && (srcString[i] === ' ' || srcString[i] === '\\t')) {\n i--;\n }\n // if we're at the beginning of the file or at a newline, we've found our indentation\n if (i < 0 || srcString[i] === '\\n') {\n return srcString.substring(i + 1, node.startIndex);\n }\n // otherwise something more complicated is going on, so we'll return undefined\n return undefined;\n}\n\n/**\n * Get the doc comment attached to `node`.\n *\n * This is defined as all text between the start of the first comment in the\n * longest unbroken run of comments preceding `node` and the start of `node`,\n * or the empty string if no such run exists.\n *\n * In particular, the \"doc comment\" will include leading whitespace of the\n * node, but not of the first comment in the run.\n */\nexport function getDocComment(srcString: string, node: SyntaxNode): string {\n const docCommentNode = getFirstPrecedingComment(node);\n return docCommentNode ? srcString.substring(docCommentNode.startIndex, node.startIndex) : '';\n}\n\n/**\n * Given a definition of a (non-private) class member, return a corresponding\n * TypeScript declaration that only contains types but no code.\n *\n * For ambient members, we recursively process the wrapped declaration.\n *\n * For method definitions and signatures we use `extractTypeScriptFunctionDeclaration` above.\n *\n * For fields, we chop off the initializer if present.\n */\nfunction extractTypeScriptMemberDeclaration(srcString: string, defn: SyntaxNode): string {\n // filter out private members\n if (defn?.firstChild?.type === 'accessibility_modifier' && defn.firstChild.text === 'private') {\n return '';\n }\n\n const commentNode = getFirstPrecedingComment(defn);\n const indentation = getIndentation(srcString, commentNode ?? defn) ?? ' ';\n const docComment = getDocComment(srcString, defn);\n\n switch (defn.type) {\n case 'ambient_declaration':\n const inner = defn.namedChild(0);\n if (!inner) {\n return '';\n }\n return indentation + docComment + extractTypeScriptMemberDeclaration(srcString, inner);\n case 'method_definition':\n case 'method_signature':\n return indentation + docComment + extractTypeScriptFunctionDeclaration(srcString, defn);\n case 'public_field_definition': {\n // chop off initialiser if any\n let endIndex = defn.childForFieldName('type')?.endIndex ?? defn.childForFieldName('name')?.endIndex;\n if (endIndex !== undefined) {\n return indentation + docComment + srcString.substring(defn.startIndex, endIndex) + ';';\n }\n }\n }\n return '';\n}\n\n/**\n * Given a definition of a class or interface, return a list of TypeScript declarations of\n * its members.\n *\n * @param srcString the source code of the file containing the class or interface\n * @param defn the class or interface definition\n */\nfunction extractTypeScriptBodyDecls(srcString: string, defn: SyntaxNode): string[] | undefined {\n let body = defn.childForFieldName('body');\n if (!body) {\n return;\n }\n\n let memberDecls = body.namedChildren.map(member => extractTypeScriptMemberDeclaration(srcString, member));\n // filter out members for which we could not extract a declaration\n return memberDecls.filter(decl => decl);\n}\n\n/**\n * Construct a map representing declarations exported by the file at the given `uri`, which is\n * written in language `lang`.\n *\n * For TypeScript, this map associates exported types and functions with the (string representation of)\n * their declarations/signatures.\n *\n * For other languages, declaration extraction is not currently supported, so we always return an\n * empty map.\n */\nasync function getExportedDeclarations(uri: string, lang: string, fs: FileSystem): Promise {\n let exports = new Map();\n\n let mtime = -1;\n try {\n mtime = await fs.mtime(uri);\n } catch {\n // if anything wet wrong getting the mtime, simply report no exports\n return exports;\n }\n\n let entry = exportsCache.get(uri);\n if (entry && entry.mtime === mtime) return entry.exports;\n\n if (lang === 'typescript') {\n let tree = null;\n try {\n let srcBytes = await fs.readFile(uri);\n let srcString = srcBytes.toString();\n tree = await parseTreeSitter(lang, srcString);\n\n for (let em of queryExports(lang, tree.rootNode)) {\n for (let ec of em.captures) {\n let exp = ec.node;\n if (exp.type === 'export_statement') {\n let decl = exp.childForFieldName('declaration');\n\n // skip declarations with syntax errors\n if (decl?.hasError()) {\n continue;\n }\n\n let {name, decl: exportedDecl} = extractTypeScriptDeclaration(srcString, decl);\n\n if (name) {\n exportedDecl = getDocComment(srcString, exp) + exportedDecl;\n let exportedDecls = exports.get(name);\n if (!exportedDecls) {\n exportedDecls = [];\n exports.set(name, exportedDecls);\n }\n exportedDecls.push(exportedDecl);\n }\n }\n }\n }\n } catch {\n // if anything went wrong during reading or parsing the file, simply report no exports\n } finally {\n if (tree) tree.delete();\n }\n }\n\n // if cache has more than EXPORTS_CACHE_HIGH_WATER_MARK entries, remove the oldest entries\n // to bring its size down to EXPORTS_CACHE_LOW_WATER_MARK\n if (exportsCache.size > EXPORTS_CACHE_HIGH_WATER_MARK) {\n for (let key of exportsCache.keys()) {\n exportsCache.delete(key);\n if (exports.size <= EXPORTS_CACHE_LOW_WATER_MARK) {\n break;\n }\n }\n }\n\n exportsCache.set(uri, {mtime, exports});\n return exports;\n}\n\n/**\n * Find all import statements in the given subtree.\n */\nfunction getTypeScriptImports(root: SyntaxNode) {\n let imports = [];\n // note that import statements can only appear at the toplevel, so we can simply iterate over\n // the root's children\n for (let toplevelStmt of root.namedChildren) {\n if (toplevelStmt.type === 'import_statement') {\n imports.push(toplevelStmt);\n }\n }\n return imports;\n}\n\n/** Regex to match a TypeScript import statement. */\nconst localImportRegex = /^\\s*import\\s*(type|)\\s*\\{[^}]*\\}\\s*from\\s*['\"]\\./gm;\n\n/**\n * Return the offset of the newline character after the last local import\n * statement in the given string.\n * Returns -1 if the source has no import statements.\n */\nfunction lastTypeScriptLocalImportOffset(source: string): number {\n let lastImport = -1;\n localImportRegex.lastIndex = -1; // restart the regex from the beginning\n let m: RegExpExecArray | null;\n do {\n m = localImportRegex.exec(source);\n if (m) {\n lastImport = localImportRegex.lastIndex + m.length;\n }\n } while (m);\n\n if (lastImport === -1) {\n return -1;\n }\n\n const newlineAfterLastImport = source.indexOf('\\n', lastImport);\n return newlineAfterLastImport !== -1 ? newlineAfterLastImport : source.length;\n}\n\n/**\n * Extract context information from local TypeScript imports.\n */\nasync function extractTypeScriptLocalImportContext(source: string, uri: string, fs: FileSystem): Promise {\n let languageId = 'typescript';\n let localImportContext: string[] = [];\n\n // Only parse up to and including the last line containing an import statement\n const lastImportOffset = lastTypeScriptLocalImportOffset(source);\n if (lastImportOffset === -1) {\n return localImportContext;\n }\n source = source.substring(0, lastImportOffset);\n\n let tree = await parseTreeSitter(languageId, source);\n try {\n for (let imp of getTypeScriptImports(tree.rootNode)) {\n let srcUri = resolveLocalTypeScriptImport(uri, imp);\n if (!srcUri) continue;\n\n let importedNames = getTypescriptImportedNames(imp);\n if (importedNames.length === 0) continue;\n\n let exports = await getExportedDeclarations(srcUri, languageId, fs);\n for (let importedName of importedNames)\n if (exports.has(importedName.name)) {\n localImportContext.push(...exports.get(importedName.name)!);\n // if the import came through an alias, we could simulate this by adding an alias\n // declaration, but the model seems to figure this out by itself, so we don't\n }\n }\n } finally {\n tree.delete();\n }\n return localImportContext;\n}\n\n/**\n * Extract context information from local imports.\n */\nexport async function extractLocalImportContext(doc: DocumentInfoWithOffset, fs?: FileSystem): Promise {\n let {source, uri, languageId} = doc;\n if (fs) if (languageId === 'typescript') return extractTypeScriptLocalImportContext(source, uri, fs);\n return [];\n}\n","import {resolve} from 'path';\nimport * as Parser from 'web-tree-sitter';\nimport {Language, Query, QueryMatch, SyntaxNode, Tree} from 'web-tree-sitter';\nimport {DocumentInfoWithOffset} from './prompt';\n\nexport enum WASMLanguage {\n Python = 'python',\n JavaScript = 'javascript',\n TypeScript = 'typescript',\n TSX = 'tsx',\n Go = 'go',\n Ruby = 'ruby',\n}\n\n/**\n * A position of a syntax-tree node, specified by a zero-based start offset and a zero-based,\n * exclusive end offset.\n */\nexport interface NodePosition {\n startIndex: number;\n endIndex: number;\n}\n\nconst languageIdToWasmLanguageMapping: {[language: string]: WASMLanguage} = {\n python: WASMLanguage.Python,\n javascript: WASMLanguage.JavaScript,\n javascriptreact: WASMLanguage.JavaScript,\n jsx: WASMLanguage.JavaScript,\n typescript: WASMLanguage.TypeScript,\n typescriptreact: WASMLanguage.TSX,\n go: WASMLanguage.Go,\n ruby: WASMLanguage.Ruby,\n};\n\nexport function isSupportedLanguageId(languageId: string): boolean {\n return languageId in languageIdToWasmLanguageMapping;\n}\n\nexport function languageIdToWasmLanguage(languageId: string): WASMLanguage {\n if (!(languageId in languageIdToWasmLanguageMapping)) {\n throw new Error(`Unrecognized language: ${languageId}`);\n }\n return languageIdToWasmLanguageMapping[languageId];\n}\n\n// function patterns defined in javascript grammar:\n// https://github.com/tree-sitter/tree-sitter-javascript/blob/3d9fe9786ee74fa5067577f138e1a7129f80fb41/grammar.js#L595-L629\n// same for typescript:\n// https://github.com/tree-sitter/tree-sitter-typescript/blob/2d1c7d5c10c33cb444d1781fa76f2936810afec4/common/define-grammar.js\nconst jsFunctionQuery = `[\n (function body: (statement_block) @body)\n (function_declaration body: (statement_block) @body)\n (generator_function body: (statement_block) @body)\n (generator_function_declaration body: (statement_block) @body)\n (method_definition body: (statement_block) @body)\n (arrow_function body: (statement_block) @body)\n ] @function`;\n\n/*\nList of queries to run per language to find functions, as well as a cache\nfor parsed Query objects for each query.\n\nWe define named captures to be used by callers in a language-agnostic way:\n- @function: entire function signature and body\n- @docstring: optional docstring\n- @body: optional function body\n\nNOTE: use a [] match across function types to ensure we always match the\n outermost function in case of nested functions.\n*/\nconst functionQuery: {[wasmLanguage in WASMLanguage]: [string, Query?][]} = {\n python: [\n // `(function_definition)` is defined in python grammar:\n // https://github.com/tree-sitter/tree-sitter-python/blob/c4282ba411d990d313c5f8e7850bcaaf46fbf7da/grammar.js#L325-L338\n // docstring is represented in grammar as an optional `(initial expression_statement (string))`\n // at the start of the body block\n [\n `(function_definition body: (block\n (expression_statement (string))? @docstring) @body) @function`,\n ],\n // handle malformed defs - no trailing semicolon or no body\n [`(ERROR (\"def\" (identifier) (parameters))) @function`],\n ],\n javascript: [[jsFunctionQuery]],\n typescript: [[jsFunctionQuery]],\n tsx: [[jsFunctionQuery]],\n go: [\n // function patterns defined in go grammer:\n // https://github.com/tree-sitter/tree-sitter-go/blob/b0c78230146705e867034e49a5ece20245b33490/grammar.js#L194-L209\n [\n `[\n (function_declaration body: (block) @body)\n (method_declaration body: (block) @body)\n ] @function`,\n ],\n ],\n ruby: [\n // function patterns defined in ruby grammer:\n // https://github.com/tree-sitter/tree-sitter-ruby/blob/master/grammar.js\n // NOTE: Use a @params label for optional parameters to avoid capturing as\n // part of @body if parameters are present.\n [\n `[\n (method name: (_) parameters: (method_parameters)? @params [(_)+ \"end\"] @body)\n (singleton_method name: (_) parameters: (method_parameters)? @params [(_)+ \"end\"] @body)\n ] @function`,\n ],\n ],\n};\n\n/** A call of the form `require(...)`. */\nconst requireCall = `(call_expression function: ((identifier) @req (#eq? @req \"require\")))`;\n\n/** A call of the form `require(...)` appearing in a variable declarator. */\nconst declaratorWithRequire = `(variable_declarator value: ${requireCall})`;\n\n/**\n * A CommonJS-style `require` import.\n *\n * Note that a declaration containing multiple `require`s is considered a single import.\n */\nconst commonJsImport = `\n (lexical_declaration ${declaratorWithRequire}+)\n (variable_declaration ${declaratorWithRequire}+)\n`;\n\nconst tsImportQueries: [string, Query?][] = [\n // Since we only care about top level imports, we enforce that the parent node is \"program\"\n [`(program [ ${commonJsImport} ] @import)`],\n ['(program [ (import_statement) (import_alias) ] @import)'],\n];\n\nconst importsQuery: {[wasmLanguage in WASMLanguage]: [string, Query?][]} = {\n python: [\n // Since we only care about top level imports, we enforce that the parent node is \"module\"\n [`(module (future_import_statement) @import)`],\n [`(module (import_statement) @import)`],\n [`(module (import_from_statement) @import)`],\n ],\n javascript: [\n // Since we only care about top level imports, we enforce that the parent node is \"program\"\n [`(program [ ${commonJsImport} ] @import)`],\n ['(program [ (import_statement) ] @import)'],\n ],\n typescript: tsImportQueries,\n tsx: tsImportQueries,\n go: [\n // TODO: handle import statements in go\n ],\n ruby: [\n // TODO: handle import statements in ruby\n ],\n};\n\nconst jsExportQueries: [string, Query?][] = [[`(program (export_statement) @export)`]];\n\nconst exportsQuery: {[wasmLanguage in WASMLanguage]: [string, Query?][]} = {\n python: [\n // TODO: handle exports in python\n ],\n javascript: jsExportQueries,\n typescript: jsExportQueries,\n tsx: jsExportQueries,\n go: [\n // TODO: handle exports in go\n ],\n ruby: [\n // TODO: handle exports in ruby\n ],\n};\n\nconst globalVarsQuery: {[wasmLanguage in WASMLanguage]: [string, Query?][]} = {\n python: [\n // Since we only care about top level global vars, we enforce that the parent node is \"module\"\n [`(module (global_statement) @globalVar)`],\n [`(module (expression_statement) @globalVar)`],\n ],\n javascript: [\n // TODO: handle global vars in javascript\n ],\n typescript: [\n // TODO: handle global vars in typescript\n ],\n tsx: [\n // TODO: handle global vars in tsx\n ],\n go: [\n // TODO: handle global vars in go\n ],\n ruby: [\n // TODO: handle global vars in ruby\n ],\n};\n\nconst jsFunctionTypes = [\n 'function',\n 'function_declaration',\n 'generator_function',\n 'generator_function_declaration',\n 'method_definition',\n 'arrow_function',\n];\n\n/**\n * TreeSitter node types corresponding to functions for the given language.\n */\nconst functionTypes: {[wasmLanguage in WASMLanguage]: Set} = {\n python: new Set(['function_definition']),\n javascript: new Set(jsFunctionTypes),\n typescript: new Set(jsFunctionTypes),\n tsx: new Set(jsFunctionTypes),\n go: new Set(['function_declaration', 'method_declaration']),\n ruby: new Set(['method', 'singleton_method']),\n};\n\n/**\n * TreeSitter node types corresponding to syntactic constructs that can have function declarations\n * as their immediate children.\n */\nconst isFunctionParent: {[wasmLanguage in WASMLanguage]: (nd: SyntaxNode) => boolean} = {\n python: nd => nd.type === 'module' || (nd.type === 'block' && nd.parent?.type === 'class_definition'),\n javascript: nd => nd.type === 'program' || nd.type === 'class_body',\n typescript: nd => nd.type === 'program' || nd.type === 'class_body',\n tsx: nd => nd.type === 'program' || nd.type === 'class_body',\n go: nd => nd.type === 'source_file',\n ruby: nd => nd.type === 'program' || nd.type === 'class',\n};\n\nconst loadedLanguages = new Map();\n\nasync function loadWasmLanguage(language: WASMLanguage): Promise {\n await Parser.init();\n // construct a path that works both for the TypeScript source, which lives under `/src`, and for\n // the transpiled JavaScript, which lives under `/dist`\n const wasmFile = resolve(__dirname, '..', 'dist', `tree-sitter-${language}.wasm`);\n return Language.load(wasmFile);\n}\n\nexport async function getLanguage(language: string): Promise {\n const wasmLanguage = languageIdToWasmLanguage(language);\n if (!loadedLanguages.has(wasmLanguage)) {\n const loadedLang = await loadWasmLanguage(wasmLanguage);\n loadedLanguages.set(wasmLanguage, loadedLang);\n }\n return loadedLanguages.get(wasmLanguage)!;\n}\n\n// This method returns a tree that the user needs to call `.delete()` before going out of scope.\nexport async function parseTreeSitter(language: string, source: string): Promise {\n // `getLanguage` calls `Parser.init`, which needs to be called before `new Parser()` below\n let treeSitterLanguage = await getLanguage(language);\n const parser = new Parser();\n parser.setLanguage(treeSitterLanguage);\n const parsedTree = parser.parse(source);\n\n // Need to delete parser objects directly\n parser.delete();\n return parsedTree;\n}\n\nexport async function parsesWithoutError(language: string, source: string): Promise {\n const tree = await parseTreeSitter(language, source);\n const result = !tree.rootNode.hasError();\n tree.delete();\n return result;\n}\n\nexport function getBlockCloseToken(language: string): string | null {\n const wasmLanguage = languageIdToWasmLanguage(language);\n switch (wasmLanguage) {\n case WASMLanguage.Python:\n return null;\n case WASMLanguage.JavaScript:\n case WASMLanguage.TypeScript:\n case WASMLanguage.TSX:\n case WASMLanguage.Go:\n return '}';\n case WASMLanguage.Ruby:\n return 'end';\n }\n}\n\nfunction innerQuery(queries: [string, Query?][], root: SyntaxNode): QueryMatch[] {\n const matches = [];\n for (const query of queries) {\n // parse and cache query if this is the first time we've used it\n if (!query[1]) {\n const lang = root.tree.getLanguage() as Language;\n // cache parsed query object\n query[1] = lang.query(query[0]);\n }\n matches.push(...query[1].matches(root));\n }\n return matches;\n}\n\nexport function queryFunctions(language: string, root: SyntaxNode): QueryMatch[] {\n const queries = functionQuery[languageIdToWasmLanguage(language)];\n return innerQuery(queries, root);\n}\n\n/**\n * A list of all top-level imports in the given tree.\n *\n * Note that imports are _not_ guaranteed to be in the same order as the source code.\n */\nexport function queryImports(language: string, root: SyntaxNode): QueryMatch[] {\n const queries = importsQuery[languageIdToWasmLanguage(language)];\n return innerQuery(queries, root);\n}\n\nexport function queryExports(language: string, root: SyntaxNode): QueryMatch[] {\n const queries = exportsQuery[languageIdToWasmLanguage(language)];\n return innerQuery(queries, root);\n}\n\nexport function queryGlobalVars(language: string, root: SyntaxNode): QueryMatch[] {\n const queries = globalVarsQuery[languageIdToWasmLanguage(language)];\n return innerQuery(queries, root);\n}\n\nconst docstringQuery: [string, Query?] = [\n `[\n (class_definition (block (expression_statement (string))))\n (function_definition (block (expression_statement (string))))\n]`,\n];\n\nexport function queryPythonIsDocstring(blockNode: SyntaxNode): boolean {\n return innerQuery([docstringQuery], blockNode).length == 1;\n}\n\n/**\n * Find the closest ancestor node of `nd` that may have function declarations as sibling nodes.\n */\nexport function getAncestorWithSiblingFunctions(language: string, nd: SyntaxNode): SyntaxNode | null {\n const check = isFunctionParent[languageIdToWasmLanguage(language)];\n while (nd.parent) {\n if (check(nd.parent)) return nd;\n nd = nd.parent;\n }\n return nd.parent ? nd : null;\n}\n\n/**\n * Check if `nd` is a function.\n *\n * Note that for a JavaScript declaration like\n *\n * ```js\n * var f = function g() {}\n * ```\n *\n * only the node corresponding to the function expression `function g() {}` is considered to be\n * a function, not the entire declaration.\n *\n * Conversely, the declaration is considered a function definition (see below), but the function\n * expression is not.\n */\nexport function isFunction(language: string, nd: SyntaxNode): boolean {\n return functionTypes[languageIdToWasmLanguage(language)].has(nd.type);\n}\n\n/**\n * Check if `nd` is a function definition.\n *\n * For languages other than JavaScript, this is the same as checking whether `nd` is a function.\n * For JavaScript, function expressions are _not_ considered function definitions, but declarations\n * and assignments assigning a function expression to a variable are.\n */\nexport function isFunctionDefinition(language: string, nd: SyntaxNode): boolean {\n switch (languageIdToWasmLanguage(language)) {\n case WASMLanguage.Python:\n case WASMLanguage.Go:\n case WASMLanguage.Ruby:\n return isFunction(language, nd);\n case WASMLanguage.JavaScript:\n case WASMLanguage.TypeScript:\n case WASMLanguage.TSX:\n // either it is a stand-alone function declaration\n if (\n nd.type === 'function_declaration' ||\n nd.type === 'generator_function_declaration' ||\n nd.type === 'method_definition'\n )\n return true;\n\n // or a declaration of a function-valued variable\n if (nd.type === 'lexical_declaration' || nd.type === 'variable_declaration') {\n // declarations with multiple declarators (`var x = ..., y = ...`) are unlikely to\n // involve functions in practice, so we make our lives easier and short-circuit\n if (nd.namedChildCount > 1) return false;\n let declarator = nd.namedChild(0);\n // this should never be null, but we check anyway to be safe\n if (declarator == null) return false;\n let init = declarator.namedChild(1);\n return init !== null && isFunction(language, init);\n }\n\n // or an assignment to a function-valued variable\n if (nd.type === 'expression_statement') {\n let expr = nd.namedChild(0);\n if (expr?.type === 'assignment_expression') {\n let rhs = expr.namedChild(1);\n return rhs !== null && isFunction(language, rhs);\n }\n }\n\n return false;\n }\n}\n\n/**\n * Get the first comment in a run of comments preceding `nd`, if any.\n *\n * That is, if `nd` is preceded by a single comment, return that comment. If it is\n * preceded by a sequence of more than one comments (without any intervening non-comment\n * nodes or blank lines), return the first comments in that sequence. Otherwise return `null`.\n *\n * Note that all comments are treated equally; in particular, for JavaScript, no distinction\n * is made between block comments and line comments.\n */\nexport function getFirstPrecedingComment(nd: SyntaxNode): SyntaxNode | null {\n // starting from `nd`, walk backwards until we find a node that is not preceded by a comment\n let cur = nd;\n while (cur.previousSibling?.type === 'comment') {\n let prev = cur.previousSibling;\n // stop if there is an intervening blank line\n if (prev.endPosition.row < cur.startPosition.row - 1) break;\n cur = prev;\n }\n\n // if that node is itself a comment, it is the first one in a run of comments preceding `nd`\n if (cur?.type === 'comment') return cur;\n // otherwise it must be `nd`, so there aren't any comments preceding `nd`\n return null;\n}\n\n/**\n * Get the positions of all function nodes in the given piece of source code.\n */\nexport async function getFunctionPositions(language: string, source: string): Promise {\n const tree = await parseTreeSitter(language, source);\n const results = queryFunctions(language, tree.rootNode);\n const positions = results.map(res => {\n const fn = res.captures.find(c => c.name === 'function')!.node;\n return {\n startIndex: fn.startIndex,\n endIndex: fn.endIndex,\n };\n });\n tree.delete();\n return positions;\n}\n\n/**\n * Very simple type that echo `vscode.Position` (which we cannot use directly in promptlib)\n */\nexport type IPosition = {\n line: number;\n character: number;\n};\n\n/*\nList of queries to run per language to find call sites.\ni.e. if the cursor is inside of the arg list of a function call, get the function name and the offset.\n*/\nconst callSiteQuery: {[language in WASMLanguage]: [string, Query?][]} = {\n python: [\n [\n `(call\n function: [\n (identifier) @caller\n (attribute attribute:(identifier) @caller)\n ]\n arguments: (argument_list) @args\n )`,\n ],\n ],\n javascript: [],\n tsx: [],\n typescript: [],\n go: [],\n ruby: [],\n};\n\n/**\n * If the cursor is inside of the arg list of a function call, get the function name and the offset.\n *\n * For instance `x = foo(\"aasdf\", \"qwer\", bar(1,2,│));` If the cursor is at the position of the `│` then\n * getCallSites returns the name and position of both `foo` and `bar` in that order.\n */\nexport async function getCallSites(docInfo: DocumentInfoWithOffset): Promise<{name: string; position: IPosition}[]> {\n // It is possible that non-WASM languages will get passed to `getCallSite` from `getSymbolDefSnippets`\n // so we need to fail gracefully if that happens.\n if (!(docInfo.languageId in callSiteQuery)) return [];\n\n // TODO consider getting the source only up until the offset (e.g. the offset argument is not needed) and\n // then adding a bunch of parens to the end of the source to make sure that the tree is complete\n // otherwise we won't collect callers that don't have a closing parens\n let offset = docInfo.offset;\n let source = docInfo.source.substring(0, offset);\n // guard against time-consuming parses of very large files\n // TODO & WARNING pre-truncating long files has only been tested (poorly) against python and might not work well for all languages - test each!\n const pretruncateOffset = Math.max(source.length - 5000, 0); // I picked this value arbitrarily - 5000 chars takes ~25ms to parse\n const linesBeforeTruncation = source.substring(0, pretruncateOffset).split('\\n').length - 1;\n offset -= pretruncateOffset;\n source = source.substring(pretruncateOffset);\n // artificially close all open parens, this is because tree-sitter will see `foo(bar(), a` and not consider `foo` a function\n // but if we add a bunch of closing parens then this `foo(bar(), a)` will be interpreted as a function.\n source = source + ')))))';\n let callers: [string, IPosition][] = [];\n\n // Parse the source code just before the cursor position, extract every function call and its arguments\n const tree = await parseTreeSitter(docInfo.languageId, source);\n const queries = callSiteQuery[languageIdToWasmLanguageMapping[docInfo.languageId]];\n const results = innerQuery(queries, tree.rootNode);\n results.forEach((res, resIndex) => {\n let callerName = '';\n let callerLineNo = 0;\n let callerStartChar = 0;\n let argsStartIndex = 0;\n let argsEndIndex = 0;\n // Then, for each function and arg list, get the name and position of the function and the start and end offset of the arg list\n res.captures.forEach((cap, capIndex) => {\n const node = cap.node;\n if (cap.name == 'caller') {\n callerName = source.substring(node.startIndex, node.endIndex);\n callerLineNo = node.startPosition.row + linesBeforeTruncation;\n callerStartChar = node.startPosition.column;\n } else if (cap.name == 'args') {\n argsStartIndex = node.startIndex;\n argsEndIndex = node.endIndex;\n }\n });\n // If the cursor is within the arg list of the function, then add the function name and position to the list of callers\n if (offset >= argsStartIndex && offset <= argsEndIndex) {\n // TODO check at endpoints\n const callerLineCol: IPosition = {line: callerLineNo, character: callerStartChar};\n callers.push([callerName, callerLineCol]); // These are outer first\n }\n });\n tree.delete();\n return callers.map(([name, position]) => ({name, position}));\n}\n","import * as Parser from 'web-tree-sitter';\nimport {\n WASMLanguage,\n isSupportedLanguageId,\n languageIdToWasmLanguage,\n parseTreeSitter,\n queryPythonIsDocstring,\n} from './parse';\n\nexport interface Position {\n line: number; // 0-indexed\n character: number; // 0-indexed\n}\n\nexport interface BlockParser {\n isEmptyBlockStart: (text: string, offset: number) => Promise;\n\n /**\n * Given a document prefix, offset, and a proposed completion, determines how much of the\n * completion to keep in order to \"finish\" the following block when the completion is appended\n * to the document prefix.\n *\n * If there is no such block, or the completion doesn't close the block, returns undefined.\n */\n isBlockBodyFinished: (prefix: string, completion: string, offset: number) => Promise;\n\n /**\n * Given a document text and offset, determines the beginning of current matching node.\n *\n * If there is no such block, returns undefined.\n */\n getNodeStart: (text: string, offset: number) => Promise;\n}\n\nabstract class BaseBlockParser implements BlockParser {\n abstract isEmptyBlockStart(text: string, offset: number): Promise;\n\n constructor(\n protected readonly languageId: string,\n protected readonly nodeMatch: {[parent: string]: string},\n /**\n * A map from node types that have a block or an statement as a child\n * to the field label of the child node that is a block or statement.\n * For example, an if statement in a braced language.\n */\n protected readonly nodeTypesWithBlockOrStmtChild: Map\n ) {}\n\n protected async getNodeMatchAtPosition(\n text: string,\n offset: number,\n cb: (nd: Parser.SyntaxNode) => T\n ): Promise {\n const tree = await parseTreeSitter(this.languageId, text);\n try {\n // TODO:(hponde) It seems that we have an issue if it's at the end of the block:\n // https://github.com/tree-sitter/tree-sitter/issues/407\n const nodeAtPos = tree.rootNode.descendantForIndex(offset);\n\n let nodeToComplete: Parser.SyntaxNode | null = nodeAtPos;\n\n // find target element by looking at parent of cursor node\n // don't stop at node types that may have a block child, but don't actually in this\n // parse tree\n while (nodeToComplete) {\n const blockNodeType = this.nodeMatch[nodeToComplete.type];\n if (blockNodeType) {\n if (!this.nodeTypesWithBlockOrStmtChild.has(nodeToComplete.type)) {\n break;\n }\n\n const fieldLabel = this.nodeTypesWithBlockOrStmtChild.get(nodeToComplete.type)!;\n const childToCheck =\n fieldLabel == ''\n ? nodeToComplete.namedChildren[0]\n : nodeToComplete.childForFieldName(fieldLabel);\n if (childToCheck?.type == blockNodeType) {\n break;\n }\n }\n\n nodeToComplete = nodeToComplete.parent;\n }\n if (!nodeToComplete) {\n // No nodes we're interested in\n return;\n }\n return cb(nodeToComplete);\n } finally {\n tree.delete();\n }\n }\n\n protected getNextBlockAtPosition(\n text: string,\n offset: number,\n cb: (nd: Parser.SyntaxNode) => T\n ): Promise {\n return this.getNodeMatchAtPosition(text, offset, nodeToComplete => {\n // FIXME: childForFieldName always returns null\n // const block = nodeToComplete.childForFieldName(fieldToComplete);\n // Instead, find child nodes of the langauge's nodeMatch type for\n // nodeToComplete.\n // Look in reverse order, in case of nodes with multiple blocks defined,\n // such as try/catch/finally.\n let block = nodeToComplete.children.reverse().find(x => x.type == this.nodeMatch[nodeToComplete.type]);\n if (!block) {\n // child of matching type isn't defined yet\n return;\n }\n\n if (this.languageId == 'python' && block.parent) {\n // handle empty block's parent being the colon (!)\n const parent = block.parent.type == ':' ? block.parent.parent : block.parent;\n\n // tree-sitter handles comments in a weird way, so we need to\n // consume them.\n let nextComment = parent?.nextSibling;\n\n while (nextComment && nextComment.type == 'comment') {\n // next comment is inline at the end of the block\n // see issue: https://github.com/tree-sitter/tree-sitter-python/issues/113\n const commentInline =\n nextComment.startPosition.row == block.endPosition.row &&\n nextComment.startPosition.column >= block.endPosition.column;\n\n // next comment is on subsequent line and indented > parent's indentation\n // see issue: https://github.com/tree-sitter/tree-sitter-python/issues/112\n const commentAtEnd =\n nextComment.startPosition.row > parent!.endPosition.row &&\n nextComment.startPosition.column > parent!.startPosition.column;\n\n if (commentInline || commentAtEnd) {\n block = nextComment;\n nextComment = nextComment.nextSibling;\n } else {\n break;\n }\n }\n }\n\n if (block.endIndex >= block.tree.rootNode.endIndex - 1 && (block.hasError() || block.parent!.hasError())) {\n // TODO:(hponde) improve this logic\n // block is the whole document, and has errors, most likely doc has\n // preceding errors.\n return;\n }\n\n // Return first block if not empty\n return cb(block);\n });\n }\n\n async isBlockBodyFinished(prefix: string, completion: string, offset: number): Promise {\n const solution = (prefix + completion).trimEnd();\n const endIndex = await this.getNextBlockAtPosition(solution, offset, block => block.endIndex);\n if (endIndex === undefined) {\n // no block, not finished yet\n return;\n }\n if (endIndex < solution.length) {\n // descendant block is finished, stop at end of block\n const lengthOfBlock = endIndex - prefix.length;\n return lengthOfBlock > 0 ? lengthOfBlock : undefined;\n }\n }\n\n getNodeStart(text: string, offset: number): Promise {\n const solution = text.trimEnd();\n return this.getNodeMatchAtPosition(solution, offset, block => block.startIndex);\n }\n}\n\nclass RegexBasedBlockParser extends BaseBlockParser {\n constructor(\n languageId: string,\n protected readonly blockEmptyMatch: string,\n private readonly lineMatch: RegExp,\n nodeMatch: {[parent: string]: string},\n nodeTypesWithBlockOrStmtChild: Map\n ) {\n super(languageId, nodeMatch, nodeTypesWithBlockOrStmtChild);\n }\n\n private isBlockStart(line: string): boolean {\n return this.lineMatch.test(line.trimStart());\n }\n\n private async isBlockBodyEmpty(text: string, offset: number): Promise {\n const res = await this.getNextBlockAtPosition(text, offset, block => {\n // strip whitespace and compare with language-defined empty block\n // Note that for Ruby, `block` is the closing `end` token, while for other\n // languages it is the whole block, so we consider the text from the earlier of\n // block.startIndex and offset, all the way up to block.endIndex.\n if (block.startIndex < offset) offset = block.startIndex;\n let blockText = text.substring(offset, block.endIndex).trim();\n if (blockText == '' || blockText.replace(/\\s/g, '') == this.blockEmptyMatch) {\n // block is empty\n return true;\n }\n return false;\n });\n return res === undefined || res;\n }\n\n async isEmptyBlockStart(text: string, offset: number): Promise {\n offset = rewindToNearestNonWs(text, offset);\n return this.isBlockStart(getLineAtOffset(text, offset)) && this.isBlockBodyEmpty(text, offset);\n }\n}\n\nfunction getLineAtOffset(text: string, offset: number): string {\n const prevNewline = text.lastIndexOf('\\n', offset - 1);\n let nextNewline = text.indexOf('\\n', offset);\n if (nextNewline < 0) {\n nextNewline = text.length;\n }\n return text.slice(prevNewline + 1, nextNewline);\n}\n\n/**\n * Returns the cursor position immediately after the nearest non-whitespace\n * character. If every character before offset is whitespace, returns 0.\n */\nfunction rewindToNearestNonWs(text: string, offset: number): number {\n let result = offset;\n while (result > 0 && /\\s/.test(text.charAt(result - 1))) {\n result--;\n }\n return result;\n}\n\n/**\n * If `nd` is only preceded by whitespace on the line where it starts, return that whitespace;\n * otherwise, return undefined. The parameter `source` is the source text from which `nd` was\n * parsed.\n */\nfunction indent(nd: Parser.SyntaxNode, source: string): string | undefined {\n const startIndex = nd.startIndex;\n const lineStart = nd.startIndex - nd.startPosition.column;\n const prefix = source.substring(lineStart, startIndex);\n if (/^\\s*$/.test(prefix)) {\n return prefix;\n }\n return undefined;\n}\n\n/**\n * Check if `snd` is \"outdented\" with respect to `fst`, that is, it starts on a later line, and\n * its indentation is no greater than that of `fst`.\n */\nfunction outdented(fst: Parser.SyntaxNode, snd: Parser.SyntaxNode, source: string): boolean {\n if (snd.startPosition.row <= fst.startPosition.row) {\n return false;\n }\n const fstIndent = indent(fst, source);\n const sndIndent = indent(snd, source);\n return fstIndent !== undefined && sndIndent !== undefined && fstIndent.startsWith(sndIndent);\n}\n\nclass TreeSitterBasedBlockParser extends BaseBlockParser {\n constructor(\n languageId: string,\n nodeMatch: {[parent: string]: string},\n nodeTypesWithBlockOrStmtChild: Map,\n private readonly startKeywords: string[],\n private readonly blockNodeType: string,\n /**\n * The langauge-specific node type of an empty statement, that is,\n * a statement with no text except possibly the statement terminator.\n * For example, `;` is an empty statement in a braced language, but\n * `pass` is not in Python.\n */\n private readonly emptyStatementType: string | null,\n private readonly curlyBraceLanguage: boolean\n ) {\n super(languageId, nodeMatch, nodeTypesWithBlockOrStmtChild);\n }\n\n private isBlockEmpty(block: Parser.SyntaxNode, offset: number): boolean {\n let trimmed = block.text.trim();\n\n if (this.curlyBraceLanguage) {\n if (trimmed.startsWith('{')) {\n trimmed = trimmed.slice(1);\n }\n if (trimmed.endsWith('}')) {\n trimmed = trimmed.slice(0, -1);\n }\n trimmed = trimmed.trim();\n }\n\n if (trimmed.length == 0) {\n return true;\n }\n\n // Python: Consider a block that contains only a docstring empty.\n if (\n this.languageId == 'python' &&\n (block.parent?.type == 'class_definition' || block.parent?.type == 'function_definition') &&\n block.children.length == 1 &&\n queryPythonIsDocstring(block.parent)\n ) {\n return true;\n }\n\n return false;\n }\n\n async isEmptyBlockStart(text: string, offset: number): Promise {\n if (offset > text.length) {\n throw new RangeError('Invalid offset');\n }\n\n // Ensure that the cursor is at the end of a line, ignoring trailing whitespace.\n for (let i = offset; i < text.length; i++) {\n if (text.charAt(i) == '\\n') {\n break;\n } else if (/\\S/.test(text.charAt(i))) {\n return false;\n }\n }\n\n // This lets e.g. \"def foo():\\n█\" give a multiline suggestion.\n offset = rewindToNearestNonWs(text, offset);\n\n const tree = await parseTreeSitter(this.languageId, text);\n try {\n // offset here is the cursor position immediately after a whitespace\n // character, but tree-sitter expects the index of the node to search for.\n // Therefore we adjust the offset when we call into tree-sitter.\n const nodeAtPos = tree.rootNode.descendantForIndex(offset - 1);\n if (nodeAtPos == null) {\n return false;\n }\n\n // Because of rewinding to the previous non-whitespace character, nodeAtPos may be\n // \"}\". That's not a good place to show multline ghost text.\n if (this.curlyBraceLanguage && nodeAtPos.type == '}') {\n return false;\n }\n\n // JS/TS: half open, empty blocks are sometimes parsed as objects\n if (\n (this.languageId == 'javascript' || this.languageId == 'typescript') &&\n nodeAtPos.parent &&\n nodeAtPos.parent.type == 'object' &&\n nodeAtPos.parent.text.trim() == '{'\n ) {\n return true;\n }\n\n // TS: a function_signature/method_signature is a prefix of a\n // function_declaration/method_declaration, so if nodeAtPos is a descendant of one of\n // those node types and the signature looks incomplete, return true\n if (this.languageId == 'typescript') {\n let currNode = nodeAtPos;\n while (currNode.parent) {\n if (currNode.type == 'function_signature' || currNode.type == 'method_signature') {\n // if the next node is outdented, the signature is probably incomplete and\n // TreeSitter may just have done some fanciful error correction, so we'll\n // assume that this is really meant to be an incomplete function\n const next = nodeAtPos.nextSibling;\n if (next && currNode.hasError() && outdented(currNode, next, text)) {\n return true;\n }\n\n // if, on the other hand, there is a semicolon, then the signature is\n // probably complete, and we should not show a multiline suggestion\n const semicolon = currNode.children.find(c => c.type == ';');\n return !semicolon && currNode.endIndex <= offset;\n }\n currNode = currNode.parent;\n }\n }\n\n // Ignoring special cases, there are three situations when we want to return true:\n //\n // 1. nodeAtPos is in a block or a descendant of a block, the parent of the block is one of the node types\n // in this.nodeMatch, and the block is empty.\n // 2. nodeAtPos is somewhere below an ERROR node, and that ERROR node has an anonymous child\n // matching one of the keywords we care about. If that ERROR node also has a block child, the\n // block must be empty.\n // 3. nodeAtPos is somewhere below a node type that we know can contain a block, and the block is either\n // not present or empty.\n\n let errorNode = null;\n let blockNode = null;\n let blockParentNode = null;\n let currNode: Parser.SyntaxNode | null = nodeAtPos;\n while (currNode != null) {\n if (currNode.type == this.blockNodeType) {\n blockNode = currNode;\n break;\n }\n if (this.nodeMatch[currNode.type]) {\n blockParentNode = currNode;\n break;\n }\n if (currNode.type == 'ERROR') {\n errorNode = currNode;\n break;\n }\n currNode = currNode.parent;\n }\n if (blockNode != null) {\n if (!blockNode.parent || !this.nodeMatch[blockNode.parent.type]) {\n return false;\n }\n\n // Python: hack for unclosed docstrings. There's no rhyme or reason to how the actual\n // docstring comments are parsed, but overall the parse tree looks like:\n // function_definition\n // - def\n // - identifier\n // - parameters\n // - :\n // - ERROR with text that starts with \"\"\" or '''\n // - block\n // - junk\n //\n // We do best effort here to detect that we're in an unclosed docstring and return true.\n // Note that this won't work (we won't give a multline suggestion) if the docstring uses single\n // quotes, which is allowed by the language standard but not idiomatic (see PEP 257,\n // Docstring Conventions).\n if (this.languageId == 'python') {\n const prevSibling = blockNode.previousSibling;\n if (\n prevSibling != null &&\n prevSibling.hasError() &&\n (prevSibling.text.startsWith('\"\"\"') || prevSibling.text.startsWith(\"'''\"))\n ) {\n return true;\n }\n }\n\n return this.isBlockEmpty(blockNode, offset);\n }\n if (errorNode != null) {\n // TS: In a module such as \"module 'foo' {\" or internal_module such as \"namespace 'foo' {\"\n // the open brace is parsed as an error node, like so:\n // - expression_statement\n // - [internal_]module\n // - string\n // - ERROR\n if (\n errorNode.previousSibling?.type == 'module' ||\n errorNode.previousSibling?.type == 'internal_module' ||\n errorNode.previousSibling?.type == 'def'\n ) {\n return true;\n }\n\n // Search in reverse order so we get the latest block or keyword node.\n const children = [...errorNode.children].reverse();\n const keyword = children.find(child => this.startKeywords.includes(child.type));\n let block = children.find(child => child.type == this.blockNodeType);\n\n if (keyword) {\n switch (this.languageId) {\n case 'python': {\n // Python: try-except-finally\n // If the cursor is in either \"except\" or \"finally,\" but the try-except-finally isn't finished,\n // nodeAtPos will be parsed as an identifier. If > 4 characters of \"except\" or \"finally\" have been\n // typed, it will be parsed as:\n // ERROR\n // - try\n // - :\n // - ERROR\n // - block\n // - expression_statement\n // - identifier\n //\n // In this case, we have to special-case finding the right block to check whether it's empty.\n if (keyword.type == 'try' && nodeAtPos.type == 'identifier' && nodeAtPos.text.length > 4) {\n block = children\n .find(child => child.hasError())\n ?.children.find(child => child.type == 'block');\n }\n\n // Python: sometimes nodes that are morally part of a block are parsed as statements\n // that are all children of an ERROR node. Detect this by looking for \":\" and inspecting\n // its nextSibling. Skip over \":\" inside parentheses because those could be part of a\n // typed parameter.\n let colonNode;\n let parenCount = 0;\n for (const child of errorNode.children) {\n if (child.type == ':' && parenCount == 0) {\n colonNode = child;\n break;\n }\n if (child.type == '(') {\n parenCount += 1;\n }\n if (child.type == ')') {\n parenCount -= 1;\n }\n }\n if (colonNode && keyword.endIndex <= colonNode.startIndex && colonNode.nextSibling) {\n // horrible hack to handle unfinished docstrings :(\n if (keyword.type == 'def') {\n const sibling = colonNode.nextSibling;\n if (sibling.type == '\"' || sibling.type == \"'\") {\n return true;\n }\n if (sibling.type == 'ERROR' && (sibling.text == '\"\"\"' || sibling.text == \"'''\")) {\n return true;\n }\n }\n return false;\n }\n\n break;\n }\n case 'javascript': {\n // JS: method definition within a class, e.g. \"class C { foo()\"\n const formalParameters = children.find(child => child.type == 'formal_parameters');\n if (keyword.type == 'class' && formalParameters) {\n return true;\n }\n\n // JS: Don't mistake a half-open curly brace after a keyword under an error node for an empty\n // block. If it has a nextSibling, then it's not empty. e.g. in \"do {\\n\\t;█\", the \";\" is an\n // empty_statement and the nextSibling of the \"{\".\n const leftCurlyBrace = children.find(child => child.type == '{');\n if (\n leftCurlyBrace &&\n leftCurlyBrace.startIndex > keyword.endIndex &&\n leftCurlyBrace.nextSibling != null\n ) {\n return false;\n }\n\n // JS: do-while: don't give a multline suggestion after the \"while\" keyword\n const doNode = children.find(child => child.type == 'do');\n if (doNode && keyword.type == 'while') {\n return false;\n }\n\n // JS: In an arrow function, if there is a next sibling of the arrow and it's not an open brace, we're not in a\n // block context and we should return false.\n if (keyword.type == '=>' && keyword.nextSibling && keyword.nextSibling.type != '{') {\n return false;\n }\n\n break;\n }\n case 'typescript': {\n // TS: Don't mistake a half-open curly brace after a keyword under an error node for an empty\n // block. If it has a nextSibling, then it's not empty. e.g. in \"do {\\n\\t;█\", the \";\" is an\n // empty_statement and the nextSibling of the \"{\".\n const leftCurlyBrace = children.find(child => child.type == '{');\n if (\n leftCurlyBrace &&\n leftCurlyBrace.startIndex > keyword.endIndex &&\n leftCurlyBrace.nextSibling != null\n ) {\n return false;\n }\n\n // TS: do-while: don't give a multline suggestion after the \"while\" keyword\n const doNode = children.find(child => child.type == 'do');\n if (doNode && keyword.type == 'while') {\n return false;\n }\n\n // TS: In an arrow function, if there is a next sibling of the arrow and it's not an open brace, we're not in a\n // block context and we should return false.\n if (keyword.type == '=>' && keyword.nextSibling && keyword.nextSibling.type != '{') {\n return false;\n }\n\n break;\n }\n }\n\n if (block && block.startIndex > keyword.endIndex) {\n return this.isBlockEmpty(block, offset);\n }\n return true;\n }\n }\n if (blockParentNode != null) {\n const expectedType = this.nodeMatch[blockParentNode.type];\n const block = blockParentNode.children\n .slice()\n .reverse()\n .find(x => x.type == expectedType);\n if (!block) {\n // Some node types have a child that is either a block or a statement, e.g. \"if (foo)\".\n // If the user has started typing a non-block statement, then this is not the start of an\n // empty block.\n if (this.nodeTypesWithBlockOrStmtChild.has(blockParentNode.type)) {\n const fieldLabel = this.nodeTypesWithBlockOrStmtChild.get(blockParentNode.type)!;\n const child =\n fieldLabel == ''\n ? blockParentNode.children[0]\n : blockParentNode.childForFieldName(fieldLabel);\n if (child && child.type != this.blockNodeType && child.type != this.emptyStatementType) {\n return false;\n }\n }\n\n return true;\n } else {\n return this.isBlockEmpty(block, offset);\n }\n }\n\n return false;\n } finally {\n tree.delete();\n }\n }\n}\n\nconst wasmLanguageToBlockParser: {[languageId in WASMLanguage]: BlockParser} = {\n python: new TreeSitterBasedBlockParser(\n /* languageId */ 'python',\n /* nodeMatch */ {\n // Generated with script/tree-sitter-super-types tree-sitter-python block\n class_definition: 'block',\n elif_clause: 'block',\n else_clause: 'block',\n except_clause: 'block',\n finally_clause: 'block',\n for_statement: 'block',\n function_definition: 'block',\n if_statement: 'block',\n try_statement: 'block',\n while_statement: 'block',\n with_statement: 'block',\n },\n /* nodeTypesWithBlockOrStmtChild */ new Map(),\n /* startKeywords */ ['def', 'class', 'if', 'elif', 'else', 'for', 'while', 'try', 'except', 'finally', 'with'],\n /* blockNodeType */ 'block',\n /* emptyStatementType */ null,\n /* curlyBraceLanguage */ false\n ),\n javascript: new TreeSitterBasedBlockParser(\n /* languageId */ 'javascript',\n /* nodeMatch */ {\n // Generated with script/tree-sitter-super-types tree-sitter-javascript statement_block\n arrow_function: 'statement_block',\n catch_clause: 'statement_block',\n do_statement: 'statement_block',\n else_clause: 'statement_block',\n finally_clause: 'statement_block',\n for_in_statement: 'statement_block',\n for_statement: 'statement_block',\n function: 'statement_block',\n function_declaration: 'statement_block',\n generator_function: 'statement_block',\n generator_function_declaration: 'statement_block',\n if_statement: 'statement_block',\n method_definition: 'statement_block',\n try_statement: 'statement_block',\n while_statement: 'statement_block',\n with_statement: 'statement_block',\n // Generated with script/tree-sitter-super-types tree-sitter-javascript class_body\n class: 'class_body',\n class_declaration: 'class_body',\n },\n /* nodeTypesWithBlockOrStmtChild */ new Map([\n ['arrow_function', 'body'],\n ['do_statement', 'body'],\n ['else_clause', ''],\n ['for_in_statement', 'body'],\n ['for_statement', 'body'],\n ['if_statement', 'consequence'],\n ['while_statement', 'body'],\n ['with_statement', 'body'],\n ]),\n /* startKeywords */ [\n '=>',\n 'try',\n 'catch',\n 'finally',\n 'do',\n 'for',\n 'if',\n 'else',\n 'while',\n 'with',\n 'function',\n 'function*',\n 'class',\n ],\n /* blockNodeType */ 'statement_block',\n /* emptyStatementType */ 'empty_statement',\n /* curlyBraceLanguage */ true\n ),\n typescript: new TreeSitterBasedBlockParser(\n /* languageId */ 'typescript',\n /* nodeMatch */ {\n // Generated with script/tree-sitter-super-types tree-sitter-typescript/typescript statement_block\n ambient_declaration: 'statement_block',\n arrow_function: 'statement_block',\n catch_clause: 'statement_block',\n do_statement: 'statement_block',\n else_clause: 'statement_block',\n finally_clause: 'statement_block',\n for_in_statement: 'statement_block',\n for_statement: 'statement_block',\n function: 'statement_block',\n function_declaration: 'statement_block',\n generator_function: 'statement_block',\n generator_function_declaration: 'statement_block',\n if_statement: 'statement_block',\n internal_module: 'statement_block',\n method_definition: 'statement_block',\n module: 'statement_block',\n try_statement: 'statement_block',\n while_statement: 'statement_block',\n // Generated with script/tree-sitter-super-types tree-sitter-typescript/typescript class_body\n abstract_class_declaration: 'class_body',\n class: 'class_body',\n class_declaration: 'class_body',\n },\n /* nodeTypesWithBlockOrStmtChild */ new Map([\n ['arrow_function', 'body'],\n ['do_statement', 'body'],\n ['else_clause', ''],\n ['for_in_statement', 'body'],\n ['for_statement', 'body'],\n ['if_statement', 'consequence'],\n ['while_statement', 'body'],\n ['with_statement', 'body'],\n ]),\n /* startKeywords */ [\n 'declare',\n '=>',\n 'try',\n 'catch',\n 'finally',\n 'do',\n 'for',\n 'if',\n 'else',\n 'while',\n 'with',\n 'function',\n 'function*',\n 'class',\n ],\n /* blockNodeType */ 'statement_block',\n /* emptyStatementType */ 'empty_statement',\n /* curlyBraceLanguage */ true\n ),\n tsx: new TreeSitterBasedBlockParser(\n /* languageId */ 'typescriptreact',\n /* nodeMatch */ {\n // Generated with script/tree-sitter-super-types tree-sitter-typescript/typescript statement_block\n ambient_declaration: 'statement_block',\n arrow_function: 'statement_block',\n catch_clause: 'statement_block',\n do_statement: 'statement_block',\n else_clause: 'statement_block',\n finally_clause: 'statement_block',\n for_in_statement: 'statement_block',\n for_statement: 'statement_block',\n function: 'statement_block',\n function_declaration: 'statement_block',\n generator_function: 'statement_block',\n generator_function_declaration: 'statement_block',\n if_statement: 'statement_block',\n internal_module: 'statement_block',\n method_definition: 'statement_block',\n module: 'statement_block',\n try_statement: 'statement_block',\n while_statement: 'statement_block',\n // Generated with script/tree-sitter-super-types tree-sitter-typescript/typescript class_body\n abstract_class_declaration: 'class_body',\n class: 'class_body',\n class_declaration: 'class_body',\n },\n /* nodeTypesWithBlockOrStmtChild */ new Map([\n ['arrow_function', 'body'],\n ['do_statement', 'body'],\n ['else_clause', ''],\n ['for_in_statement', 'body'],\n ['for_statement', 'body'],\n ['if_statement', 'consequence'],\n ['while_statement', 'body'],\n ['with_statement', 'body'],\n ]),\n /* startKeywords */ [\n 'declare',\n '=>',\n 'try',\n 'catch',\n 'finally',\n 'do',\n 'for',\n 'if',\n 'else',\n 'while',\n 'with',\n 'function',\n 'function*',\n 'class',\n ],\n /* blockNodeType */ 'statement_block',\n /* emptyStatementType */ 'empty_statement',\n /* curlyBraceLanguage */ true\n ),\n go: new RegexBasedBlockParser(\n /* languageId */ 'go',\n /* blockEmptyMatch */ '{}',\n /* lineMatch */ /\\b(func|if|else|for)\\b/,\n /* nodeMatch */ {\n // Generated with script/tree-sitter-super-types tree-sitter-go block\n communication_case: 'block',\n default_case: 'block',\n expression_case: 'block',\n for_statement: 'block',\n func_literal: 'block',\n function_declaration: 'block',\n if_statement: 'block',\n labeled_statement: 'block',\n method_declaration: 'block',\n type_case: 'block',\n },\n /* nodeTypesWithBlockOrStmtChild */ new Map() // Go always requires braces\n ),\n ruby: new RegexBasedBlockParser(\n /* languageId */ 'ruby',\n /* blockEmptyMatch */ 'end',\n // Regex \\b matches word boundaries - `->{}` has no word boundary.\n /* lineMatch */ /\\b(BEGIN|END|case|class|def|do|else|elsif|for|if|module|unless|until|while)\\b|->/,\n /* nodeMatch */ {\n // Ruby works differently from other languages because there is no\n // block-level node, instead we use the literal 'end' node to\n // represent the end of a block.\n begin_block: '}',\n block: '}',\n end_block: '}',\n lambda: 'block',\n for: 'do',\n until: 'do',\n while: 'do',\n case: 'end',\n do: 'end',\n if: 'end',\n method: 'end',\n module: 'end',\n unless: 'end',\n do_block: 'end',\n },\n // TODO(eaftan): Scour Ruby grammar for these\n /* nodeTypesWithBlockOrStmtChild */ new Map()\n ),\n};\n\nexport function getBlockParser(languageId: string): BlockParser {\n return wasmLanguageToBlockParser[languageIdToWasmLanguage(languageId)];\n}\n\nexport async function isEmptyBlockStart(languageId: string, text: string, offset: number) {\n if (!isSupportedLanguageId(languageId)) {\n return false;\n }\n return getBlockParser(languageId).isEmptyBlockStart(text, offset);\n}\n\nexport async function isBlockBodyFinished(languageId: string, prefix: string, completion: string, offset: number) {\n if (!isSupportedLanguageId(languageId)) {\n return undefined;\n }\n return getBlockParser(languageId).isBlockBodyFinished(prefix, completion, offset);\n}\n\nexport async function getNodeStart(languageId: string, text: string, offset: number) {\n if (!isSupportedLanguageId(languageId)) {\n return;\n }\n return getBlockParser(languageId).getNodeStart(text, offset);\n}\n","import {FileSystem} from './fileSystem';\nimport {getLanguageMarker, getPathMarker} from './languageMarker';\nimport {extractLocalImportContext} from './localImportContext';\nimport {getSiblingFunctionStart} from './siblingFunctions';\nimport {CursorSnippetsPickingStrategy} from './snippetInclusion/cursorMatching';\nimport {NeighboringSnippetType, NeighboringTabsOption, getNeighborSnippets} from './snippetInclusion/neighboringFiles';\nimport {\n SingleSnippetProviderOptions,\n SnippetProviderOptions,\n SnippetProviderType,\n SnippetWithProviderInfo,\n processSnippetsForWishlist,\n} from './snippetInclusion/snippets';\nimport {findEditDistanceScore} from './suffixMatchCriteria';\nimport {TokenizerName, getTokenizer} from './tokenization';\nimport {\n Priorities,\n PromptBackground,\n PromptChoices,\n PromptElementKind,\n PromptElementRanges,\n PromptWishlist,\n} from './wishlist';\n/** The 1-entry cache for the suffix */\nlet cachedSuffix: {text: string; tokens: number[]} = {text: '', tokens: []};\n\n/**\n * Re. cached suffix, see the discussion in the PR: https://github.com/github/copilot-client/pull/2171\n * In an earlier version of the PR, we had declared variables cacheReusedCount,cacheReusablePromptTooLong\n * to track how often\n * (a) the cache is reused (cacheReusedCount) and\n * (b) when reusable, does the cache with the new prompt become too\n * long to be usable? (cacheReusablePromptTooLong)\n *\n * These are relevant to track in telemetry, and we will\n * implement the telemetry logs for these variables in a later iteration.\n * We have removed these variables in the PR since we were console.log'ging\n * it earlier, and that is not the preferred route.\n */\n\n/** The maximum number of tokens in a prompt. */\nexport const MAX_PROMPT_LENGTH = 1500;\n\n/** The maximum number of tokens that is used for calculate edit distance. */\nexport const MAX_EDIT_DISTANCE_LENGTH = 50;\n\n/**\n * The number of tokens to reserve for prefix + suffix encoding.\n * This value comes from hponde.\n */\nexport const TOKENS_RESERVED_FOR_SUFFIX_ENCODING = 5;\n\n/**\n * The maximal number of the final snippets to return.\n */\nexport const DEFAULT_NUM_OF_SNIPPETS: number = 4;\n\n/**\n * Information about a document, not including the offset.\n */\nexport interface DocumentInfo {\n /** The file path of the document relative to its containing project or folder, if known. */\n relativePath?: string;\n /** The URI of the document. We can't pass URI class instances directly due to limitations of passing objects to the worker thread. */\n uri: string;\n /** The source text of the document. */\n source: string;\n /** The language identifier of the document. */\n languageId: string;\n}\n\n/**\n * Information about a document, including an offset corresponding to\n * the cursor position.\n */\nexport interface DocumentInfoWithOffset extends DocumentInfo {\n /** The offset in the document where we want the completion (0-indexed, between characters). */\n offset: number;\n}\n\nexport enum LanguageMarkerOption {\n NoMarker = 'nomarker',\n Top = 'top', // Emulate that the first line of document is the language marker\n Always = 'always', // Always visible\n}\n\nexport enum PathMarkerOption {\n NoMarker = 'nomarker',\n Top = 'top',\n Always = 'always',\n}\n\nexport enum SnippetPositionOption {\n /** Include neighbors towards the beginning of the file */\n TopOfText = 'top',\n /** Include neighbors directly above the line where the cursor is */\n DirectlyAboveCursor = 'aboveCursor',\n /**\n * Include neighbors directly after the siblig insertion point\n * for languages that have one (above cursor otherwise)\n */\n AfterSiblings = 'afterSiblings',\n}\n\nexport enum SnippetSelectionOption {\n /** Select the closest match.*/\n BestMatch = 'bestMatch',\n /** Select K closest match. */\n TopK = 'topK',\n}\n\nexport enum LocalImportContextOption {\n /** Don't pull in any context for local imports. */\n NoContext = 'nocontext',\n /** Pull in declarations referenced by local imports. */\n Declarations = 'declarations',\n}\n\nexport enum LineEndingOptions {\n ConvertToUnix = 'unix', // convert \"\\r\\n\" and \"\\r\" line endings to the more token-efficient \\n\n KeepOriginal = 'keep', // keep the original line endings (whether \\r\\n or \\n)\n}\n\nexport enum SuffixOption {\n /** Do not include a suffix in the prompt. */\n None = 'none',\n /** Allocate 15% of the available tokens to the suffix. */\n FifteenPercent = 'fifteenPercent',\n}\n\nexport enum SuffixMatchOption {\n /** The method to use to compare suffix against cached suffix */\n /** The suffix and cached suffix are to be equal */\n Equal = 'equal',\n /** Use Edit distance */\n Levenshtein = 'levenshteineditdistance',\n}\n\nexport enum SuffixStartMode {\n /** start from cursor by default */\n Cursor = 'cursor',\n /** start from cursor and trim start */\n CursorTrimStart = 'cursortrimstart',\n /** start from the first sibling function block */\n SiblingBlock = 'siblingblock',\n /** start from the first sibling function block and trim the leading whitespaces */\n SiblingBlockTrimStart = 'siblingblocktrimstart',\n}\n\nexport class PromptOptions {\n /** The maximum prompt length in tokens */\n readonly maxPromptLength: number = MAX_PROMPT_LENGTH;\n /** Whether to include a language marker in the prompt */\n readonly languageMarker: LanguageMarkerOption = LanguageMarkerOption.Top;\n /** Whether to include a path marker in the prompt */\n readonly pathMarker: PathMarkerOption = PathMarkerOption.Top;\n /** Whether to pull in context for local imports */\n readonly localImportContext: LocalImportContextOption = LocalImportContextOption.Declarations;\n /** Where to include the neighboring tabs info */\n readonly snippetPosition: SnippetPositionOption = SnippetPositionOption.TopOfText;\n /** The number of snippets to include */\n readonly numberOfSnippets: number = DEFAULT_NUM_OF_SNIPPETS;\n /** Options for each snippet provider */\n readonly snippetProviderOptions: SnippetProviderOptions = {\n // This normalization ensures that neighboring tabs is always scored\n // above retrieved snippets:\n // - neighboring tabs get positive scores, higher is better\n // - retrieved snippets become negative scores, less negative is better\n 'neighboring-tabs': {\n normalizationFunction: 'affine',\n normalizationParams: [1.0, 0.0], // identity\n },\n retrieval: {\n normalizationFunction: 'affine',\n normalizationParams: [-1.0, 0.0],\n },\n 'symbol-def': {\n normalizationFunction: 'affine',\n normalizationParams: [1.0, 0.0],\n reservedSnippetCount: 2, // They are quite short, get two most outer caller functions\n },\n };\n /** Whether to include content from neighboring tabs in the prompt */\n readonly neighboringTabs: NeighboringTabsOption = NeighboringTabsOption.Eager;\n /** The type of snippets that neighboring tabs should extract */\n readonly neighboringSnippetTypes: NeighboringSnippetType = NeighboringSnippetType.NeighboringSnippets;\n /** Minimum length for matching snippet in neighboring tabs (only used for IndentationMatcher) */\n readonly indentationMinLength?: number;\n /** Maximum length for matching snippet in neighboring tabs (only used for IndentationMatcher) */\n readonly indentationMaxLength?: number;\n /** Whether to normalize line endings in the prompt */\n readonly lineEnding: LineEndingOptions = LineEndingOptions.ConvertToUnix;\n /** The percent of `maxPromptLength` to reserve for the suffix */\n readonly suffixPercent: number = 0;\n /** The percent of `maxPromptLength` to reserve for snippets */\n readonly snippetPercent: number = 0;\n /** The start mode to get suffix */\n readonly suffixStartMode: SuffixStartMode = SuffixStartMode.Cursor;\n /** TokenizerName used for prompt generation */\n readonly tokenizerName: TokenizerName = TokenizerName.cushman001;\n /** The threshold (in percent) for declaring match of new suffix with existing suffix */\n readonly suffixMatchThreshold: number = 0;\n /** The criteria to use for matching suffix with cachedSuffix, this is the percentage number*/\n readonly suffixMatchCriteria: SuffixMatchOption = SuffixMatchOption.Levenshtein;\n /** Selection options */\n readonly snippetSelection?: SnippetSelectionOption;\n /** The number of snippets to select */\n readonly snippetSelectionK?: number;\n /** The threshold (as int) of length of the suffix only beyond which we will construct FIM requests */\n readonly fimSuffixLengthThreshold: number = 0;\n /** Whether the fix for getCursorContext is active. */\n readonly cursorContextFix: boolean = false;\n /** How to pick snippets for CursorHistoryMatcher */\n readonly cursorSnippetsPickingStrategy: CursorSnippetsPickingStrategy = CursorSnippetsPickingStrategy.CursorJaccard;\n\n constructor(readonly fs: FileSystem, options?: PartialPromptOptions) {\n if (options) {\n const selectionValue = options?.snippetSelection;\n if (selectionValue && !Object.values(SnippetSelectionOption).includes(selectionValue)) {\n throw new Error(`Invalid value for snippetSelection: ${selectionValue}`);\n }\n for (const key in options) {\n if (key !== 'snippetProviderOptions') {\n // Note: this should really be improved so that the type\n // system can statically prove that this won't blow up in\n // run time (it will only do so if somewhat abused, right\n // now, to be fair). For now, we have a @ts-ignore.\n // @ts-ignore\n this[key] = options[key];\n } else {\n // key === 'snippetProviderOptions'\n // For each provider, merge the options\n const newOptions = options.snippetProviderOptions || {};\n let provider: SnippetProviderType;\n for (provider in newOptions) {\n const providerOptions = newOptions[provider];\n if (providerOptions) {\n this.snippetProviderOptions[provider] = {\n ...this.snippetProviderOptions[provider],\n ...providerOptions,\n };\n }\n }\n }\n }\n }\n\n if (this.suffixPercent < 0 || this.suffixPercent > 100) {\n throw new Error(`suffixPercent must be between 0 and 100, but was ${this.suffixPercent}`);\n }\n\n if (this.snippetPercent < 0 || this.snippetPercent > 100) {\n throw new Error(`snippetPercent must be between 0 and 100, but was ${this.snippetPercent}`);\n }\n\n if (this.suffixMatchThreshold < 0 || this.suffixMatchThreshold > 100) {\n throw new Error(`suffixMatchThreshold must be at between 0 and 100, but was ${this.suffixMatchThreshold}`);\n }\n\n // the threshold being -1 indicates we are not using this thresholding for the suffixes.\n if (this.fimSuffixLengthThreshold < -1) {\n throw new Error(`fimSuffixLengthThreshold must be at least -1, but was ${this.fimSuffixLengthThreshold}`);\n }\n\n if (this.indentationMinLength !== undefined && this.indentationMaxLength !== undefined) {\n if (this.indentationMinLength > this.indentationMaxLength) {\n throw new Error(\n `indentationMinLength must be less than or equal to indentationMaxLength, but was ${this.indentationMinLength} and ${this.indentationMaxLength}`\n );\n }\n if (this.indentationMinLength < 0) {\n throw new Error(\n `indentationMinLength must be greater than or equal to zero but was ${this.indentationMinLength}`\n );\n }\n }\n\n if (this.snippetSelection === SnippetSelectionOption.TopK && this.snippetSelectionK === undefined) {\n throw new Error('snippetSelectionK must be defined.');\n }\n\n if (\n this.snippetSelection === SnippetSelectionOption.TopK &&\n this.snippetSelectionK &&\n this.snippetSelectionK <= 0\n ) {\n throw new Error(`snippetSelectionK must be greater than 0, but was ${this.snippetSelectionK}`);\n }\n }\n}\n\n/**\n * This type is used to represent options that may be set by the caller, and\n * which will be completed to a {@link PromptOptions} object by filling with the\n * default options.\n *\n * The invocation is complicated by snippet provider options which should be\n * allowed to only set some of the options on some of the providers.\n */\nexport type PartialPromptOptions = Partial> & {\n snippetProviderOptions?: Partial>>;\n};\n\nexport interface PromptInfo {\n prefix: string; // The prefix text\n suffix: string; // The suffix text\n prefixLength: number; // The length of the prefix in tokens\n suffixLength: number; // The length of the suffix in tokens\n promptChoices: PromptChoices; // Which choices were made when constructing the prompt\n promptBackground: PromptBackground; // All the prompt elements information when constructing the prompt\n promptElementRanges: PromptElementRanges; // Character ranges of prompt elements in the prompt\n}\n\n/**\n * A map that normalises common aliases of languageIds.\n */\nconst languageNormalizationMap: {[language: string]: string} = {\n javascriptreact: 'javascript',\n jsx: 'javascript',\n typescriptreact: 'typescript',\n jade: 'pug',\n cshtml: 'razor',\n};\n\n/**\n * Return a normalized form of a language id, by lower casing and combining\n * certain languageId's that are not considered distinct by promptlib.\n */\nexport function normalizeLanguageId(languageId: string): string {\n languageId = languageId.toLowerCase();\n return languageNormalizationMap[languageId] ?? languageId;\n}\n\n/**\n * Appends a new line to a string if it does not already end with one.\n *\n * @param str String to append\n *\n * @returns A string with a new line escape character at the end.\n */\nexport function newLineEnded(str: string): string {\n return str === '' || str.endsWith('\\n') ? str : str + '\\n';\n}\n\n/**\n * Constructs a prompt to pass to the OpenAI API.\n *\n * @remarks\n * The current implementation does the simplest thing possible: It estimates the number of\n * characters that will fit within the maximum length of a prompt in tokens, then returns a\n * substring of doc that starts at some reasonable index and ends at offset, such that\n * (end - start) <= estimated_length.\n *\n * This will change in the future.\n *\n * @param doc - A DocumentInfoWithOffset\n * @param options - A PromptOptions which controls the prompt crafting behaviour.\n * @param neighbors - A list of neighboring documents, e.g., documents open in other\n * editor tabs.\n * @param snippets - A list of snippets with scores and provider information\n * to (potentially) include in the prompt.\n * @param lineCursorHistory - A The first key is the file name, and the second key\n * is the line number, the value is the number of cursor\n * focused.\n *\n * @returns A dictionary containing the prompt to pass to the OpenAI API and the\n * resulting prompt length in tokens.\n */\nexport async function getPrompt(\n fileSystem: FileSystem,\n doc: DocumentInfoWithOffset,\n options: PartialPromptOptions = {},\n neighbors: DocumentInfo[] = [],\n snippets: SnippetWithProviderInfo[] = [],\n lineCursorHistory?: Map>\n): Promise {\n const completeOptions = new PromptOptions(fileSystem, options);\n\n const tokenizer = getTokenizer(completeOptions.tokenizerName);\n\n let useCachedSuffix = false;\n\n const {source, offset} = doc;\n if (offset < 0 || offset > source.length) {\n throw new Error(`Offset ${offset} is out of range.`);\n }\n doc.languageId = normalizeLanguageId(doc.languageId);\n\n // Make explicit the priorities implied by the different options\n const priorities = new Priorities();\n const directContextPriority = priorities.justBelow(Priorities.TOP);\n const languageMarkerPriority =\n completeOptions.languageMarker === LanguageMarkerOption.Always\n ? priorities.justBelow(Priorities.TOP)\n : priorities.justBelow(directContextPriority);\n const pathMarkerPriority =\n completeOptions.pathMarker === PathMarkerOption.Always\n ? priorities.justBelow(Priorities.TOP)\n : priorities.justBelow(directContextPriority);\n const localImportContextPriority = priorities.justBelow(directContextPriority);\n // There are two priorities for snippets: one for snippets that are\n // within the token budget defined by `snippetPercent` and one that are\n // outside of the token budget. The former are given a higher priority\n // when assembling the prompt, but the lower priority ones are still\n // included if there is space.\n const lowSnippetPriority = priorities.justBelow(localImportContextPriority);\n const highSnippetPriority = priorities.justAbove(directContextPriority);\n\n // The wishlist keeps track of what we would like to include in the prompt\n const promptWishlist = new PromptWishlist(tokenizer, completeOptions.lineEnding);\n\n let languageMarkerLine: number | undefined;\n if (completeOptions.languageMarker !== LanguageMarkerOption.NoMarker) {\n const languageMarker = newLineEnded(getLanguageMarker(doc));\n languageMarkerLine = promptWishlist.append(\n languageMarker,\n PromptElementKind.LanguageMarker,\n languageMarkerPriority\n );\n }\n\n let pathMarkerLine: number | undefined;\n if (completeOptions.pathMarker !== PathMarkerOption.NoMarker) {\n const pathMarker = newLineEnded(getPathMarker(doc));\n if (pathMarker.length > 0) {\n // not just newline\n pathMarkerLine = promptWishlist.append(pathMarker, PromptElementKind.PathMarker, pathMarkerPriority);\n }\n }\n\n // imports get inserted after the language / path markers, but before anything from the file itself\n if (completeOptions.localImportContext !== LocalImportContextOption.NoContext) {\n for (const localImportContext of await extractLocalImportContext(doc, completeOptions.fs)) {\n promptWishlist.append(\n newLineEnded(localImportContext),\n PromptElementKind.ImportedFile,\n localImportContextPriority\n );\n }\n }\n\n // Get neighbor snippets and combine with externally provided snippets.\n const neighborSnippets =\n completeOptions.neighboringTabs === NeighboringTabsOption.None\n ? []\n : neighbors.length === 0\n ? []\n : await getNeighborSnippets(\n doc,\n neighbors,\n completeOptions.neighboringSnippetTypes,\n completeOptions.neighboringTabs,\n completeOptions.cursorContextFix,\n completeOptions.indentationMinLength,\n completeOptions.indentationMaxLength,\n completeOptions.snippetSelection,\n completeOptions.snippetSelectionK,\n lineCursorHistory,\n completeOptions.cursorSnippetsPickingStrategy\n );\n const allSnippets = [...snippets, ...neighborSnippets];\n\n /** Deferred function to add the prepared snippets to the wishlist at\n * the location at that points\n */\n function addSnippetsNow(): void {\n // assign priorities based on budget\n const budget = Math.round((completeOptions.snippetPercent / 100.0) * completeOptions.maxPromptLength);\n const processedSnippets = processSnippetsForWishlist(\n allSnippets,\n doc.languageId,\n tokenizer,\n completeOptions.snippetProviderOptions,\n {priorities, low: lowSnippetPriority, high: highSnippetPriority},\n completeOptions.numberOfSnippets,\n budget\n );\n // add to wishlist\n processedSnippets.forEach(snippet => {\n // TODO: this should be cleaned up https://github.com/github/copilot-client/issues/3303\n let kind = PromptElementKind.SimilarFile;\n if (snippet.provider === SnippetProviderType.Retrieval) {\n kind = PromptElementKind.RetrievalSnippet;\n } else if (snippet.provider == SnippetProviderType.SymbolDef) {\n kind = PromptElementKind.SymbolDefinition;\n }\n promptWishlist.append(\n snippet.announcedSnippet,\n kind,\n snippet.priority,\n snippet.tokens,\n snippet.normalizedScore\n );\n });\n }\n\n if (completeOptions.snippetPosition === SnippetPositionOption.TopOfText) {\n addSnippetsNow();\n }\n\n /** The ids of lines of BeforeCursor elements in the promptlib */\n const source_lines: number[] = [];\n let directContext: string | undefined;\n directContext = source.substring(0, offset);\n\n if (completeOptions.snippetPosition === SnippetPositionOption.DirectlyAboveCursor) {\n // first add all lines from directContext except the current partial one (if there is one)\n const lastLineStart = directContext.lastIndexOf('\\n') + 1; // 0 if no newline\n const directContextBeforePartialLastLine = directContext.substring(0, lastLineStart);\n const partialLastLine = directContext.substring(lastLineStart); // may be \"\" if none\n promptWishlist\n .appendLineForLine(\n directContextBeforePartialLastLine,\n PromptElementKind.BeforeCursor,\n directContextPriority\n )\n .forEach(id => source_lines.push(id));\n addSnippetsNow();\n // then add the partial last line, if it's not empty\n if (partialLastLine.length > 0) {\n source_lines.push(\n promptWishlist.append(partialLastLine, PromptElementKind.AfterCursor, directContextPriority)\n );\n // note that the second-to-last line requires the last line, or it makes no sense\n if (source_lines.length > 1) {\n promptWishlist.require(source_lines[source_lines.length - 2], source_lines[source_lines.length - 1]);\n }\n }\n } else {\n promptWishlist\n .appendLineForLine(directContext, PromptElementKind.BeforeCursor, directContextPriority)\n .forEach(id => source_lines.push(id));\n }\n\n // the marker options `Top` intend to simulate the file beginning with the markers\n // so the markers should depend on the first line of source code --\n // if that is missing, so should they be\n if (\n LanguageMarkerOption.Top === completeOptions.languageMarker &&\n source_lines.length > 0 &&\n languageMarkerLine !== undefined\n ) {\n promptWishlist.require(languageMarkerLine, source_lines[0]);\n }\n if (\n PathMarkerOption.Top === completeOptions.pathMarker &&\n source_lines.length > 0 &&\n pathMarkerLine !== undefined\n ) {\n languageMarkerLine\n ? promptWishlist.require(pathMarkerLine, languageMarkerLine)\n : promptWishlist.require(pathMarkerLine, source_lines[0]);\n }\n\n // Language markers are not necessary if the pathmarker already indicates extension\n if (languageMarkerLine !== undefined && pathMarkerLine !== undefined) {\n promptWishlist.exclude(pathMarkerLine, languageMarkerLine);\n }\n\n let actualSuffix = source.slice(offset);\n\n if (completeOptions.suffixPercent === 0 || actualSuffix.length <= completeOptions.fimSuffixLengthThreshold) {\n return promptWishlist.fulfill(completeOptions.maxPromptLength);\n } else {\n let offset = doc.offset;\n if (\n completeOptions.suffixStartMode !== SuffixStartMode.Cursor &&\n completeOptions.suffixStartMode !== SuffixStartMode.CursorTrimStart\n ) {\n offset = await getSiblingFunctionStart(doc);\n }\n\n // First, construct prefix using the wishlist.\n const availableTokens = completeOptions.maxPromptLength - TOKENS_RESERVED_FOR_SUFFIX_ENCODING;\n let prefixTargetTokens = Math.floor((availableTokens * (100 - completeOptions.suffixPercent)) / 100);\n let promptInfo = promptWishlist.fulfill(prefixTargetTokens);\n\n // Then construct suffix using the remaining tokens. The prefix/wishlist computation usually\n // does not consume all the available tokens, so we reallocate any remaining to the suffix.\n const suffixTargetTokens = availableTokens - promptInfo.prefixLength;\n let suffixText = source.slice(offset);\n if (\n completeOptions.suffixStartMode === SuffixStartMode.SiblingBlockTrimStart ||\n completeOptions.suffixStartMode === SuffixStartMode.CursorTrimStart\n ) {\n suffixText = suffixText.trimStart();\n }\n\n const suffix = tokenizer.takeFirstTokens(suffixText, suffixTargetTokens);\n\n // If there is not enough text to fill the suffix, allocate the extra tokens to\n // the prefix and recompute it.\n if (suffix.tokens.length <= suffixTargetTokens - 3) {\n // only recompute prefix if we can increase its length by >= 3 tokens\n prefixTargetTokens = availableTokens - suffix.tokens.length;\n promptInfo = promptWishlist.fulfill(prefixTargetTokens);\n }\n\n if (completeOptions.suffixMatchCriteria === SuffixMatchOption.Equal) {\n if (\n suffix.tokens.length === cachedSuffix.tokens.length &&\n suffix.tokens.every((v, i) => v === cachedSuffix.tokens[i])\n ) {\n useCachedSuffix = true;\n }\n } else if (completeOptions.suffixMatchCriteria === SuffixMatchOption.Levenshtein) {\n // if the current suffix is an empty string, then do not add the cachedSuffix\n if (suffix.tokens.length > 0 && completeOptions.suffixMatchThreshold > 0) {\n // only compare the first MAX_EDIT_DISTANCE_LENGTH tokens to speed up.\n const dist = findEditDistanceScore(\n suffix.tokens.slice(0, MAX_EDIT_DISTANCE_LENGTH),\n cachedSuffix.tokens.slice(0, MAX_EDIT_DISTANCE_LENGTH)\n )?.score;\n if (\n 100 * dist <\n completeOptions.suffixMatchThreshold * Math.min(MAX_EDIT_DISTANCE_LENGTH, suffix.tokens.length)\n ) {\n useCachedSuffix = true;\n }\n }\n }\n\n if (useCachedSuffix === true && cachedSuffix.tokens.length <= suffixTargetTokens) {\n // Similar to codeblock above for actual suffix, if there is not enough text to fill the suffix, allocate extra\n // tokens to the prefix and recompute it.\n if (cachedSuffix.tokens.length <= suffixTargetTokens - 3) {\n // only recompute prefix if we can increase its length by >= 3 tokens\n prefixTargetTokens = availableTokens - cachedSuffix.tokens.length;\n promptInfo = promptWishlist.fulfill(prefixTargetTokens);\n }\n promptInfo.suffix = cachedSuffix.text;\n promptInfo.suffixLength = cachedSuffix.tokens.length;\n } else {\n // EITHER suffix is not close to cachedSuffix OR cachedSuffix is too long. In either case, we devolve to actual suffix.\n // Note: when cachedSuffix is too long, we have the option of truncating the cachedSuffix using takeFirstTokens but that\n // would already invalidate the cache property that we want (in SPM mode).\n promptInfo.suffix = suffix.text;\n promptInfo.suffixLength = suffix.tokens.length;\n\n // log current count, reset the suffix and counts\n // TODO:\n // About 0.1% of the time log the cachedReusedCount and the suffix used\n // to telemetry. Discussion ongoing on Slack.\n // Right now, console.logging cacheReusedCount so as to make the project.\n cachedSuffix = suffix;\n }\n\n return promptInfo;\n }\n}\n","import {\n getAncestorWithSiblingFunctions,\n getFirstPrecedingComment,\n isFunctionDefinition,\n isSupportedLanguageId,\n parseTreeSitter,\n} from './parse';\nimport {DocumentInfoWithOffset} from './prompt';\n\n/**\n * Find the sibling function start index to the given offset in the source code.\n *\n * @param documentInfo The document description\n * (of which source text, offset and language will be used)\n * @returns start index of the first sibling block\n */\nexport async function getSiblingFunctionStart({source, offset, languageId}: DocumentInfoWithOffset) {\n if (isSupportedLanguageId(languageId)) {\n const tree = await parseTreeSitter(languageId, source);\n try {\n // find syntax-tree node we are on or right after\n let startingOffset = offset;\n while (startingOffset >= 0 && /\\s/.test(source[startingOffset])) startingOffset--;\n const nd = tree.rootNode.descendantForIndex(startingOffset);\n\n // find the closest ancestor that may have sibling functions\n const anc = getAncestorWithSiblingFunctions(languageId, nd);\n if (anc) {\n // find sibling functions and include them all\n for (let sibling = anc.nextSibling; sibling; sibling = sibling.nextSibling) {\n if (isFunctionDefinition(languageId, sibling)) {\n // take `sibling`, as well as any comments immediately preceding it, but not if\n // it precedes or spans `offset`\n const docComment = getFirstPrecedingComment(sibling);\n const startIndex = docComment?.startIndex ?? sibling.startIndex;\n if (startIndex < offset) {\n continue;\n }\n\n return startIndex;\n }\n }\n\n if (anc.endIndex >= offset) {\n return anc.endIndex;\n }\n }\n } finally {\n tree.delete();\n }\n }\n\n return offset;\n}\n","/**\n * Cursor contexts used by snippet providers, e.g. retrieval and neighboring tabs.\n *\n * A 'cursor context' is quite similar to a prompt, but it is meant as a more\n * basic, lightweight and ultimately myopic look at what the user is currently doing.\n */\n\nimport {DocumentInfoWithOffset} from '../prompt';\nimport {getTokenizer, TokenizerName} from '../tokenization';\n\n/**\n * Options for cursor context generation.\n */\nexport type CursorContextOptions = {\n /** The maximum cursor context length in tokens */\n maxTokenLength?: number;\n\n /** The maximum number of lines in a cursor context */\n maxLineCount?: number;\n\n /** TokenizerName for the tokenization */\n tokenizerName: TokenizerName;\n\n cursorContextFix?: boolean;\n};\n\nconst defaultCursorContextOptions: CursorContextOptions = {\n tokenizerName: TokenizerName.cushman002,\n};\n\nfunction cursorContextOptions(options?: Partial): CursorContextOptions {\n return {...defaultCursorContextOptions, ...options};\n}\n\nexport interface CursorContextInfo {\n /** The compiled context as a string */\n context: string;\n /** The number of tokens in the context */\n tokenLength: number;\n /** The number of lines in the context */\n lineCount: number;\n /** TokenizerName for the tokenization */\n tokenizerName: TokenizerName;\n}\n\n/**\n * Return a cursor context corresponding to this document info.\n * This is essentially a trimmed-down version of a prompt.\n * Tokenizer, if not provided as an option, currently defaults to cushman002\n *\n * If maxLineCount or maxTokenLength are 0, an empty context is returned\n * If exactly one of `maxLineCount` or `maxTokenLength` is defined, the limit is applied for that one only\n * If both are defined, we apply both conditions so end up using the shorter of the two constraints\n * If both are undefined, the entire document up to the cursor is returned\n */\nexport function getCursorContext(\n doc: DocumentInfoWithOffset,\n options: Partial = {}\n): CursorContextInfo {\n const completeOptions = cursorContextOptions(options);\n const tokenizer = getTokenizer(completeOptions.tokenizerName);\n\n if (completeOptions.cursorContextFix) {\n if (completeOptions.maxLineCount !== undefined && completeOptions.maxLineCount < 0) {\n throw new Error('maxLineCount must be non-negative if defined');\n }\n if (completeOptions.maxTokenLength !== undefined && completeOptions.maxTokenLength < 0) {\n throw new Error('maxTokenLength must be non-negative if defined');\n }\n\n if (completeOptions.maxLineCount === 0 || completeOptions.maxTokenLength === 0) {\n return {\n context: '',\n lineCount: 0,\n tokenLength: 0,\n tokenizerName: completeOptions.tokenizerName,\n };\n }\n\n let context = doc.source.slice(0, doc.offset); // Trim to cursor location, offset is a character location\n if (completeOptions.maxLineCount !== undefined) {\n context = context.split('\\n').slice(-completeOptions.maxLineCount).join('\\n');\n }\n if (completeOptions.maxTokenLength !== undefined) {\n context = tokenizer.takeLastLinesTokens(context, completeOptions.maxTokenLength);\n }\n return {\n context,\n lineCount: context.split('\\n').length,\n tokenLength: tokenizer.tokenLength(context),\n tokenizerName: completeOptions.tokenizerName,\n };\n } else {\n // Default implementation\n if (completeOptions.maxTokenLength === undefined && completeOptions.maxLineCount !== undefined) {\n const contextLines = doc.source.slice(0, doc.offset).split('\\n').slice(-completeOptions.maxLineCount);\n const context = contextLines.join('\\n');\n return {\n context,\n lineCount: contextLines.length,\n tokenLength: tokenizer.tokenLength(context),\n tokenizerName: completeOptions.tokenizerName,\n };\n } else if (completeOptions.maxTokenLength !== undefined && completeOptions.maxLineCount === undefined) {\n const context = tokenizer.takeLastLinesTokens(\n doc.source.slice(0, doc.offset),\n completeOptions.maxTokenLength\n );\n return {\n context,\n lineCount: context.split('\\n').length,\n tokenLength: tokenizer.tokenLength(context),\n tokenizerName: completeOptions.tokenizerName,\n };\n } else if (completeOptions.maxTokenLength !== undefined && completeOptions.maxLineCount !== undefined) {\n const byLines = getCursorContext(doc, {...options, maxTokenLength: undefined});\n if (byLines.tokenLength > completeOptions.maxTokenLength) {\n return getCursorContext(doc, {...options, maxLineCount: undefined});\n } else {\n return byLines;\n }\n } else {\n throw new Error('Either maxTokenLength or maxLineCount must be defined');\n }\n }\n}\n","import {DocumentInfo, DocumentInfoWithOffset, SnippetSelectionOption} from '../prompt';\nimport {CursorContextInfo, getCursorContext} from './cursorContext';\nimport {computeScore} from './jaccardMatching';\nimport {ScoredSnippetMarker, SortOptions, WindowedMatcher} from './selectRelevance';\nimport {SnippetProviderType, SnippetSemantics, SnippetWithProviderInfo} from './snippets';\nimport {getBasicWindowDelineations} from './windowDelineations';\n\n/**\n * 3 different strategies to pick up snippets by cursor history.\n * CursorOnly:\n * Pick up the most clicked snippets.\n * CursorJaccard:\n * Pick up the most clicked snippets, and re-sort them by Jaccard similarity.\n * JaccardCursor:\n * Pick up the most similar snippet by Jaccard similarity, and re-sort them by the number of clicked.\n */\nexport enum CursorSnippetsPickingStrategy {\n CursorOnly = 'cursoronly',\n CursorJaccard = 'cursorjaccard',\n JaccardCursor = 'jaccardcursor',\n}\n\nclass FifoCache {\n private keys: string[] = [];\n private cache: {[key: string]: T} = {};\n private size: number;\n constructor(size: number) {\n this.size = size;\n }\n put(key: string, value: T) {\n this.cache[key] = value;\n if (this.keys.length > this.size) {\n this.keys.push(key);\n const leavingKey = this.keys.shift() ?? '';\n delete this.cache[leavingKey];\n }\n }\n get(key: string): T | undefined {\n return this.cache[key];\n }\n}\n\n/**\n * For a number of documents (the neighboring tabs),\n * associate to each document and its kind of window computation (as key)\n * the sequence b_1, ..., b_n, where\n * b_i is the set of tokens in the ith window --\n * e.g. for window length 10,\n * WINDOWED_TOKEN_SET_CACHE(doc)[0]\n * holds the tokens in the first 10 lines of the document.\n */\nconst WINDOWED_TOKEN_SET_CACHE = new FifoCache[]>(20);\n\nclass CustomizedFixedWindowSizeJaccardMatcher extends WindowedMatcher {\n private windowLength: number;\n private cursorContextFix: boolean;\n\n public constructor(referenceDoc: DocumentInfoWithOffset, windowLength: number, cursorContextFix: boolean) {\n super(referenceDoc, cursorContextFix);\n this.windowLength = windowLength;\n this.cursorContextFix = cursorContextFix;\n }\n\n protected id(): string {\n return 'CustomizedFixedWindowSizeJaccardMatcher:' + this.windowLength;\n }\n\n protected getWindowsDelineations(lines: string[]): [number, number][] {\n return getBasicWindowDelineations(this.windowLength, lines);\n }\n\n protected trimDocument(doc: DocumentInfoWithOffset): string {\n return doc.source.slice(0, doc.offset).split('\\n').slice(-this.windowLength).join('\\n');\n }\n\n protected _getCursorContextInfo(referenceDoc: DocumentInfoWithOffset): CursorContextInfo {\n return getCursorContext(referenceDoc, {\n maxLineCount: this.windowLength,\n cursorContextFix: this.cursorContextFix,\n });\n }\n\n protected similarityScore(a: Set, b: Set): number {\n return computeScore(a, b);\n }\n\n /**\n * Returns all snippet markers with their scores.\n * @param objectDoc\n * @param candidates This is a Map from start line to end line. This funciton only returns the snippets that the start line and end line are in the map.\n * We need it because we want to ignore the code snippets that are not clicked. See the references in CursorHistoryMatcher.\n *\n */\n override retrieveAllSnippets(\n objectDoc: DocumentInfo,\n sortOption = SortOptions.Descending,\n candidates?: Map\n ): ScoredSnippetMarker[] {\n const snippets: ScoredSnippetMarker[] = [];\n\n if (objectDoc.source.length === 0 || this.referenceTokens.size === 0) {\n return snippets;\n }\n\n const lines = objectDoc.source.split('\\n');\n const key = this.id() + ':' + objectDoc.source;\n const tokensInWindows = WINDOWED_TOKEN_SET_CACHE.get(key) ?? [];\n // if the tokens are not cached, we need to compute them\n const needToComputeTokens = tokensInWindows.length == 0;\n const tokenizedLines = needToComputeTokens ? lines.map(this.tokenizer.tokenize, this.tokenizer) : [];\n\n // Compute the windows with the score\n for (const [index, [startLine, endLine]] of this.getWindowsDelineations(lines).entries()) {\n if (needToComputeTokens) {\n const tokensInWindow = new Set();\n tokenizedLines.slice(startLine, endLine).forEach(x => x.forEach(tokensInWindow.add, tokensInWindow));\n tokensInWindows.push(tokensInWindow);\n }\n\n if (candidates !== undefined && candidates.get(startLine) !== endLine) {\n continue;\n }\n\n // Now tokensInWindows[index] contains the tokens in the window, whether we just computed them or not\n const tokensInWindow = tokensInWindows[index];\n const score = this.similarityScore(tokensInWindow, this.referenceTokens);\n snippets.push({\n score,\n startLine,\n endLine,\n });\n }\n\n // If we didn't get the token sets from the cache, time to put them there!\n if (needToComputeTokens) {\n WINDOWED_TOKEN_SET_CACHE.put(key, tokensInWindows);\n }\n\n return this.sortScoredSnippets(snippets, sortOption);\n }\n}\n\n/**\n * Find the best matches from a neighbor file by cursor history information.\n */\nexport class CursorHistoryMatcher {\n private windowLength: number;\n private lineCursorHistory: Map>;\n private jaccardMatcher: CustomizedFixedWindowSizeJaccardMatcher;\n private strategy: CursorSnippetsPickingStrategy;\n\n private constructor(\n referenceDoc: DocumentInfoWithOffset,\n windowLength: number,\n lineCursorHistory: Map>,\n strategy: CursorSnippetsPickingStrategy,\n cursorContextFix: boolean\n ) {\n this.windowLength = windowLength;\n this.lineCursorHistory = lineCursorHistory;\n this.jaccardMatcher = new CustomizedFixedWindowSizeJaccardMatcher(referenceDoc, windowLength, cursorContextFix);\n this.strategy = strategy;\n }\n\n static FACTORY = (\n windowLength: number,\n lineCursorHistory: Map>,\n strategy: CursorSnippetsPickingStrategy,\n cursorContextFix: boolean\n ) => {\n return {\n to: (referenceDoc: DocumentInfoWithOffset) =>\n new CursorHistoryMatcher(referenceDoc, windowLength, lineCursorHistory, strategy, cursorContextFix),\n };\n };\n\n /**\n * Returns a sorted array of snippets with their scores according to the sort option.\n * @param snippets ScoredSnippetMarker[]\n *\n */\n private sortScoredSnippets(\n snippets: ScoredSnippetMarker[],\n sortOption = SortOptions.Descending\n ): ScoredSnippetMarker[] {\n return sortOption == SortOptions.Ascending\n ? snippets.sort((snippetA, snippetB) => (snippetA.score > snippetB.score ? 1 : -1))\n : sortOption == SortOptions.Descending\n ? snippets.sort((snippetA, snippetB) => (snippetA.score > snippetB.score ? -1 : 1))\n : snippets;\n }\n\n private markerToSnippet(nonOverlappingSnippets: ScoredSnippetMarker[], lines: string[]): SnippetWithProviderInfo[] {\n return nonOverlappingSnippets.map(snippetMarker => ({\n snippet: lines.slice(snippetMarker.startLine, snippetMarker.endLine).join('\\n'),\n provider: SnippetProviderType.NeighboringTabs,\n semantics: SnippetSemantics.Snippet,\n ...snippetMarker,\n }));\n }\n\n public async findMatches(\n objectDoc: DocumentInfo,\n snippetSelectionOption = SnippetSelectionOption.BestMatch,\n snippetSelectionK?: number\n ): Promise {\n if (snippetSelectionOption == SnippetSelectionOption.BestMatch) {\n const bestMatch = await this.findBestMatch(objectDoc);\n if (bestMatch === undefined) {\n return [];\n } else {\n return [bestMatch];\n }\n }\n\n if (snippetSelectionOption == SnippetSelectionOption.TopK) {\n return (await this.findTopKMatches(objectDoc, snippetSelectionK)) || [];\n }\n\n return [];\n }\n\n /**\n * Returns the snippet from the object document that is most similar to the reference Document.\n * - The returned score\n * - For CursorOnly, the returned score is the number clicks.\n * - For CursorJaccard and JaccardCursor, The returned score is the sum of the number of clicks and the Jaccard similarity.\n * The number of clicks is always a integer, and the Jaccard similarity is always a float less than 1.\n * So we can assume that the code snippet will be sorted by the number of clicks first, and then by the Jaccard similarity.\n * - Algorithm\n * - CursorOnly\n * Pick up the most clicked snippets. If there are multiply snippets with the same number of clicks,\n * it will return the middle one in the file.\n * - CursorJaccard\n * Pick up the most clicked snippets, and re-sort them by Jaccard similarity.\n * - JaccardCursor\n * It is equivalent to FixedWindowSizeJaccardMatcher.findBestMatch, because we just pick the most similar one snippet.\n * @param objectDoc\n */\n public async findBestMatch(objectDoc: DocumentInfo): Promise {\n if (objectDoc.source.length === 0) {\n return undefined;\n }\n\n if (this.strategy === CursorSnippetsPickingStrategy.CursorOnly) {\n let snippetsByCursor = this.retrieveCursorSnippets(objectDoc);\n snippetsByCursor = this.sortScoredSnippets(snippetsByCursor, SortOptions.Descending);\n if (snippetsByCursor.length === 0) {\n return undefined;\n }\n\n const bestCursorScore = Math.max(...snippetsByCursor.map(s => s.score));\n const bestSnippets = snippetsByCursor.filter(s => s.score === bestCursorScore);\n const bestInMiddle = bestSnippets.sort((a, b) => a.startLine - b.startLine)[\n Math.floor(bestSnippets.length / 2)\n ];\n\n const lines = objectDoc.source.split('\\n');\n return {\n snippet: lines.slice(bestInMiddle.startLine, bestInMiddle.endLine).join('\\n'),\n provider: SnippetProviderType.NeighboringTabs,\n semantics: SnippetSemantics.Snippet,\n ...bestInMiddle,\n };\n } else if (this.strategy === CursorSnippetsPickingStrategy.CursorJaccard) {\n let snippetsByCursor = this.retrieveCursorSnippets(objectDoc);\n snippetsByCursor = this.sortScoredSnippets(snippetsByCursor, SortOptions.Descending);\n if (snippetsByCursor.length === 0) {\n return undefined;\n }\n\n const bestCursorScore = Math.max(...snippetsByCursor.map(s => s.score));\n const bestSnippetsByCursor = [];\n const bestSnippetsBoundaryByCursor = new Map();\n for (const snippet of snippetsByCursor) {\n if (snippet.score === bestCursorScore) {\n bestSnippetsByCursor.push(snippet);\n bestSnippetsBoundaryByCursor.set(snippet.startLine, snippet.endLine);\n }\n }\n\n const bestSnippets = this.jaccardMatcher.retrieveAllSnippets(\n objectDoc,\n SortOptions.Descending,\n bestSnippetsBoundaryByCursor\n );\n\n if (bestSnippets.length === 0) {\n return undefined;\n }\n\n const bestSnippet = bestSnippets[0];\n for (const snippet of snippetsByCursor) {\n if (snippet.startLine === bestSnippet.startLine && snippet.endLine === bestSnippet.endLine) {\n bestSnippet.score += snippet.score;\n break;\n }\n }\n\n const lines = objectDoc.source.split('\\n');\n return {\n snippet: lines.slice(bestSnippet.startLine, bestSnippet.endLine).join('\\n'),\n provider: SnippetProviderType.NeighboringTabs,\n semantics: SnippetSemantics.Snippet,\n ...bestSnippet,\n };\n } else if (this.strategy === CursorSnippetsPickingStrategy.JaccardCursor) {\n const bestSnippet = await this.jaccardMatcher.findBestMatch(objectDoc);\n if (bestSnippet === undefined) {\n return undefined;\n }\n\n let snippetsByCursor = this.retrieveCursorSnippets(objectDoc);\n snippetsByCursor = this.sortScoredSnippets(snippetsByCursor, SortOptions.Descending);\n if (snippetsByCursor.length === 0) {\n return undefined;\n }\n\n for (const snippet of snippetsByCursor) {\n if (snippet.startLine === bestSnippet.startLine && snippet.endLine === bestSnippet.endLine) {\n bestSnippet.score += snippet.score;\n break;\n }\n }\n\n return bestSnippet;\n }\n }\n\n /**\n * Returns the snippets from the object document that are most similar to the reference Document.\n * - The returned score\n * - For CursorOnly, the returned score is the number clicks.\n * - For CursorJaccard and JaccardCursor, The returned score is the sum of the number of clicks and the Jaccard similarity.\n * The number of clicks is always a integer, and the Jaccard similarity is always a float less than 1.\n * So we can assume that the code snippet will be sorted by the number of clicks first, and then by the Jaccard similarity.\n * - Algorithm\n * - CursorOnly\n * Pick up the top K clicked snippets.\n * - CursorJaccard\n * Generate all the snippet that was clicked more than 1 time.\n * Calculate the Jaccard similarity between the snippet and the object document.\n * Re-sort them by the number of clicks as the first key and Jaccard similarity as the second key.\n * Pick up the top K snippets.\n * - JaccardCursor\n * Get the top K snippets by Jaccard similarity.\n * Calculate the number of clicks for each snippet, and re-sort them.\n * @param objectDoc\n * @param snippetSelectionK\n * @returns\n */\n private async findTopKMatches(\n objectDoc: DocumentInfo,\n snippetSelectionK = 1\n ): Promise {\n if (objectDoc.source.length === 0 || snippetSelectionK < 1) {\n return undefined;\n }\n\n const lines = objectDoc.source.split('\\n');\n let snippetsByCursor = this.retrieveCursorSnippets(objectDoc);\n if (snippetsByCursor.length === 0) {\n return undefined;\n }\n\n if (this.strategy === CursorSnippetsPickingStrategy.CursorOnly) {\n snippetsByCursor = this.sortScoredSnippets(snippetsByCursor, SortOptions.Descending);\n let nonOverlappingSnippets: ScoredSnippetMarker[] = this.gatherNonOverlappingSnippets(\n snippetsByCursor,\n snippetSelectionK\n );\n return this.markerToSnippet(nonOverlappingSnippets, lines);\n } else if (this.strategy === CursorSnippetsPickingStrategy.CursorJaccard) {\n snippetsByCursor = this.sortScoredSnippets(snippetsByCursor, SortOptions.Descending);\n const snippetCandidates = new Map(snippetsByCursor.map(s => [s.startLine, s.endLine]));\n const allSnippetsSortedByJaccard = this.jaccardMatcher.retrieveAllSnippets(\n objectDoc,\n SortOptions.Descending,\n snippetCandidates\n );\n const jaccardMap = allSnippetsSortedByJaccard.reduce(\n (m, s) => m.set([s.startLine, s.endLine].join(','), s.score),\n new Map()\n );\n\n // Sort the code snippet by 2 keys, the number of clicks is the primary key, and the second one is the jaccard similarity.\n // And I don't want to change the type of score. So I add them together and sort them.\n // We ignore the corner case where a jaccard similarity of 1 will behave like an additional click for the ordering\n snippetsByCursor.forEach(v => (v.score += jaccardMap.get([v.startLine, v.endLine].join(',')) ?? 0));\n snippetsByCursor = this.sortScoredSnippets(snippetsByCursor, SortOptions.Descending);\n let nonOverlappingSnippets: ScoredSnippetMarker[] = this.gatherNonOverlappingSnippets(\n snippetsByCursor,\n snippetSelectionK\n );\n return this.markerToSnippet(nonOverlappingSnippets, lines);\n } else if (this.strategy === CursorSnippetsPickingStrategy.JaccardCursor) {\n const topKByJaccard = await this.jaccardMatcher.findTopKMatches(objectDoc, snippetSelectionK);\n if (topKByJaccard === undefined) {\n return undefined;\n }\n\n const cursorMap = snippetsByCursor.reduce(\n (m, s) => m.set([s.startLine, s.endLine].join(','), s.score),\n new Map()\n );\n topKByJaccard.forEach(v => (v.score += cursorMap.get([v.startLine, v.endLine].join(',')) ?? 0));\n const resortedTopKByJaccard = this.sortScoredSnippets(topKByJaccard, SortOptions.Descending);\n return this.markerToSnippet(resortedTopKByJaccard, lines);\n }\n }\n\n private gatherNonOverlappingSnippets(snippetsByCursor: ScoredSnippetMarker[], snippetSelectionK: number) {\n let nonOverlappingSnippets: ScoredSnippetMarker[] = [snippetsByCursor[0]];\n\n // step forward into snippets until finding a snippet that has no overlap with any snippet in nonOverlappingSnippets\n for (\n let currentIndex = 1;\n currentIndex < snippetsByCursor.length && nonOverlappingSnippets.length < snippetSelectionK;\n currentIndex++\n ) {\n if (\n nonOverlappingSnippets.findIndex(\n snippet =>\n snippetsByCursor[currentIndex].startLine < snippet.endLine &&\n snippetsByCursor[currentIndex].endLine > snippet.startLine\n ) == -1\n ) {\n nonOverlappingSnippets.push(snippetsByCursor[currentIndex]);\n }\n }\n return nonOverlappingSnippets;\n }\n\n /**\n * Retrieve the snippets containing at least 1 cursor click. If there are less lines than the fixed size, we will get 1 snippet if it contains at least 1 click.\n */\n private retrieveCursorSnippets(objectDoc: DocumentInfo): ScoredSnippetMarker[] {\n const snippets: ScoredSnippetMarker[] = [];\n\n if (objectDoc.source.length === 0) {\n return snippets;\n }\n\n const cursors = this.lineCursorHistory.get(objectDoc.uri);\n if (cursors === undefined) {\n return snippets;\n }\n\n const lines = objectDoc.source.split('\\n');\n\n enum pointType {\n leftBoundary,\n rightBoundary,\n }\n\n let sparsePoints: [number, pointType, number][] = [];\n for (const [line, num] of cursors.entries()) {\n if (line >= lines.length) {\n continue;\n }\n\n sparsePoints.push([Math.max(0, line - this.windowLength + 1), pointType.leftBoundary, num]);\n sparsePoints.push([line + 1, pointType.rightBoundary, num]);\n }\n\n sparsePoints.push([lines.length, pointType.leftBoundary, 0]);\n sparsePoints = sparsePoints.sort((a, b) => a[0] - b[0]);\n\n let numCursors = 0;\n let previousLine = 0;\n for (const [line, type, num] of sparsePoints) {\n if (numCursors > 0) {\n for (\n let index = previousLine;\n index < line && (index == 0 || index + this.windowLength <= lines.length);\n index++\n ) {\n snippets.push({\n score: numCursors,\n startLine: index,\n endLine: Math.min(lines.length, index + this.windowLength),\n });\n }\n }\n\n if (type === pointType.leftBoundary) {\n numCursors += num;\n } else {\n numCursors -= num;\n }\n\n previousLine = line;\n }\n\n return snippets;\n }\n}\n","import {DocumentInfoWithOffset} from '../prompt';\nimport {CursorContextInfo, getCursorContext} from './cursorContext';\nimport {FunctionalMatcher, WindowedMatcher} from './selectRelevance';\nimport {getBasicWindowDelineations, getIndentationWindowsDelineations} from './windowDelineations';\n\nexport class FixedWindowSizeJaccardMatcher extends WindowedMatcher {\n private windowLength: number;\n private cursorContextFix: boolean;\n\n private constructor(referenceDoc: DocumentInfoWithOffset, windowLength: number, cursorContextFix: boolean) {\n super(referenceDoc, cursorContextFix);\n this.windowLength = windowLength;\n this.cursorContextFix = cursorContextFix;\n }\n\n static FACTORY = (windowLength: number, cursorContextFix: boolean) => {\n return {\n to: (referenceDoc: DocumentInfoWithOffset) =>\n new FixedWindowSizeJaccardMatcher(referenceDoc, windowLength, cursorContextFix),\n };\n };\n\n protected id(): string {\n return 'fixed:' + this.windowLength;\n }\n\n protected getWindowsDelineations(lines: string[]): [number, number][] {\n return getBasicWindowDelineations(this.windowLength, lines);\n }\n\n protected trimDocument(doc: DocumentInfoWithOffset): string {\n return doc.source.slice(0, doc.offset).split('\\n').slice(-this.windowLength).join('\\n');\n }\n\n protected _getCursorContextInfo(referenceDoc: DocumentInfoWithOffset): CursorContextInfo {\n return getCursorContext(referenceDoc, {\n maxLineCount: this.windowLength,\n cursorContextFix: this.cursorContextFix,\n });\n }\n\n protected similarityScore(a: Set, b: Set): number {\n return computeScore(a, b);\n }\n}\n\n/**\n * A matcher that tries to find a maximal coherent snippet\n * of length between min and max number of lines\n * in the object document.\n * A snippet is coherent if:\n * * it is a contiguous sequence of lines\n * * for each two nodes a, b, there are respective ancestors that are both included and siblings to each other\n */\nexport class IndentationBasedJaccardMatcher extends WindowedMatcher {\n private indentationMinLength: number;\n private indentationMaxLength: number;\n private languageId: string;\n private cursorContextFix: boolean;\n\n private constructor(\n referenceDoc: DocumentInfoWithOffset,\n indentationMinLength: number,\n indentationMaxLength: number,\n cursorContextFix: boolean\n ) {\n super(referenceDoc, cursorContextFix);\n this.indentationMinLength = indentationMinLength;\n this.indentationMaxLength = indentationMaxLength;\n this.languageId = referenceDoc.languageId;\n this.cursorContextFix = cursorContextFix;\n }\n\n static FACTORY = (indentationMinLength: number, indentationMaxLength: number, cursorContextFix: boolean) => {\n return {\n to: (referenceDoc: DocumentInfoWithOffset) =>\n new IndentationBasedJaccardMatcher(\n referenceDoc,\n indentationMinLength,\n indentationMaxLength,\n cursorContextFix\n ),\n };\n };\n\n protected id(): string {\n return `indent:${this.indentationMinLength}:${this.indentationMaxLength}:${this.languageId}`;\n }\n\n protected getWindowsDelineations(lines: string[]): [number, number][] {\n const windows: [number, number][] = getIndentationWindowsDelineations(\n lines,\n this.languageId,\n this.indentationMinLength,\n this.indentationMaxLength\n );\n if (windows.length > 0) {\n return windows;\n } else if (lines.length < this.indentationMinLength) {\n // Return the entire file if the indentation matcher returns nothing and the file is short enough\n return [[0, lines.length]];\n } else {\n return [];\n }\n }\n\n protected trimDocument(doc: DocumentInfoWithOffset): string {\n return doc.source.slice(0, doc.offset).split('\\n').slice(-this.indentationMaxLength).join('\\n');\n }\n\n protected _getCursorContextInfo(referenceDoc: DocumentInfoWithOffset): CursorContextInfo {\n return getCursorContext(referenceDoc, {\n maxLineCount: this.indentationMaxLength,\n cursorContextFix: this.cursorContextFix,\n });\n }\n\n protected similarityScore(a: Set, b: Set): number {\n return computeScore(a, b);\n }\n}\n\nexport class FunctionJaccardMatcher extends FunctionalMatcher {\n private indentationMinLength: number | undefined;\n private indentationMaxLength: number | undefined;\n private languageId: string;\n private cursorContextFix: boolean;\n\n protected id(): string {\n return 'function:' + this.windowLength;\n }\n protected getWindowsDelineations(lines: string[]): [number, number][] {\n if (this.indentationMaxLength !== undefined && this.indentationMinLength !== undefined) {\n return getIndentationWindowsDelineations(\n lines,\n this.languageId,\n this.indentationMinLength,\n this.indentationMaxLength\n );\n }\n return getBasicWindowDelineations(this.windowLength, lines);\n }\n private windowLength: number;\n\n private constructor(\n referenceDoc: DocumentInfoWithOffset,\n windowLength: number,\n cursorContextFix: boolean,\n indentationMinLength: number | undefined,\n indentationMaxLength: number | undefined\n ) {\n super(referenceDoc, cursorContextFix);\n this.windowLength = windowLength;\n this.indentationMinLength = indentationMinLength;\n this.indentationMaxLength = indentationMaxLength;\n this.languageId = referenceDoc.languageId;\n this.cursorContextFix = cursorContextFix;\n }\n\n static FACTORY = (\n windowLength: number,\n cursorContextFix: boolean,\n indentationMinLength?: number,\n indentationMaxLength?: number\n ) => {\n return {\n to: (referenceDoc: DocumentInfoWithOffset) =>\n new FunctionJaccardMatcher(\n referenceDoc,\n windowLength,\n cursorContextFix,\n indentationMinLength,\n indentationMaxLength\n ),\n };\n };\n\n protected trimDocument(doc: DocumentInfoWithOffset): string {\n return doc.source.slice(0, doc.offset).split('\\n').slice(-this.windowLength).join('\\n');\n }\n\n protected _getCursorContextInfo(referenceDoc: DocumentInfoWithOffset): CursorContextInfo {\n return getCursorContext(referenceDoc, {\n maxLineCount: this.windowLength,\n cursorContextFix: this.cursorContextFix,\n });\n }\n\n protected similarityScore(a: Set, b: Set): number {\n return computeScore(a, b);\n }\n}\n\n/**\n * Compute the Jaccard metric of number of elements in the intersection\n * divided by number of elements in the union\n */\nexport function computeScore(a: Set, b: Set) {\n const intersection = new Set();\n a.forEach(x => {\n if (b.has(x)) {\n intersection.add(x);\n }\n });\n return intersection.size / (a.size + b.size - intersection.size);\n}\n","import {ok} from 'assert';\nimport {DocumentInfo, DocumentInfoWithOffset, SnippetSelectionOption} from '../prompt';\nimport {CursorHistoryMatcher, CursorSnippetsPickingStrategy} from './cursorMatching';\nimport {FixedWindowSizeJaccardMatcher, FunctionJaccardMatcher, IndentationBasedJaccardMatcher} from './jaccardMatching';\nimport {SnippetWithProviderInfo} from './snippets';\n\nexport enum NeighboringTabsOption {\n None = 'none',\n Conservative = 'conservative', // set jaccard threshold 0.3\n Medium = 'medium', // set jaccard threshold 0.1\n Eager = 'eager', // set jaccard threshold 0.0\n EagerButLittle = 'eagerButLittle',\n EagerButMedium = 'eagerButMedium',\n EagerButMuch = 'eagerButMuch',\n RetrievalComparable = 'retrievalComparable',\n}\n\nexport enum NeighboringSnippetType {\n NeighboringFunctions = 'neighboringFunction',\n NeighboringSnippets = 'neighboringSnippet',\n CursorHistoryMatcher = 'cursorhistorymatcher',\n}\n\ninterface NeighborSelection {\n snippetLength: number;\n threshold: number;\n numberOfSnippets: number;\n}\n\nexport const neighborOptionToSelection: Record = {\n none: {\n snippetLength: 1,\n threshold: -1,\n numberOfSnippets: 0,\n },\n conservative: {\n snippetLength: 10,\n threshold: 0.3,\n numberOfSnippets: 1,\n },\n medium: {\n snippetLength: 20,\n threshold: 0.1,\n numberOfSnippets: 2,\n },\n eager: {\n snippetLength: 60,\n threshold: 0,\n numberOfSnippets: 4,\n },\n eagerButLittle: {\n snippetLength: 10,\n threshold: 0,\n numberOfSnippets: 1,\n },\n eagerButMedium: {\n snippetLength: 20,\n threshold: 0,\n numberOfSnippets: 4,\n },\n eagerButMuch: {\n snippetLength: 60,\n threshold: 0,\n numberOfSnippets: 6,\n },\n retrievalComparable: {\n snippetLength: 30,\n threshold: 0,\n numberOfSnippets: 4,\n },\n};\n\n// Sanity thresholds on the number of neighbors to consider\nconst MAX_CHARACTERS_PER_FILE = 10000;\nconst MAX_NUMBER_OF_FILES = 20;\n\nfunction getMatcher(\n doc: DocumentInfoWithOffset,\n neighboringSnippetTypes: NeighboringSnippetType,\n selection: NeighborSelection,\n cursorContextFix: boolean,\n indentationMinLength?: number,\n indentationMaxLength?: number,\n lineCursorHistory?: Map>,\n cursorSnippetsPickingStrategy: CursorSnippetsPickingStrategy = CursorSnippetsPickingStrategy.CursorJaccard\n) {\n let matcherFactory;\n if (neighboringSnippetTypes === NeighboringSnippetType.NeighboringSnippets) {\n if (indentationMinLength !== undefined && indentationMaxLength !== undefined) {\n matcherFactory = IndentationBasedJaccardMatcher.FACTORY(\n indentationMinLength,\n indentationMaxLength,\n cursorContextFix\n );\n } else {\n matcherFactory = FixedWindowSizeJaccardMatcher.FACTORY(selection.snippetLength, cursorContextFix);\n }\n } else if (neighboringSnippetTypes === NeighboringSnippetType.NeighboringFunctions) {\n matcherFactory = FunctionJaccardMatcher.FACTORY(\n selection.snippetLength,\n cursorContextFix,\n indentationMinLength,\n indentationMaxLength\n );\n } else {\n ok(lineCursorHistory !== undefined, 'lineCursorHistory should not be undefined');\n matcherFactory = CursorHistoryMatcher.FACTORY(\n selection.snippetLength,\n lineCursorHistory,\n cursorSnippetsPickingStrategy,\n cursorContextFix\n );\n }\n return matcherFactory.to(doc);\n}\n\n/**\n * @returns A SnippetWithProviderInfo describing the best matches from neighbors.\n */\nexport async function getNeighborSnippets(\n doc: DocumentInfoWithOffset,\n neighbors: DocumentInfo[],\n neighboringSnippetTypes: NeighboringSnippetType,\n options: NeighboringTabsOption | string,\n cursorContextFix: boolean,\n indentationMinLength?: number,\n indentationMaxLength?: number,\n snippetSelectionOption?: SnippetSelectionOption,\n snippetSelectionK?: number,\n lineCursorHistory?: Map>,\n cursorSnippetsPickingStrategy?: CursorSnippetsPickingStrategy\n): Promise {\n const selection = {...neighborOptionToSelection[options]};\n const matcher = getMatcher(\n doc,\n neighboringSnippetTypes,\n selection,\n cursorContextFix,\n indentationMinLength,\n indentationMaxLength,\n lineCursorHistory,\n cursorSnippetsPickingStrategy\n );\n\n if (selection.numberOfSnippets === 0) {\n return [];\n }\n\n const snippets = (\n await neighbors\n // filter out absurdly long or absurdly many open files\n .filter(neighbor => neighbor.source.length < MAX_CHARACTERS_PER_FILE && neighbor.source.length > 0)\n // slice(0) duplicates an array\n .slice(0, MAX_NUMBER_OF_FILES)\n .reduce(\n async (\n acc,\n neighbor // accumulator of all snippets from all neighbors\n ) =>\n (\n await acc\n ).concat(\n (\n await matcher.findMatches(neighbor, snippetSelectionOption, snippetSelectionK)\n ).map(snippet => ({relativePath: neighbor.relativePath, ...snippet}))\n ),\n Promise.resolve([] as SnippetWithProviderInfo[])\n )\n )\n .filter(\n neighbor =>\n // remove files that had no match at all\n neighbor.score &&\n neighbor.snippet &&\n // remove files that had a low score\n neighbor.score > selection.threshold\n )\n // order them with best (highest scores) last\n .sort((a, b) => a.score - b.score)\n // take the best options from the end\n .slice(-selection.numberOfSnippets);\n return snippets;\n}\n","import {getFunctionPositions, isSupportedLanguageId} from '../parse';\nimport {DocumentInfo, DocumentInfoWithOffset, SnippetSelectionOption} from '../prompt';\nimport {CursorContextInfo} from './cursorContext';\nimport {SnippetProviderType, SnippetSemantics, SnippetWithProviderInfo} from './snippets';\n\nclass FifoCache {\n private keys: string[] = [];\n private cache: {[key: string]: T} = {};\n private size: number;\n constructor(size: number) {\n this.size = size;\n }\n put(key: string, value: T) {\n this.cache[key] = value;\n if (this.keys.length > this.size) {\n this.keys.push(key);\n const leavingKey = this.keys.shift() ?? '';\n delete this.cache[leavingKey];\n }\n }\n get(key: string): T | undefined {\n return this.cache[key];\n }\n}\n\n/**\n * A snippet of code together with a relevance score\n */\nexport interface ScoredSnippetMarker {\n score: number;\n startLine: number;\n endLine: number;\n}\n\nexport interface ScoredSnippet extends ScoredSnippetMarker {\n snippet: string;\n relativePath?: string;\n}\n\nexport enum SortOptions {\n Ascending = 'ascending',\n Descending = 'descending',\n None = 'none',\n}\n\nclass Tokenizer {\n private readonly stopsForLanguage: Set;\n constructor(doc: DocumentInfo) {\n this.stopsForLanguage = SPECIFIC_STOPS.get(doc.languageId) ?? GENERIC_STOPS;\n }\n tokenize(a: string): Set {\n return new Set(splitIntoWords(a).filter(x => !this.stopsForLanguage.has(x)));\n }\n}\n\n/**\n * For a number of documents (the neighboring tabs),\n * associate to each document and its kind of window computation (as key)\n * the sequence b_1, ..., b_n, where\n * b_i is the set of tokens in the ith window --\n * e.g. for window length 10,\n * WINDOWED_TOKEN_SET_CACHE(doc)[0]\n * holds the tokens in the first 10 lines of the document.\n */\nconst WINDOWED_TOKEN_SET_CACHE = new FifoCache[]>(20);\n\n/**\n * A matcher factory should be able to produce one matcher\n * for each document to which matches are to be found.\n * I.e. MatcherFactory.to(doc) is a matcher that matches against doc.\n */\nexport interface MatcherFactory {\n to(doc: DocumentInfoWithOffset): {\n findBestMatch(objectDoc: DocumentInfo): Promise;\n findMatches(\n objectDoc: DocumentInfo,\n snippetSelectionOption: SnippetSelectionOption | undefined,\n snippetSelectionK?: number\n ): Promise;\n };\n}\n\n/**\n * For a given document, extracts the best matching snippets from other documents\n * by comparing all of a set of windows in the object doc.\n */\nexport abstract class WindowedMatcher {\n protected referenceDoc: DocumentInfoWithOffset;\n protected tokenizer: Tokenizer;\n private _referenceTokens: Set | undefined;\n\n protected abstract id(): string;\n protected abstract similarityScore(a: Set, b: Set): number;\n /**\n * Given an array of lines, returns an array of pairs of indices,\n * such that each pair is a window of lines to consider adding.\n * startLine is inclusive, endLine is exclusive.\n * @param lines Lines of a source text, in order\n */\n protected abstract getWindowsDelineations(lines: string[]): [number, number][];\n\n protected abstract trimDocument(doc: DocumentInfoWithOffset): string;\n\n /**\n * Subclasses should implement this method to return the desired context info for tokenization\n * from the reference document. Will only be called after constructor is finished.\n * The tokenizer used in WindowedMatcher is a simple tokenizer for Jaccard similarity, NOT an\n * OpenAI model tokenizer.\n */\n protected abstract _getCursorContextInfo(referenceDoc: DocumentInfoWithOffset): CursorContextInfo;\n\n protected constructor(referenceDoc: DocumentInfoWithOffset, cursorContextFix: boolean) {\n this.referenceDoc = referenceDoc;\n this.tokenizer = new Tokenizer(referenceDoc); // Just uses language info from referenceDoc\n\n if (!cursorContextFix) {\n // If cursorContextFix is false, default to setting the reference tokens\n // in the constructor\n this._referenceTokens = this.tokenizer.tokenize(this.trimDocument(referenceDoc));\n }\n }\n\n /**\n * Lazy getter for referenceTokens since it relies on properties\n * that are not initialized in the constructor of WindowedMatcher\n * but in the constructor of its subclasses.\n */\n get referenceTokens(): Set {\n // If cursorContextFix is active, _referenceTokens is not set in the constructor\n // (hence undefined) and _getCursorContextInfo is used instead.\n if (this._referenceTokens === undefined) {\n this._referenceTokens = this.tokenizer.tokenize(this._getCursorContextInfo(this.referenceDoc).context);\n }\n return this._referenceTokens;\n }\n\n /**\n * Returns a sorted array of snippets with their scores according to the sort option.\n * @param snippets ScoredSnippet[]\n *\n */\n sortScoredSnippets(snippets: ScoredSnippetMarker[], sortOption = SortOptions.Descending): ScoredSnippetMarker[] {\n return sortOption == SortOptions.Ascending\n ? snippets.sort((snippetA, snippetB) => (snippetA.score > snippetB.score ? 1 : -1))\n : sortOption == SortOptions.Descending\n ? snippets.sort((snippetA, snippetB) => (snippetA.score > snippetB.score ? -1 : 1))\n : snippets;\n }\n /**\n * Returns all snippet markers with their scores.\n * @param objectDoc\n *\n */\n retrieveAllSnippets(objectDoc: DocumentInfo, sortOption = SortOptions.Descending): ScoredSnippetMarker[] {\n const snippets: ScoredSnippetMarker[] = [];\n\n if (objectDoc.source.length === 0 || this.referenceTokens.size === 0) {\n return snippets;\n }\n\n const lines = objectDoc.source.split('\\n');\n const key = this.id() + ':' + objectDoc.source;\n const tokensInWindows = WINDOWED_TOKEN_SET_CACHE.get(key) ?? [];\n // if the tokens are not cached, we need to compute them\n const needToComputeTokens = tokensInWindows.length == 0;\n const tokenizedLines = needToComputeTokens ? lines.map(this.tokenizer.tokenize, this.tokenizer) : [];\n\n // Compute the windows with the score\n for (const [index, [startLine, endLine]] of this.getWindowsDelineations(lines).entries()) {\n if (needToComputeTokens) {\n const tokensInWindow = new Set();\n tokenizedLines.slice(startLine, endLine).forEach(x => x.forEach(tokensInWindow.add, tokensInWindow));\n tokensInWindows.push(tokensInWindow);\n }\n // Now tokensInWindows[index] contains the tokens in the window, whether we just computed them or not\n const tokensInWindow = tokensInWindows[index];\n const score = this.similarityScore(tokensInWindow, this.referenceTokens);\n snippets.push({\n score,\n startLine,\n endLine,\n });\n }\n\n // If we didn't get the token sets from the cache, time to put them there!\n if (needToComputeTokens) {\n WINDOWED_TOKEN_SET_CACHE.put(key, tokensInWindows);\n }\n\n return this.sortScoredSnippets(snippets, sortOption);\n }\n\n async findMatches(\n objectDoc: DocumentInfo,\n snippetSelectionOption = SnippetSelectionOption.BestMatch,\n snippetSelectionK?: number\n ): Promise {\n if (snippetSelectionOption == SnippetSelectionOption.BestMatch) {\n const snippet = await this.findBestMatch(objectDoc);\n return snippet ? [snippet] : [];\n }\n\n if (snippetSelectionOption == SnippetSelectionOption.TopK) {\n return (await this.findTopKMatches(objectDoc, snippetSelectionK)) || [];\n }\n\n return [];\n }\n\n /**\n * Returns the snippet from the object document\n * that is most similar to the reference Document\n * together with its Jaccard score\n *\n * @param objectDoc\n */\n async findBestMatch(objectDoc: DocumentInfo): Promise {\n if (objectDoc.source.length === 0 || this.referenceTokens.size === 0) {\n return undefined;\n }\n const lines = objectDoc.source.split('\\n');\n const snippets = this.retrieveAllSnippets(objectDoc, SortOptions.Descending);\n\n // safe guard against empty lists\n if (snippets.length === 0) {\n return undefined;\n }\n if (snippets[0].score === 0) {\n return undefined;\n }\n\n // Compute the window with the best match\n const snippetCode = lines.slice(snippets[0].startLine, snippets[0].endLine).join('\\n');\n return {\n snippet: snippetCode,\n semantics: SnippetSemantics.Snippet,\n provider: SnippetProviderType.NeighboringTabs,\n ...snippets[0],\n };\n }\n\n /**\n * Returns the snippet from the object document\n * that is most similar to the reference Document\n * together with its Jaccard score\n *\n * @param objectDoc\n */\n async findTopKMatches(\n objectDoc: DocumentInfo,\n snippetSelectionK = 1\n ): Promise {\n if (objectDoc.source.length === 0 || this.referenceTokens.size === 0 || snippetSelectionK < 1) {\n return undefined;\n }\n\n const lines = objectDoc.source.split('\\n');\n\n const snippets = this.retrieveAllSnippets(objectDoc, SortOptions.Descending);\n if (snippets.length === 0 || snippets[0].score === 0) {\n return undefined;\n }\n\n const nonOverlappingSnippets: ScoredSnippetMarker[] = [snippets[0]];\n\n // step forward into snippets until finding a snippet that has no overlap with any snippet in nonOverlappingSnippets\n for (\n let currentIndex = 1;\n currentIndex < snippets.length && nonOverlappingSnippets.length < snippetSelectionK;\n currentIndex++\n ) {\n if (\n nonOverlappingSnippets.findIndex(\n snippet =>\n snippets[currentIndex].startLine < snippet.endLine &&\n snippets[currentIndex].endLine > snippet.startLine\n ) == -1\n ) {\n nonOverlappingSnippets.push(snippets[currentIndex]);\n }\n }\n return nonOverlappingSnippets.map(snippetMarker => ({\n snippet: lines.slice(snippetMarker.startLine, snippetMarker.endLine).join('\\n'),\n semantics: SnippetSemantics.Snippet,\n provider: SnippetProviderType.NeighboringTabs,\n ...snippetMarker,\n }));\n }\n}\n\nasync function getNeighboringFunctions(neighbor: DocumentInfo) {\n let neighborFuncs: DocumentInfo[] = [];\n if (isSupportedLanguageId(neighbor.languageId)) {\n const funcPositions = await getFunctionPositions(neighbor.languageId, neighbor.source);\n for (let i = 0; i < funcPositions.length; i++) {\n let {startIndex, endIndex} = funcPositions[i];\n let func_source = neighbor.source.substring(startIndex, endIndex);\n neighborFuncs.push({\n source: func_source,\n relativePath: neighbor.relativePath,\n languageId: neighbor.languageId,\n uri: neighbor.uri,\n });\n }\n }\n return neighborFuncs;\n}\n\nexport abstract class FunctionalMatcher extends WindowedMatcher {\n protected constructor(referenceDoc: DocumentInfoWithOffset, cursorContextFix: boolean) {\n super(referenceDoc, cursorContextFix);\n }\n\n getMatchingScore(neighborDoc: DocumentInfo): ScoredSnippet {\n const neighborDocTokens = this.tokenizer.tokenize(neighborDoc.source);\n const score = this.similarityScore(neighborDocTokens, this.referenceTokens);\n\n return {\n snippet: neighborDoc.source,\n score: score,\n startLine: 0,\n endLine: 0,\n };\n }\n\n override async findBestMatch(objectDoc: DocumentInfo): Promise {\n const snippets = await this.findMatches(objectDoc);\n // safe guard against empty lists\n if (snippets.length === 0) {\n return undefined;\n }\n if (snippets[0].score === 0) {\n return undefined;\n }\n return snippets[0];\n }\n\n override async findMatches(\n objectDoc: DocumentInfo,\n snippetSelectionOption?: SnippetSelectionOption,\n snippetSelectionK?: number\n ): Promise {\n if (objectDoc.source.length === 0 || this.referenceTokens.size === 0) {\n return [];\n }\n const neighborFuncs = await getNeighboringFunctions(objectDoc);\n\n if (neighborFuncs.length == 0) {\n // if no function was extracted, return default code snippets.\n const lines = objectDoc.source.split('\\n');\n const snippets = this.retrieveAllSnippets(objectDoc, SortOptions.Descending);\n // safe guard against empty lists\n if (snippets.length === 0) {\n return [];\n }\n if (snippets[0].score === 0) {\n return [];\n }\n // Compute the window with the best match\n const snippetCode = lines.slice(snippets[0].startLine, snippets[0].endLine).join('\\n');\n return [\n {\n snippet: snippetCode,\n semantics: SnippetSemantics.Snippet,\n provider: SnippetProviderType.NeighboringTabs,\n ...snippets[0],\n },\n ];\n }\n\n const snippets: SnippetWithProviderInfo[] = [];\n for (let func of neighborFuncs) {\n const snippet = this.getMatchingScore(func);\n snippets.push({\n semantics: SnippetSemantics.Function,\n provider: SnippetProviderType.NeighboringTabs,\n ...snippet,\n });\n }\n return snippets;\n }\n}\n\n/**\n * Split by non-alphanumeric characters\n */\nexport function splitIntoWords(a: string): string[] {\n return a.split(/[^a-zA-Z0-9]/).filter(x => x.length > 0);\n}\n\nconst ENGLISH_STOPS = new Set([\n // - pronouns\n 'we',\n 'our',\n 'you',\n 'it',\n 'its',\n 'they',\n 'them',\n 'their',\n 'this',\n 'that',\n 'these',\n 'those',\n // - verbs\n 'is',\n 'are',\n 'was',\n 'were',\n 'be',\n 'been',\n 'being',\n 'have',\n 'has',\n 'had',\n 'having',\n 'do',\n 'does',\n 'did',\n 'doing',\n 'can',\n 'don',\n 't',\n 's',\n 'will',\n 'would',\n 'should',\n // - wh-words\n 'what',\n 'which',\n 'who',\n 'when',\n 'where',\n 'why',\n 'how',\n // - articles\n 'a',\n 'an',\n 'the',\n // - prepositions\n 'and',\n 'or',\n 'not',\n 'no',\n 'but',\n 'because',\n 'as',\n 'until',\n 'again',\n 'further',\n 'then',\n 'once',\n 'here',\n 'there',\n 'all',\n 'any',\n 'both',\n 'each',\n 'few',\n 'more',\n 'most',\n 'other',\n 'some',\n 'such',\n 'above',\n 'below',\n 'to',\n 'during',\n 'before',\n 'after',\n 'of',\n 'at',\n 'by',\n 'about',\n 'between',\n 'into',\n 'through',\n 'from',\n 'up',\n 'down',\n 'in',\n 'out',\n 'on',\n 'off',\n 'over',\n 'under',\n 'only',\n 'own',\n 'same',\n 'so',\n 'than',\n 'too',\n 'very',\n 'just',\n 'now',\n]);\n\n/**\n * A generic set of stops for any programming language\n */\nconst GENERIC_STOPS = new Set([\n // words that are common in programming languages\n 'if',\n 'then',\n 'else',\n 'for',\n 'while',\n 'with',\n 'def',\n 'function',\n 'return',\n 'TODO',\n 'import',\n 'try',\n 'catch',\n 'raise',\n 'finally',\n 'repeat',\n 'switch',\n 'case',\n 'match',\n 'assert',\n 'continue',\n 'break',\n 'const',\n 'class',\n 'enum',\n 'struct',\n 'static',\n 'new',\n 'super',\n 'this',\n 'var',\n // words that are common in English comments:\n ...ENGLISH_STOPS,\n]);\n\n/**\n * Specific stops for certain languages\n * Note that ENGLISH_STOPS need to be added to this set if they are to be included\n */\nconst SPECIFIC_STOPS: Map> = new Map([\n // none yet\n]);\n","import {commentBlockAsSingles} from '../languageMarker';\nimport {Tokenizer} from '../tokenization';\nimport {Priorities} from '../wishlist';\nimport {ScoredSnippet} from './selectRelevance';\n\n/** Indicates what provider produced a given snippet. */\nexport enum SnippetProviderType {\n NeighboringTabs = 'neighboring-tabs',\n Retrieval = 'retrieval',\n SymbolDef = 'symbol-def',\n}\n\n/**\n * The semantics of a snippet. For example, some providers\n * might always produce a snippet that is a complete function\n * whereas others might produce a snippet that are inherhently\n * partial.\n */\nexport enum SnippetSemantics {\n /** The contents of the snippet is a function. */\n Function = 'function',\n /** The contents of the snippet is an unspecified snippet. */\n Snippet = 'snippet',\n /** The following are from hover text */\n Variable = 'variable',\n Parameter = 'parameter',\n Method = 'method',\n Class = 'class',\n Module = 'module',\n Alias = 'alias',\n Enum = 'enum member',\n Interface = 'interface',\n}\n\n/** Extends a ScoredSnippet with information about its provider. */\nexport interface SnippetWithProviderInfo extends ScoredSnippet {\n /** The provider that created this snippet. */\n provider: SnippetProviderType;\n /** The semantical meaning of the snippet's contents. */\n semantics: SnippetSemantics;\n}\n\nexport interface SingleSnippetProviderOptions {\n /** Which function to apply for score normalization */\n normalizationFunction: 'affine';\n /** The parameters/coefficients for the score normalization function */\n normalizationParams: number[];\n /**\n * Number of snippets reserved to this provider, disregarding whether other\n * providers have higher-scoring snippets.\n */\n reservedSnippetCount?: number;\n}\n\n/**\n * The options for all snippet providers.\n */\nexport type SnippetProviderOptions = Record;\n\n/**\n * A snippet with a normalized score\n */\nexport interface SnippetWithNormalizedScore extends Omit {\n providerScore: number;\n normalizedScore: number;\n}\n\n/**\n * The most processed form of a snippet that contains fully rendered and\n * prioritized snippets, including their token count. Can be used directly\n * with the wishlist. The priority is a wishlist priority, not a score.\n */\nexport interface ProcessedSnippet {\n /** The announced (i.e. formatted) snippet */\n announcedSnippet: string;\n /** Wishlish priority */\n priority: number;\n /** The score of the snippet as given directly by the provider */\n providerScore: number;\n /** The normalized score */\n normalizedScore: number;\n /** The number of tokens in the (announced) snippet */\n tokens: number;\n /** The provider */\n provider: SnippetProviderType;\n /** Relative path */\n relativePath?: string;\n}\n\n/**\n * A map from semantics enum to a human / LLM-readable label that we\n * include when announcing a snippet.\n */\nconst snippetSemanticsToString: {[key in SnippetSemantics]: string} = {\n [SnippetSemantics.Function]: 'function',\n [SnippetSemantics.Snippet]: 'snippet',\n [SnippetSemantics.Variable]: 'variable',\n [SnippetSemantics.Parameter]: 'parameter',\n [SnippetSemantics.Method]: 'method',\n [SnippetSemantics.Class]: 'class',\n [SnippetSemantics.Module]: 'module',\n [SnippetSemantics.Alias]: 'alias',\n [SnippetSemantics.Enum]: 'enum member',\n [SnippetSemantics.Interface]: 'interface',\n};\n\n/**\n * Formats a snippet for inclusion in the prompt.\n *\n * This does three things:\n * 1. Adds an announcement headline.\n * 2. Formats each line as a single-line comment in the language of the target doc.\n * 3. Adds a trailing newline if one was not already there.\n */\nexport function announceSnippet(snippet: Omit, targetDocLanguageId: string): string {\n const semantics = snippetSemanticsToString[snippet.semantics];\n const headline = snippet.relativePath\n ? `Compare this ${semantics} from ${snippet.relativePath}:`\n : `Compare this ${semantics}:`;\n let headlinedSnippet = headline + '\\n' + snippet.snippet;\n if (!headlinedSnippet.endsWith('\\n')) {\n headlinedSnippet += '\\n';\n }\n return commentBlockAsSingles(headlinedSnippet, targetDocLanguageId);\n}\n\nexport function normalizeSnippetScore(\n snippet: S,\n providerOptions: SnippetProviderOptions\n): Omit & {providerScore: number; normalizedScore: number} {\n const options = providerOptions[snippet.provider];\n if (!options) {\n throw new Error('Unknown snippet provider: ' + snippet.provider);\n }\n const {score: providerScore, ...snippetRem} = snippet;\n let normalizedScore = providerScore;\n if (options.normalizationFunction === 'affine') {\n const [a, b] = options.normalizationParams;\n normalizedScore = a * providerScore + b;\n } else {\n throw new Error(\n `Unknown normalization function ${options.normalizationFunction} for snippet provider ${snippet.provider}`\n );\n }\n return {\n ...snippetRem, // Remove score\n providerScore,\n normalizedScore,\n };\n}\n\n/**\n * Sorts snippets in-place in descending order by their normalized score.\n */\nfunction sortSnippetsDescending(snippets: S[]): void {\n snippets.sort((a, b) => b.normalizedScore - a.normalizedScore);\n}\n\n/**\n * Selects `numberOfSnippets` simultanously adhering to two principles:\n * 1. Select the best `reservedSnippetCount` snippets from each provider,\n * according to their normalized score.\n * 2. Select the best snippets according to normalized score across all\n * providers, until `numberOfSnippets` have been selected in total.\n *\n * NOTE: If the total number of `reservedSnippetCount` exceeds\n * `numberOfSnippets`, then this method throws an exception.\n *\n * The returned snippets are returned in order of decreasing normalized score,\n * i.e. the best snippets are first in each list.\n */\nexport function selectSnippets(\n snippets: SnippetWithProviderInfo[],\n numberOfSnippets: number,\n providerOptions: SnippetProviderOptions\n): {reserved: SnippetWithNormalizedScore[]; candidates: SnippetWithNormalizedScore[]} {\n if (numberOfSnippets == 0) {\n return {reserved: [], candidates: []};\n }\n // Compute all the normalized scores\n const normalizedSnippets: SnippetWithNormalizedScore[] = snippets.map(snippet =>\n normalizeSnippetScore(snippet, providerOptions)\n );\n // Split snippets by provider\n const snippetsByProvider = new Map();\n let provider: SnippetProviderType;\n for (provider in providerOptions) {\n snippetsByProvider.set(provider, []);\n }\n for (const snippet of normalizedSnippets) {\n let snippets = snippetsByProvider.get(snippet.provider);\n if (!snippets) {\n throw new Error('Unknown snippet provider: ' + snippet.provider);\n }\n snippets.push(snippet);\n }\n for (const [_provider, snippets] of snippetsByProvider) {\n sortSnippetsDescending(snippets);\n }\n // Pick all reserved snippets\n let reserved: SnippetWithNormalizedScore[] = [];\n for (provider in providerOptions) {\n const options = providerOptions[provider];\n const count = options.reservedSnippetCount || 0;\n if (count > 0) {\n const snippets = snippetsByProvider.get(provider) || [];\n reserved = reserved.concat(snippets.slice(0, count));\n snippetsByProvider.set(provider, snippets.slice(count));\n }\n }\n sortSnippetsDescending(reserved);\n let candidates: SnippetWithNormalizedScore[] = [];\n if (reserved.length > numberOfSnippets) {\n throw new Error('Reserved snippet count exceeds number of snippets');\n }\n if (reserved.length < numberOfSnippets) {\n // Flatten and resort all remaining snippets\n const remaining = Array.from(snippetsByProvider.values()).flat();\n sortSnippetsDescending(remaining);\n // Pick the best remaining snippets\n candidates = remaining.slice(0, numberOfSnippets - reserved.length);\n }\n return {reserved, candidates};\n}\n\n/**\n * \"Processes\" a list of snippets and assigns priorities.\n *\n * The snippets will get their scores normalized, will be announced, and will be\n * selected according to best-normalized score while adhering to any\n * reservations stipulated in `providerOptions`. See {@link selectSnippets} for\n * details.\n *\n * The returned snippets will then be assigned priorites descendingly from\n * `priorities.high` respectively `priorities.low`, or not included at all,\n * according to two parameters `totalPrioritized` and `highPriorityBudget`.\n *\n * The snippets are also returned by increasing normalized score. If they are\n * enqueued in this order in the wishlist, then the highest-scoring snippets\n * will appear closest to the cursor.\n *\n * By definition, a reserved snippet may be selected with higher priority than a\n * non-reserved candidate snippet with better normalized score. The reserved\n * snippet is then guaranteed to be selected in the wishlist before the\n * non-reserved snippet, but if both are ultimately selected, the non-reserved\n * one will appear last in the prompt.\n *\n * @param snippets The snippets to process.\n * @param providerOptions The options for each snippet provider.\n * @param priorities Priorities to assign to snippets: high priority is assigned\n * to the first `highPriorityBudget` tokens, low priority to the remaining\n * `totalPrioritized` snippets.\n * @param totalPrioritized The maximal number of snippets to return, i.e. if\n * more snippets are passed in, we remove the least desirable.\n * @param highPriorityBudget The number of tokens to use for high priority\n * snippets\n */\nexport function processSnippetsForWishlist(\n snippets: SnippetWithProviderInfo[],\n targetDocLanguageId: string,\n tokenizer: Tokenizer,\n providerOptions: SnippetProviderOptions,\n priorities: {priorities: Priorities; low: number; high: number},\n totalPrioritized: number,\n highPriorityBudget: number\n): ProcessedSnippet[] {\n // selectSnippets returns in order of decreasing normalized score, i.e. best\n // first in each list.\n const {reserved, candidates} = selectSnippets(snippets, totalPrioritized, providerOptions);\n let usedBudget = 0;\n let processedSnippets: ProcessedSnippet[] = [];\n let nextHighPriority = priorities.high;\n let nextLowPriority = priorities.low;\n function process(snippet: SnippetWithNormalizedScore, usedBudget: number): number {\n const announced = announceSnippet(snippet, targetDocLanguageId);\n const tokens = tokenizer.tokenLength(announced);\n let priority: number;\n if (usedBudget + tokens <= highPriorityBudget) {\n priority = nextHighPriority;\n nextHighPriority = priorities.priorities.justBelow(priority);\n } else {\n priority = nextLowPriority;\n nextLowPriority = priorities.priorities.justBelow(priority);\n }\n processedSnippets.push({\n announcedSnippet: announced,\n provider: snippet.provider,\n providerScore: snippet.providerScore,\n normalizedScore: snippet.normalizedScore,\n priority,\n tokens,\n relativePath: snippet.relativePath,\n });\n return usedBudget + tokens;\n }\n // We first assign priorities to the reserved snippets.\n // Then to the remaining candidates.\n for (const snippet of [...reserved, ...candidates]) {\n if (processedSnippets.length >= totalPrioritized) {\n break;\n }\n usedBudget = process(snippet, usedBudget);\n }\n // Re-sort the list by increasing normalized score\n sortSnippetsDescending(processedSnippets);\n processedSnippets.reverse();\n return processedSnippets;\n}\n","import {IndentationTree} from '../indentation/classes';\nimport {clearLabels, visitTree} from '../indentation/manipulation';\nimport {parseTree} from '../indentation/parsing';\n\n/**\n * Returns a list of (startline, endline) pairs representing fixed size windows\n *\n * @param windowLength length of fixed size window\n * @param lines lines to extract fixed size windows from\n * @returns list of (startline, endline) pairs\n */\nexport function getBasicWindowDelineations(windowLength: number, lines: string[]): [number, number][] {\n const windows: [number, number][] = [];\n const length = lines.length;\n if (length == 0) {\n return [];\n }\n if (length < windowLength) {\n // if not long enough to reach a single window length, return full document\n return [[0, length]];\n }\n for (let startLine = 0; startLine < length - windowLength + 1; startLine++) {\n windows.push([startLine, startLine + windowLength]);\n }\n return windows;\n}\n\n/**\n * Calculate all windows like with the following properties:\n * - they are all of length <= maxLength\n * - they are all of length >= minLength\n * - except if they are followed by enough blank lines to reach length >= minLength\n * - they are a contiguous subsequence from [parentline, child1, child2, ..., childn]\n * - which neither starts nor ends with a blank line\n * Note that windows of the form \"parent with all its children\" could\n * appear in different ways with that definition,\n * e.g. as \"childi\" of its parent, and as \"parent, child1, ..., childn\" where the parent is itself.\n * Nevertheless, it will only be listed once.\n * @param lines\n */\nexport function getIndentationWindowsDelineations(\n lines: string[],\n languageId: string,\n minLength: number,\n maxLength: number\n): [number, number][] {\n // Deal with degenerate cases\n if (lines.length < minLength || maxLength == 0) {\n return [];\n }\n\n const windows: [number, number][] = [];\n // For each node, keep track of how long its children extend, or whether it can't be included in a window anyhow\n type TreeLabel = {totalLength: number; firstLineAfter: number};\n // Todo: add groupBlocks here as well\n const labeledTree = clearLabels(parseTree(lines.join('\\n'), languageId)) as IndentationTree;\n visitTree(\n labeledTree,\n node => {\n if (node.type === 'blank') {\n node.label = {totalLength: 1, firstLineAfter: node.lineNumber + 1};\n return;\n }\n // Statistics to gather on the way, to be consumed by parents\n let totalLength = node.type === 'line' ? 1 : 0;\n let firstLineAfter = node.type === 'line' ? node.lineNumber + 1 : NaN;\n // we consider intervals [a, b] which correspond to including children number a (-1 means parent) through b exclusive.\n // the window start and end lines are computed here, such that startLine (inclusive) to endLine (exclusive) covers the window\n function getStartLine(a: number) {\n return a == -1\n ? firstLineAfter - totalLength\n : node.subs[a].label!.firstLineAfter - node.subs[a].label!.totalLength;\n }\n function getEndLine(b: number, startLine: number) {\n return b == 0 ? startLine + 1 : node.subs[b - 1].label!.firstLineAfter;\n }\n // iteratively go through candidates for [a, b[:\n // if from a to including b would be too long, add the window a to b exclusive and increase a as far as necessary, otherwise increase b\n // a = -1 will mean: include the parent\n let a = node.type === 'line' ? -1 : 0; // if the parent is a line, consider using it\n let lengthFromAToBInclusive = node.type === 'line' ? 1 : 0; // if so, the length is 1, otherwise 0\n let lastBThatWasntABlank = 0;\n for (let b = 0; b < node.subs.length; b++) {\n // don't let the window start with blank lines\n while (a >= 0 && a < node.subs.length && node.subs[a].type === 'blank') {\n lengthFromAToBInclusive -= node.subs[a].label!.totalLength;\n a++;\n }\n if (node.subs[b].type !== 'blank') {\n lastBThatWasntABlank = b;\n }\n // add subs[b] to the window\n firstLineAfter = node.subs[b].label!.firstLineAfter;\n totalLength += node.subs[b].label!.totalLength;\n lengthFromAToBInclusive += node.subs[b].label!.totalLength;\n if (lengthFromAToBInclusive > maxLength) {\n const startLine = getStartLine(a);\n const endLine = getEndLine(b, startLine);\n const endLineTrimmedForBlanks =\n lastBThatWasntABlank == b ? endLine : getEndLine(lastBThatWasntABlank, startLine);\n // for the test, note that blanks count for getting us over the minLength:\n if (minLength <= endLine - startLine) {\n windows.push([startLine, endLineTrimmedForBlanks]);\n }\n while (lengthFromAToBInclusive > maxLength) {\n // remove subs[a] from the window\n lengthFromAToBInclusive -=\n a == -1\n ? node.type == 'line'\n ? 1\n : // this cannot happen: if not a line, we start with a = 0 unless it's a line\n 0\n : node.subs[a].label!.totalLength;\n a++;\n }\n }\n }\n // if there's anything left to add (a < b), do it\n if (a < node.subs.length) {\n const startLine = getStartLine(a);\n const endLine = firstLineAfter;\n const endLineTrimmedForBlanks =\n a == -1 ? endLine : node.subs[lastBThatWasntABlank].label!.firstLineAfter;\n // note: even if fillUpWindowWithPartOfNextNeighbor is true,\n // there is no next neighbor here, so nothing to extend the window to\n if (minLength <= endLine - startLine) {\n windows.push([startLine, endLineTrimmedForBlanks]);\n }\n // Set the node's label\n }\n node.label = {totalLength, firstLineAfter};\n },\n 'bottomUp'\n );\n // windows is an array of [start, end] pairs,\n // but some may appear twice, and should be removed\n return windows\n .sort((a, b) => a[0] - b[0] || a[1] - b[1])\n .filter((a, i, arr) => i == 0 || a[0] != arr[i - 1][0] || a[1] != arr[i - 1][1]);\n}\n","export interface ScoredSuffix {\n score: number;\n}\n\nexport function findEditDistanceScore(a: number[], b: number[]): ScoredSuffix {\n if (a.length === 0 || b.length === 0) {\n return {score: a.length + b.length};\n }\n\n const matrix = Array.from({length: a.length}).map(() => Array.from({length: b.length}).map(() => 0));\n for (let i = 0; i < a.length; i++) {\n matrix[i][0] = i;\n }\n\n for (let i = 0; i < b.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j < b.length; j++) {\n for (let i = 0; i < a.length; i++) {\n matrix[i][j] = Math.min(\n (i == 0 ? j : matrix[i - 1][j]) + 1,\n (j == 0 ? i : matrix[i][j - 1]) + 1,\n (i == 0 || j == 0 ? Math.max(i, j) : matrix[i - 1][j - 1]) + (a[i] == b[j] ? 0 : 1)\n );\n }\n }\n\n return {score: matrix[a.length - 1][b.length - 1]};\n}\n","export * from './tokenizer';\n","// This file is based on\n// https://github.com/latitudegames/GPT-3-Encoder\n// by AIDungeon\n// which is released under the MIT License:\n//\n// MIT License\n//\n// Copyright (c) 2020 AIDungeon\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n//\n// The original from https://github.com/latitudegames/GPT-3-Encoder\n// includes code which was modified from https://github.com/openai/gpt-2\n//\n// Important invariants about tokenization:\n// - Tokenization works by a first pass that splits the text into chunks using\n// the regular expression `pat`.\n// - Each chunk is then split into tokens.\n// - All chunks' tokens are then concatenated to form the complete tokenization.\n// - Newlines appear in only three tokens: \"\\n\", \"\\n\\n\", \"\\n\"+nonbreaking space\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {TextDecoder, TextEncoder} from 'util';\n\n/////\n// Helper functions\n/////\n\nconst range = (x: number, y: number) => {\n const res = Array.from(Array(y).keys()).slice(x);\n return res;\n};\n\nconst ord = (x: string) => {\n return x.charCodeAt(0);\n};\n\nconst chr = (x: number) => {\n return String.fromCharCode(x);\n};\n\nconst textDecoder = new TextDecoder('utf-8');\nconst decodeStr = (arr: number[]) => {\n return textDecoder.decode(new Uint8Array(arr));\n};\n\nconst dictZip = (x: string[], y: number[]) => {\n const result = new Map();\n x.forEach((_, i) => {\n result.set(x[i], y[i]);\n });\n return result;\n};\n\nfunction bytes_to_unicode(map: Map) {\n const bs = range(ord('!'), ord('~') + 1).concat(range(ord('¡'), ord('¬') + 1), range(ord('®'), ord('ÿ') + 1));\n\n let cs = bs.slice();\n let n = 0;\n for (let b = 0; b < 2 ** 8; b++) {\n if (!bs.includes(b)) {\n bs.push(b);\n cs.push(2 ** 8 + n);\n n = n + 1;\n }\n }\n\n const cs_ = cs.map(x => chr(x));\n for (let i = 0; i < bs.length; i++) {\n map.set(bs[i], cs_[i]);\n }\n}\n\nfunction get_char_pairs(word: string[]): Set<[string, string]> {\n const pairs = new Set<[string, string]>();\n let prev_char = word[0];\n for (let i = 1; i < word.length; i++) {\n const char = word[i];\n pairs.add([prev_char, char]);\n prev_char = char;\n }\n return pairs;\n}\n\nconst pat = /'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+/gu;\n\nexport interface Tokenizer {\n /**\n * Returns the tokenization of the input string as a list of integers\n * representing tokens.\n */\n tokenize(text: string): Array;\n\n /**\n * Returns the string representation of the tokens in `tokens`, given in integer\n * representation.\n *\n * This is the functional inverse of `tokenize`.\n */\n detokenize(tokens: number[]): string;\n\n /**\n * Returns the tokenization of the input string as a list of strings.\n *\n * The concatenation of the output of this function is equal to the input.\n */\n tokenizeStrings(text: string): string[];\n\n /**\n * Return the length of `text` in number of tokens.\n *\n * @param {str} text - The input text\n * @returns {number}\n */\n tokenLength(text: string): number;\n\n /**\n * Return a suffix of `text` which is `n` tokens long.\n * If `text` is at most `n` tokens, return `text`.\n *\n * Note: This implementation does not attempt to return\n * the longest possible suffix, only *some* suffix of at\n * most `n` tokens.\n *\n * @param {string} text - The text from which to take\n * @param {number} n - How many tokens to take\n * @returns A suffix of `text`, as a `string`.\n */\n takeLastTokens(text: string, n: number): string;\n\n /**\n * Return a prefix of `text` which is `n` tokens long.\n * If `text` is at most `n` tokens, return `text`.\n *\n * Note: This implementation does not attempt to return\n * the longest possible prefix, only *some* prefix of at\n * most `n` tokens.\n *\n * @param {string} text - The text from which to take\n * @param {number} n - How many tokens to take\n * @returns A prefix of `text`, as a `{ text: string, tokens: number[] }`.\n */\n takeFirstTokens(text: string, n: number): {text: string; tokens: number[]};\n\n /**\n * Return the longest suffix of `text` of complete lines and is at most\n * `n` tokens long.\n * @param {string} text - The text from which to take\n * @param {number} n - How many tokens to take\n */\n takeLastLinesTokens(text: string, n: number): string;\n}\n\nexport enum TokenizerName {\n cushman001 = 'cushman001',\n cushman002 = 'cushman002',\n mock = 'mock',\n}\n\nconst tokenizers = new Map();\n\nexport function getTokenizer(name: TokenizerName = TokenizerName.cushman002): Tokenizer {\n let tokenizer = tokenizers.get(name);\n if (tokenizer !== undefined) {\n return tokenizer;\n }\n\n if (name === TokenizerName.mock) {\n tokenizer = new MockTokenizer();\n } else {\n tokenizer = new BPETokenizer(name);\n }\n tokenizers.set(name, tokenizer);\n return tokenizer;\n}\n\nclass BPETokenizer implements Tokenizer {\n private decoder = new Map();\n private encoder: Map;\n private bpe_ranks: Map;\n private byte_encoder = new Map();\n private byte_decoder = new Map();\n private cache = new Map();\n\n private textEncoder = new TextEncoder();\n\n constructor(name: Exclude = TokenizerName.cushman002) {\n let VOCAB = '';\n let ENCODER = '';\n if (name === TokenizerName.cushman001) {\n VOCAB = 'vocab_cushman001.bpe';\n ENCODER = 'tokenizer_cushman001.json';\n } else if (name === TokenizerName.cushman002) {\n VOCAB = 'vocab_cushman002.bpe';\n ENCODER = 'tokenizer_cushman002.json';\n } else {\n throw new Error(`Unknown tokenizer name: ${name}`);\n }\n const encoder_path = fs.readFileSync(path.resolve(__dirname, 'resources', name, ENCODER));\n const encoder_json = JSON.parse(encoder_path.toString());\n this.encoder = new Map(Object.entries(encoder_json));\n for (let [key, value] of this.encoder) {\n this.decoder.set(value, key);\n }\n\n const bpe_file = fs.readFileSync(path.resolve(__dirname, 'resources', name, VOCAB), 'utf-8');\n const bpe_merges = bpe_file\n .split('\\n')\n .slice(1)\n .filter(l => l.trim().length > 0);\n this.bpe_ranks = dictZip(bpe_merges, range(0, bpe_merges.length));\n\n bytes_to_unicode(this.byte_encoder);\n this.byte_encoder.forEach((value, key, _) => {\n this.byte_decoder.set(value, key);\n });\n }\n\n private encodeStr = (str: string): number[] => {\n return Array.from(this.textEncoder.encode(str));\n };\n\n private byteEncodeStr(s: string) {\n return this.encodeStr(s).map(x => this.byte_encoder.get(x)!);\n }\n\n private bpe(chunk: string): number[] {\n if (this.cache.has(chunk)) {\n return this.cache.get(chunk);\n }\n let bytes = this.byteEncodeStr(chunk);\n let pairs = get_char_pairs(bytes);\n if (!pairs) {\n return bytes.map(x => this.encoder.get(x)!);\n }\n\n while (true) {\n const minPairs = new Map();\n pairs.forEach(pair => {\n const joined_pair = pair.join(' ');\n const rank = this.bpe_ranks.get(joined_pair);\n minPairs.set(rank === undefined || isNaN(rank) ? 10e10 : rank, pair);\n });\n\n const minPairsKeys = Array.from(minPairs.keys()).map(x => Number(x));\n\n const bigram = minPairs.get(Math.min(...minPairsKeys));\n\n if (!bigram || !this.bpe_ranks.has(bigram.join(' '))) {\n break;\n }\n\n const first = bigram[0];\n const second = bigram[1];\n let new_bytes = [];\n let i = 0;\n\n while (i < bytes.length) {\n const j = bytes.indexOf(first, i);\n if (j === -1) {\n Array.prototype.push.apply(new_bytes, bytes.slice(i));\n break;\n }\n Array.prototype.push.apply(new_bytes, bytes.slice(i, j));\n i = j;\n\n if (bytes[i] === first && i < bytes.length - 1 && bytes[i + 1] === second) {\n new_bytes.push(first + second);\n i = i + 2;\n } else {\n new_bytes.push(bytes[i]);\n i = i + 1;\n }\n }\n\n bytes = new_bytes;\n if (bytes.length === 1) {\n break;\n } else {\n pairs = get_char_pairs(bytes);\n }\n }\n\n const tokens = bytes.map(x => this.encoder.get(x)!);\n this.cache.set(chunk, tokens);\n return tokens;\n }\n\n tokenize(text: string): number[] {\n let tokens: number[] = [];\n const matches = Array.from(text.matchAll(pat)).map(x => x[0]);\n for (let chunk of matches) {\n const chunk_tokens = this.bpe(chunk);\n Array.prototype.push.apply(tokens, chunk_tokens);\n }\n return tokens;\n }\n\n tokenLength(text: string): number {\n return this.tokenize(text).length;\n }\n\n takeLastTokens(text: string, n: number): string {\n if (n <= 0) return '';\n\n // Find long enough suffix of text that has >= n + 2 tokens\n // We add the 2 extra tokens to avoid the edge case where\n // we cut at exactly n tokens and may get an odd tokenization.\n const CHARS_PER_TOKENS_START = 4;\n const CHARS_PER_TOKENS_ADD = 1;\n let chars = Math.min(text.length, n * CHARS_PER_TOKENS_START); //First guess\n let suffix = text.slice(-chars);\n let suffixT = this.tokenize(suffix);\n while (suffixT.length < n + 2 && chars < text.length) {\n chars = Math.min(text.length, chars + n * CHARS_PER_TOKENS_ADD);\n suffix = text.slice(-chars);\n suffixT = this.tokenize(suffix);\n }\n if (suffixT.length < n) {\n // text must be <= n tokens long\n return text;\n }\n // Return last n tokens\n suffixT = suffixT.slice(-n);\n return this.detokenize(suffixT);\n }\n\n takeFirstTokens(text: string, n: number): {text: string; tokens: number[]} {\n if (n <= 0) return {text: '', tokens: []};\n\n // Find long enough suffix of text that has >= n + 2 tokens\n // We add the 2 extra tokens to avoid the edge case where\n // we cut at exactly n tokens and may get an odd tokenization.\n const CHARS_PER_TOKENS_START = 4;\n const CHARS_PER_TOKENS_ADD = 1;\n let chars = Math.min(text.length, n * CHARS_PER_TOKENS_START); //First guess\n let prefix = text.slice(0, chars);\n let prefix_t = this.tokenize(prefix);\n while (prefix_t.length < n + 2 && chars < text.length) {\n chars = Math.min(text.length, chars + n * CHARS_PER_TOKENS_ADD);\n prefix = text.slice(0, chars);\n prefix_t = this.tokenize(prefix);\n }\n if (prefix_t.length < n) {\n // text must be <= n tokens long\n return {\n text: text,\n tokens: prefix_t,\n };\n }\n // Return first n tokens\n prefix_t = prefix_t.slice(0, n);\n return {\n text: this.detokenize(prefix_t),\n tokens: prefix_t,\n };\n }\n\n takeLastLinesTokens(text: string, n: number): string {\n const suffix = this.takeLastTokens(text, n);\n if (suffix.length === text.length || text[text.length - suffix.length - 1] === '\\n') {\n // Edge case: We already took whole lines\n return suffix;\n }\n let newline = suffix.indexOf('\\n');\n return suffix.substring(newline + 1);\n }\n\n detokenize(tokens: number[]): string {\n let text = tokens.map(x => this.decoder.get(x)).join('');\n text = decodeStr(text.split('').map(x => this.byte_decoder.get(x)!));\n return text;\n }\n\n tokenizeStrings(text: string): string[] {\n const tokens = this.tokenize(text);\n return tokens.map(token =>\n decodeStr(\n this.decoder\n .get(token)!\n .split('')\n .map(char => this.byte_decoder.get(char)!)\n )\n );\n }\n}\n\nclass MockTokenizer implements Tokenizer {\n private hash = (str: string) => {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash &= hash & 0xffff;\n }\n return hash;\n };\n\n tokenize(text: string): number[] {\n return this.tokenizeStrings(text).map(this.hash);\n }\n detokenize(tokens: number[]): string {\n return tokens.map(token => token.toString()).join(' ');\n }\n tokenizeStrings(text: string): string[] {\n return text.split(/\\b/);\n }\n tokenLength(text: string): number {\n return this.tokenizeStrings(text).length;\n }\n takeLastTokens(text: string, n: number): string {\n return this.tokenizeStrings(text).slice(-n).join('');\n }\n takeFirstTokens(text: string, n: number): {text: string; tokens: number[]} {\n const tokens = this.tokenizeStrings(text).slice(0, n);\n return {text: tokens.join(''), tokens: tokens.map(this.hash)};\n }\n takeLastLinesTokens(text: string, n: number): string {\n const suffix = this.takeLastTokens(text, n);\n if (suffix.length === text.length || text[text.length - suffix.length - 1] === '\\n') {\n // Edge case: We already took whole lines\n return suffix;\n }\n let newline = suffix.indexOf('\\n');\n return suffix.substring(newline + 1);\n }\n}\n","import {LineEndingOptions, PromptInfo} from './prompt';\nimport {Tokenizer} from './tokenization';\n\nexport enum PromptElementKind {\n BeforeCursor = 'BeforeCursor',\n AfterCursor = 'AfterCursor',\n SimilarFile = 'SimilarFile',\n RetrievalSnippet = 'RetrievalSnippet',\n SymbolDefinition = 'SymbolDefinition',\n ImportedFile = 'ImportedFile',\n LanguageMarker = 'LanguageMarker',\n PathMarker = 'PathMarker',\n}\n\ninterface PromptElement {\n id: number;\n kind: PromptElementKind;\n priority: number;\n text: string;\n tokens: number;\n requires: PromptElement[]; // Elements that must have been selected before this one\n excludes: PromptElement[]; // Elements that will be skipped if this one is already selected\n score: number; // score of the element if exist else set to -1\n}\n\n/**\n * Helper: given a list of indexed items and a target index, return an\n * item of the list with the smallest index that is greater than the target.\n */\nfunction getMinimalGreater(items: T[], targetIndex: number): T | undefined {\n let bestIndex: number = Infinity;\n let best: T | undefined = undefined;\n for (const elem of items) {\n if (elem.index > targetIndex && elem.index < bestIndex) {\n best = elem;\n bestIndex = elem.index;\n }\n }\n return best;\n}\n\ninterface PromptBackgroundElement {\n score: string;\n length: number;\n}\n\nexport class PromptBackground {\n used: Map = new Map();\n unused: Map = new Map();\n\n /**\n * Register the decision to use a certain element in the prompt\n * @param element The element\n */\n markUsed(element: PromptElement): void {\n if (this.IsSnippet(element)) {\n this.used.set(element.id, this.convert(element));\n }\n }\n\n /**\n * Undo the registration\n * @param element The element\n */\n undoMarkUsed(element: PromptElement) {\n if (this.IsSnippet(element)) {\n this.used.delete(element.id);\n }\n }\n\n /**\n * Register the decision against using a certain element in the prompt\n * @param element The element\n */\n markUnused(element: PromptElement): void {\n if (this.IsSnippet(element)) {\n this.unused.set(element.id, this.convert(element));\n }\n }\n\n private convert(element: PromptElement): PromptBackgroundElement {\n return {\n score: element.score.toFixed(4),\n length: element.text.length,\n };\n }\n\n private IsSnippet(element: PromptElement): boolean {\n return element.kind == PromptElementKind.SimilarFile || element.kind == PromptElementKind.RetrievalSnippet;\n }\n}\n\nexport class PromptChoices {\n used: Map = new Map();\n unused: Map = new Map();\n\n /**\n * Counts how many elements of PromptElementKind were included.\n * Useful for telemetry.\n */\n usedCounts: Map = new Map();\n unusedCounts: Map = new Map();\n\n /**\n * Register the decision to use a certain element in the prompt\n * @param element The element\n */\n markUsed(element: PromptElement): void {\n this.used.set(element.kind, (this.used.get(element.kind) || 0) + element.tokens);\n this.usedCounts.set(element.kind, (this.usedCounts.get(element.kind) || 0) + 1);\n }\n\n /**\n * Undo the registration\n * @param element The element\n */\n undoMarkUsed(element: PromptElement) {\n this.used.set(element.kind, (this.used.get(element.kind) || 0) - element.tokens);\n this.usedCounts.set(element.kind, (this.usedCounts.get(element.kind) || 0) - 1);\n }\n\n /**\n * Register the decision against using a certain element in the prompt\n * @param element The element\n */\n markUnused(element: PromptElement): void {\n this.unused.set(element.kind, (this.unused.get(element.kind) || 0) + element.tokens);\n this.unusedCounts.set(element.kind, (this.unusedCounts.get(element.kind) || 0) + 1);\n }\n}\n\ninterface PromptElementRange {\n kind: PromptElementKind;\n start: number;\n end: number;\n}\n\nexport class PromptElementRanges {\n ranges = new Array();\n\n constructor(usedElements: {element: PromptElement; index: number}[]) {\n /**\n * Update ranges to reflect character indices of elements used in the prompt\n */\n let nextRangeStart: number = 0;\n let previousKind: PromptElementKind | undefined = undefined;\n\n for (const {element} of usedElements) {\n if (element.text.length === 0) {\n continue;\n }\n // We want to merge adjacent elements from BeforeCursor because each line is a separate element\n if (previousKind === PromptElementKind.BeforeCursor && element.kind === PromptElementKind.BeforeCursor) {\n this.ranges[this.ranges.length - 1].end += element.text.length;\n } else {\n this.ranges.push({\n kind: element.kind,\n start: nextRangeStart,\n end: nextRangeStart + element.text.length,\n });\n }\n\n previousKind = element.kind;\n nextRangeStart += element.text.length;\n }\n }\n}\n\nexport class PromptWishlist {\n private content: PromptElement[] = [];\n lineEndingOption: LineEndingOptions;\n\n /**\n * An object to keep track of a list of desired prompt elements,\n * and assemble the prompt text from them.\n * @param lineEndingOption The line ending option to use\n */\n constructor(private readonly tokenizer: Tokenizer, lineEndingOption: LineEndingOptions) {\n this.tokenizer = tokenizer;\n this.lineEndingOption = lineEndingOption;\n }\n\n getContent(): PromptElement[] {\n return [...this.content];\n }\n\n private convertLineEndings(text: string) {\n if (this.lineEndingOption === LineEndingOptions.ConvertToUnix) {\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n }\n return text;\n }\n\n /**\n * Create a new {@link PromptElement} and add it to the wishlist\n * @param text The content of the element\n * @param kind The {@link PromptElementKind} each line will have.\n * @param priority A number representing the priority (larger means higher).\n * Priorities can be managed with a {@link Priorities} object.\n * @param tokens The number of tokens used by the element if tokenzied standalone;\n * will be computed if not supplied.\n * @param score The score of the prompt element, default to -1 if not supplied\n */\n append(\n text: string,\n kind: PromptElementKind,\n priority: number,\n tokens: number = this.tokenizer.tokenLength(text),\n score: number = NaN\n ): number {\n text = this.convertLineEndings(text);\n // make new id\n const id = this.content.length;\n this.content.push({id, text, kind, priority, tokens, requires: [], excludes: [], score: score});\n return id;\n }\n\n /**\n * Append each line of the text as {@link PromptElement} to the wishlist,\n * such that earlier lines depend on later ones.\n * @param text The content of the text\n * @param kind The {@link PromptElementKind} each line will have.\n * @param priority A number representing the priority (larger means higher) all lines will have.\n * Since equal priorities are tiebreaked by the order of the lines,\n * later lines will have a better chance to get into the prompt.\n * Priorities can be managed with a {@link Priorities} object.\n */\n appendLineForLine(text: string, kind: PromptElementKind, priority: number): number[] {\n text = this.convertLineEndings(text);\n const rawLines = text.split('\\n');\n // make sure the lines are \"\\n\"-ended\n for (let i = 0; i < rawLines.length - 1; i++) {\n rawLines[i] += '\\n';\n }\n const lines: string[] = [];\n rawLines.forEach((line, i) => {\n if (line === '\\n' && lines.length > 0 && !lines[lines.length - 1].endsWith('\\n\\n')) {\n lines[lines.length - 1] += '\\n';\n } else {\n lines.push(line);\n }\n });\n const returns: number[] = [];\n lines.forEach((line, i) => {\n if (line !== '') {\n // note that is always true for i < lines.length - 1\n returns.push(this.append(line, kind, priority));\n // let earlier lines depend on later ones\n if (i > 0) {\n this.content[this.content.length - 2].requires = [this.content[this.content.length - 1]];\n }\n }\n });\n return returns;\n }\n\n /**\n * Adds a dependency of the first to the second element,\n * addressed by ID\n */\n require(dependentId: number, dependeeId: number) {\n const dependent = this.content.find(e => e.id === dependentId);\n const dependee = this.content.find(e => e.id === dependeeId);\n if (dependent && dependee) {\n dependent.requires.push(dependee);\n }\n }\n\n /**\n * Adds an exclusion:\n * if the first element is present, the second element won't be added anymore\n * addressed by ID\n */\n exclude(excludingId: number, excludedId: number) {\n const excluding = this.content.find(e => e.id === excludingId);\n const excluded = this.content.find(e => e.id === excludedId);\n if (excluding && excluded) {\n excluding.excludes.push(excluded);\n }\n }\n\n /**\n * Return a PromptInfo describing the prompt which _fulfills_ the wishlist:\n *\n * That means it has the following properties:\n * 1. the token length does not exceed maxPromptLength\n * 2. the order of the elements is as described in the wishlist\n * 3. pairs of elements such that the higher priority one excludes the lower will not both be selected\n * 4. elements that depend on another element will only be selected if the other one has higher priority and is selected\n *\n * Under all such subsets of the wishlist, it is maximal in the ordering where\n * set A < set B if there is an element e such that\n * * e in B and not in A\n * * B and A do not differ in elements of higher priority than e\n * * B and A do not differ in elements of equal priority but later position in the wishlist than e\n *\n * Implementation note: the condition in 4 that the dependee has higher priority is owing\n * to the algorithm implementing the wish fulfillment and may either be changed, or\n * we might remove the possibility to depend on a lower priority element altogether.\n *\n * @param maxPromptLength The maximum allowed prompt length in tokens\n * @returns A {@link PromptInfo} describing the prompt arrived at following the rules given above\n */\n fulfill(maxPromptLength: number): PromptInfo {\n // keep a tally of the choices made\n const tallyOfChoices = new PromptChoices();\n const promptBackground = new PromptBackground();\n // to avoid ties, move the priority of tied elements\n\n // want to add the highest priorities first,\n // but the final text should be in the order of the array\n // to keep track of that, add an index to each element of content\n const indexedContent = this.content.map((e, i) => {\n return {element: e, index: i};\n });\n\n // sorted by priority -- highest first, in case of a tie: latest first\n indexedContent.sort((a, b) => {\n if (a.element.priority === b.element.priority) {\n return b.index - a.index;\n }\n return b.element.priority - a.element.priority;\n });\n\n const idsThatHaveAlreadyBeenAdded: Set = new Set();\n const idsConflictingWithAlreadyAddedIds: Set = new Set();\n let budgetBreakingElement: {element: PromptElement; index: number} | undefined; // use this to include the first element that breaks the budget\n const remainingContent: {element: PromptElement; index: number}[] = [];\n let remainingBudget = maxPromptLength;\n indexedContent.forEach(e => {\n const element = e.element;\n const index = e.index;\n // we need to have budget, meet the requirements and have not\n // excluded the element\n if (\n remainingBudget >= 0 &&\n (remainingBudget > 0 || budgetBreakingElement === undefined) &&\n element.requires.every(r => idsThatHaveAlreadyBeenAdded.has(r.id)) &&\n !idsConflictingWithAlreadyAddedIds.has(element.id)\n ) {\n let budgetUse = element.tokens;\n // taking care of a bizarre edge case: double new line is a single token\n // _except_ if the following line starts with non-whitespace\n const probableNextElem = getMinimalGreater(remainingContent, index)?.element;\n if (element.text.endsWith('\\n\\n') && probableNextElem && !probableNextElem.text.match(/^\\s/)) {\n budgetUse++;\n }\n if (remainingBudget >= budgetUse) {\n remainingBudget -= budgetUse;\n idsThatHaveAlreadyBeenAdded.add(element.id);\n element.excludes.forEach(e => idsConflictingWithAlreadyAddedIds.add(e.id));\n tallyOfChoices.markUsed(element);\n promptBackground.markUsed(element);\n remainingContent.push(e);\n } else {\n // remember the element that broke the budget -- we may try whether it can still be included\n if (budgetBreakingElement === undefined) {\n budgetBreakingElement = e;\n } else {\n tallyOfChoices.markUnused(e.element);\n promptBackground.markUnused(e.element);\n }\n }\n } else {\n tallyOfChoices.markUnused(element);\n promptBackground.markUnused(element);\n }\n });\n\n // The budgeting logic for indexedContent is an approximation that can be\n // off slightly if the wishlist's order is very different from its priorities.\n // This may be due to:\n // * partial lines added together\n // * double new lines being a single token iff the next line does not start with whitespace\n //\n // We need to make sure that on no account can the prompt be too long.\n // Also, we want to test whether one more element would still fit.\n\n // Check that we do not go over:\n remainingContent.sort((a, b) => a.index - b.index);\n let prompt = remainingContent.reduce((a, b) => a + b.element.text, '');\n let promptLength = this.tokenizer.tokenLength(prompt);\n while (promptLength > maxPromptLength) {\n // take the least priority element and remove it after all\n remainingContent.sort((a, b) => {\n // Sort by least priority last, then by lowest index last\n if (b.element.priority === a.element.priority) {\n return b.index - a.index;\n } else {\n return b.element.priority - a.element.priority;\n }\n });\n const removeAfterAll = remainingContent.pop();\n if (removeAfterAll) {\n tallyOfChoices.undoMarkUsed(removeAfterAll.element);\n tallyOfChoices.markUnused(removeAfterAll.element);\n promptBackground.undoMarkUsed(removeAfterAll.element);\n promptBackground.markUnused(removeAfterAll.element);\n // Do not want the headaches that come with removing something\n // and adding it back again\n if (budgetBreakingElement !== undefined) {\n // We haven't yet marked the budget breaking element as unused\n tallyOfChoices.markUnused(budgetBreakingElement.element);\n promptBackground.markUnused(budgetBreakingElement.element);\n }\n budgetBreakingElement = undefined;\n }\n remainingContent.sort((a, b) => a.index - b.index);\n prompt = remainingContent.reduce((a, b) => a + b.element.text, '');\n promptLength = this.tokenizer.tokenLength(prompt);\n }\n\n // Conversely, check whether we can get in more content\n // copy the remainingContent:\n const extendedContent = [...remainingContent];\n if (budgetBreakingElement !== undefined) {\n extendedContent.push(budgetBreakingElement);\n extendedContent.sort((a, b) => a.index - b.index);\n const prompt = extendedContent.reduce((a, b) => a + b.element.text, '');\n const promptLength = this.tokenizer.tokenLength(prompt);\n if (promptLength <= maxPromptLength) {\n // we can fit more content\n tallyOfChoices.markUsed(budgetBreakingElement.element);\n promptBackground.markUsed(budgetBreakingElement.element);\n\n const promptElementRanges = new PromptElementRanges(extendedContent);\n return {\n prefix: prompt,\n suffix: '',\n prefixLength: promptLength,\n suffixLength: 0,\n promptChoices: tallyOfChoices,\n promptBackground: promptBackground,\n promptElementRanges: promptElementRanges,\n };\n } else {\n // we can't use it\n tallyOfChoices.markUnused(budgetBreakingElement.element);\n promptBackground.markUnused(budgetBreakingElement.element);\n }\n }\n\n const promptElementRanges = new PromptElementRanges(remainingContent);\n return {\n prefix: prompt,\n suffix: '',\n prefixLength: promptLength,\n suffixLength: 0,\n promptChoices: tallyOfChoices,\n promptBackground: promptBackground,\n promptElementRanges: promptElementRanges,\n };\n }\n}\n\n/**\n * A class to keep track of the choices made in a prompt\n * Implementation note:\n * This is fine for now, but repeated calls to justAbove, justBelow, etc.\n * will run into precision problems for >4000 or so priorities.\n */\nexport class Priorities {\n registeredPriorities = [0, 1];\n static TOP = 1;\n static BOTTOM = 0;\n /**\n * Register a new priority\n * @param priority The numerical value\n * @returns\n */\n register(priority: number) {\n if (priority > Priorities.TOP || priority < Priorities.BOTTOM) {\n throw new Error('Priority must be between 0 and 1');\n }\n this.registeredPriorities.push(priority);\n return priority;\n }\n\n /**\n * Registers a new priority above the given priorities,\n * but not above any other registered priority\n * @param priorities\n * @returns\n */\n justAbove(...priorities: number[]): number {\n const priority = Math.max(...priorities);\n const nearestNeighbor = Math.min(...this.registeredPriorities.filter(p => p > priority));\n return this.register((nearestNeighbor + priority) / 2);\n }\n\n /**\n * Registers a new priority below the given priorities,\n * but not below any other registered priority\n * @param priorities\n * @returns\n */\n justBelow(...priorities: number[]): number {\n const priority = Math.min(...priorities);\n const nearestNeighbor = Math.max(...this.registeredPriorities.filter(p => p < priority));\n return this.register((nearestNeighbor + priority) / 2);\n }\n\n /**\n * Verifies that the two priorities are adjacent in the list of priorities,\n * and returns one in the middle.\n */\n between(lower: number, higher: number): number {\n if (\n this.registeredPriorities.some(p => p > lower && p < higher) ||\n !(this.registeredPriorities.includes(lower) && this.registeredPriorities.includes(higher))\n ) {\n throw new Error('Priorities must be adjacent in the list of priorities');\n }\n return this.register((lower + higher) / 2);\n }\n}\n","/** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.URI = global.URI || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction merge() {\n for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {\n sets[_key] = arguments[_key];\n }\n\n if (sets.length > 1) {\n sets[0] = sets[0].slice(0, -1);\n var xl = sets.length - 1;\n for (var x = 1; x < xl; ++x) {\n sets[x] = sets[x].slice(1, -1);\n }\n sets[xl] = sets[xl].slice(1);\n return sets.join('');\n } else {\n return sets[0];\n }\n}\nfunction subexp(str) {\n return \"(?:\" + str + \")\";\n}\nfunction typeOf(o) {\n return o === undefined ? \"undefined\" : o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nfunction toArray(obj) {\n return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : [];\n}\nfunction assign(target, source) {\n var obj = target;\n if (source) {\n for (var key in source) {\n obj[key] = source[key];\n }\n }\n return obj;\n}\n\nfunction buildExps(isIRI) {\n var ALPHA$$ = \"[A-Za-z]\",\n CR$ = \"[\\\\x0D]\",\n DIGIT$$ = \"[0-9]\",\n DQUOTE$$ = \"[\\\\x22]\",\n HEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),\n //case-insensitive\n LF$$ = \"[\\\\x0A]\",\n SP$$ = \"[\\\\x20]\",\n PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),\n //expanded\n GEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n SUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n UCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",\n //subset, excludes bidi control characters\n IPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",\n //subset\n UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n USERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n DEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n DEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),\n //relaxed parsing rules\n IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n H16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n LS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n IPV6ADDRESS1$ = subexp(subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$),\n // 6( h16 \":\" ) ls32\n IPV6ADDRESS2$ = subexp(\"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$),\n // \"::\" 5( h16 \":\" ) ls32\n IPV6ADDRESS3$ = subexp(subexp(H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$),\n //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$),\n //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$),\n //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$),\n //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$),\n //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$),\n //[ *5( h16 \":\" ) h16 ] \"::\" h16\n IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"),\n //[ *6( h16 \":\" ) h16 ] \"::\"\n IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n ZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),\n //RFC 6874\n IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),\n //RFC 6874\n IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),\n //RFC 6874, with relaxed parsing rules\n IPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n IP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),\n //RFC 6874\n REG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n HOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n PORT$ = subexp(DIGIT$$ + \"*\"),\n AUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n PCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n SEGMENT$ = subexp(PCHAR$ + \"*\"),\n SEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n PATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n PATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),\n //simplified\n PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),\n //simplified\n PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),\n //simplified\n PATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n PATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n QUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n FRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n HIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n RELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n RELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n URI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n ABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n GENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n RELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n ABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n SAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n AUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\";\n return {\n NOT_SCHEME: new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n NOT_USERINFO: new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_HOST: new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_PATH: new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_PATH_NOSCHEME: new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n NOT_QUERY: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n NOT_FRAGMENT: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n ESCAPE: new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n UNRESERVED: new RegExp(UNRESERVED$$, \"g\"),\n OTHER_CHARS: new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n PCT_ENCODED: new RegExp(PCT_ENCODED$, \"g\"),\n IPV4ADDRESS: new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n IPV6ADDRESS: new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n };\n}\nvar URI_PROTOCOL = buildExps(false);\n\nvar IRI_PROTOCOL = buildExps(true);\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\n/** Highest positive signed 32-bit float value */\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nvar regexPunycode = /^xn--/;\nvar regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nvar regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nvar errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error$1(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tvar result = [];\n\tvar length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tvar parts = string.split('@');\n\tvar result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tvar labels = string.split('.');\n\tvar encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tvar output = [];\n\tvar counter = 0;\n\tvar length = string.length;\n\twhile (counter < length) {\n\t\tvar value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tvar extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) {\n\t\t\t\t// Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nvar ucs2encode = function ucs2encode(array) {\n\treturn String.fromCodePoint.apply(String, toConsumableArray(array));\n};\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nvar basicToDigit = function basicToDigit(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nvar digitToBasic = function digitToBasic(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nvar adapt = function adapt(delta, numPoints, firstTime) {\n\tvar k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nvar decode = function decode(input) {\n\t// Don't use UCS-2.\n\tvar output = [];\n\tvar inputLength = input.length;\n\tvar i = 0;\n\tvar n = initialN;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tvar basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (var j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror$1('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tvar oldi = i;\n\t\tfor (var w = 1, k = base;; /* no condition */k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror$1('invalid-input');\n\t\t\t}\n\n\t\t\tvar digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvar baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror$1('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\t\t}\n\n\t\tvar out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\t}\n\n\treturn String.fromCodePoint.apply(String, output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nvar encode = function encode(input) {\n\tvar output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tvar inputLength = input.length;\n\n\t// Initialize the state.\n\tvar n = initialN;\n\tvar delta = 0;\n\tvar bias = initialBias;\n\n\t// Handle the basic code points.\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _currentValue2 = _step.value;\n\n\t\t\tif (_currentValue2 < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(_currentValue2));\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar basicLength = output.length;\n\tvar handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tvar m = maxInt;\n\t\tvar _iteratorNormalCompletion2 = true;\n\t\tvar _didIteratorError2 = false;\n\t\tvar _iteratorError2 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n\t\t\t\tvar currentValue = _step2.value;\n\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow.\n\t\t} catch (err) {\n\t\t\t_didIteratorError2 = true;\n\t\t\t_iteratorError2 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion2 && _iterator2.return) {\n\t\t\t\t\t_iterator2.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError2) {\n\t\t\t\t\tthrow _iteratorError2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror$1('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tvar _iteratorNormalCompletion3 = true;\n\t\tvar _didIteratorError3 = false;\n\t\tvar _iteratorError3 = undefined;\n\n\t\ttry {\n\t\t\tfor (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n\t\t\t\tvar _currentValue = _step3.value;\n\n\t\t\t\tif (_currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror$1('overflow');\n\t\t\t\t}\n\t\t\t\tif (_currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\t\tvar q = delta;\n\t\t\t\t\tfor (var k = base;; /* no condition */k += base) {\n\t\t\t\t\t\tvar t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar qMinusT = q - t;\n\t\t\t\t\t\tvar baseMinusT = base - t;\n\t\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t_didIteratorError3 = true;\n\t\t\t_iteratorError3 = err;\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (!_iteratorNormalCompletion3 && _iterator3.return) {\n\t\t\t\t\t_iterator3.return();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (_didIteratorError3) {\n\t\t\t\t\tthrow _iteratorError3;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nvar toUnicode = function toUnicode(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nvar toASCII = function toASCII(input) {\n\treturn mapDomain(input, function (string) {\n\t\treturn regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nvar punycode = {\n\t/**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n\t'version': '2.1.0',\n\t/**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see \n * @memberOf punycode\n * @type Object\n */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\n/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\nvar SCHEMES = {};\nfunction pctEncChar(chr) {\n var c = chr.charCodeAt(0);\n var e = void 0;\n if (c < 16) e = \"%0\" + c.toString(16).toUpperCase();else if (c < 128) e = \"%\" + c.toString(16).toUpperCase();else if (c < 2048) e = \"%\" + (c >> 6 | 192).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();else e = \"%\" + (c >> 12 | 224).toString(16).toUpperCase() + \"%\" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + \"%\" + (c & 63 | 128).toString(16).toUpperCase();\n return e;\n}\nfunction pctDecChars(str) {\n var newStr = \"\";\n var i = 0;\n var il = str.length;\n while (i < il) {\n var c = parseInt(str.substr(i + 1, 2), 16);\n if (c < 128) {\n newStr += String.fromCharCode(c);\n i += 3;\n } else if (c >= 194 && c < 224) {\n if (il - i >= 6) {\n var c2 = parseInt(str.substr(i + 4, 2), 16);\n newStr += String.fromCharCode((c & 31) << 6 | c2 & 63);\n } else {\n newStr += str.substr(i, 6);\n }\n i += 6;\n } else if (c >= 224) {\n if (il - i >= 9) {\n var _c = parseInt(str.substr(i + 4, 2), 16);\n var c3 = parseInt(str.substr(i + 7, 2), 16);\n newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63);\n } else {\n newStr += str.substr(i, 9);\n }\n i += 9;\n } else {\n newStr += str.substr(i, 3);\n i += 3;\n }\n }\n return newStr;\n}\nfunction _normalizeComponentEncoding(components, protocol) {\n function decodeUnreserved(str) {\n var decStr = pctDecChars(str);\n return !decStr.match(protocol.UNRESERVED) ? str : decStr;\n }\n if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n return components;\n}\n\nfunction _stripLeadingZeros(str) {\n return str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\nfunction _normalizeIPv4(host, protocol) {\n var matches = host.match(protocol.IPV4ADDRESS) || [];\n\n var _matches = slicedToArray(matches, 2),\n address = _matches[1];\n\n if (address) {\n return address.split(\".\").map(_stripLeadingZeros).join(\".\");\n } else {\n return host;\n }\n}\nfunction _normalizeIPv6(host, protocol) {\n var matches = host.match(protocol.IPV6ADDRESS) || [];\n\n var _matches2 = slicedToArray(matches, 3),\n address = _matches2[1],\n zone = _matches2[2];\n\n if (address) {\n var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(),\n _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2),\n last = _address$toLowerCase$2[0],\n first = _address$toLowerCase$2[1];\n\n var firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n var lastFields = last.split(\":\").map(_stripLeadingZeros);\n var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n var fieldCount = isLastFieldIPv4Address ? 7 : 8;\n var lastFieldsStart = lastFields.length - fieldCount;\n var fields = Array(fieldCount);\n for (var x = 0; x < fieldCount; ++x) {\n fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n }\n if (isLastFieldIPv4Address) {\n fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n }\n var allZeroFields = fields.reduce(function (acc, field, index) {\n if (!field || field === \"0\") {\n var lastLongest = acc[acc.length - 1];\n if (lastLongest && lastLongest.index + lastLongest.length === index) {\n lastLongest.length++;\n } else {\n acc.push({ index: index, length: 1 });\n }\n }\n return acc;\n }, []);\n var longestZeroFields = allZeroFields.sort(function (a, b) {\n return b.length - a.length;\n })[0];\n var newHost = void 0;\n if (longestZeroFields && longestZeroFields.length > 1) {\n var newFirst = fields.slice(0, longestZeroFields.index);\n var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n newHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n } else {\n newHost = fields.join(\":\");\n }\n if (zone) {\n newHost += \"%\" + zone;\n }\n return newHost;\n } else {\n return host;\n }\n}\nvar URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nvar NO_MATCH_IS_UNDEFINED = \"\".match(/(){0}/)[1] === undefined;\nfunction parse(uriString) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var components = {};\n var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n if (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n var matches = uriString.match(URI_PARSE);\n if (matches) {\n if (NO_MATCH_IS_UNDEFINED) {\n //store each component\n components.scheme = matches[1];\n components.userinfo = matches[3];\n components.host = matches[4];\n components.port = parseInt(matches[5], 10);\n components.path = matches[6] || \"\";\n components.query = matches[7];\n components.fragment = matches[8];\n //fix port number\n if (isNaN(components.port)) {\n components.port = matches[5];\n }\n } else {\n //IE FIX for improper RegExp matching\n //store each component\n components.scheme = matches[1] || undefined;\n components.userinfo = uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined;\n components.host = uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined;\n components.port = parseInt(matches[5], 10);\n components.path = matches[6] || \"\";\n components.query = uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined;\n components.fragment = uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined;\n //fix port number\n if (isNaN(components.port)) {\n components.port = uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined;\n }\n }\n if (components.host) {\n //normalize IP hosts\n components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n }\n //determine reference type\n if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n components.reference = \"same-document\";\n } else if (components.scheme === undefined) {\n components.reference = \"relative\";\n } else if (components.fragment === undefined) {\n components.reference = \"absolute\";\n } else {\n components.reference = \"uri\";\n }\n //check for reference errors\n if (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n components.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n }\n //find scheme handler\n var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n //check if scheme can't handle IRIs\n if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n //if host component is a domain name\n if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {\n //convert Unicode IDN -> ASCII IDN\n try {\n components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n } catch (e) {\n components.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n }\n }\n //convert IRI -> URI\n _normalizeComponentEncoding(components, URI_PROTOCOL);\n } else {\n //normalize encodings\n _normalizeComponentEncoding(components, protocol);\n }\n //perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(components, options);\n }\n } else {\n components.error = components.error || \"URI can not be parsed.\";\n }\n return components;\n}\n\nfunction _recomposeAuthority(components, options) {\n var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;\n var uriTokens = [];\n if (components.userinfo !== undefined) {\n uriTokens.push(components.userinfo);\n uriTokens.push(\"@\");\n }\n if (components.host !== undefined) {\n //normalize IP hosts, add brackets and escape zone separator for IPv6\n uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) {\n return \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\";\n }));\n }\n if (typeof components.port === \"number\" || typeof components.port === \"string\") {\n uriTokens.push(\":\");\n uriTokens.push(String(components.port));\n }\n return uriTokens.length ? uriTokens.join(\"\") : undefined;\n}\n\nvar RDS1 = /^\\.\\.?\\//;\nvar RDS2 = /^\\/\\.(\\/|$)/;\nvar RDS3 = /^\\/\\.\\.(\\/|$)/;\nvar RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\nfunction removeDotSegments(input) {\n var output = [];\n while (input.length) {\n if (input.match(RDS1)) {\n input = input.replace(RDS1, \"\");\n } else if (input.match(RDS2)) {\n input = input.replace(RDS2, \"/\");\n } else if (input.match(RDS3)) {\n input = input.replace(RDS3, \"/\");\n output.pop();\n } else if (input === \".\" || input === \"..\") {\n input = \"\";\n } else {\n var im = input.match(RDS5);\n if (im) {\n var s = im[0];\n input = input.slice(s.length);\n output.push(s);\n } else {\n throw new Error(\"Unexpected dot segment condition\");\n }\n }\n }\n return output.join(\"\");\n}\n\nfunction serialize(components) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL;\n var uriTokens = [];\n //find scheme handler\n var schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n //perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n if (components.host) {\n //if host component is an IPv6 address\n if (protocol.IPV6ADDRESS.test(components.host)) {}\n //TODO: normalize IPv6 address as per RFC 5952\n\n //if host component is a domain name\n else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {\n //convert IDN via punycode\n try {\n components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);\n } catch (e) {\n components.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n }\n }\n //normalize encoding\n _normalizeComponentEncoding(components, protocol);\n if (options.reference !== \"suffix\" && components.scheme) {\n uriTokens.push(components.scheme);\n uriTokens.push(\":\");\n }\n var authority = _recomposeAuthority(components, options);\n if (authority !== undefined) {\n if (options.reference !== \"suffix\") {\n uriTokens.push(\"//\");\n }\n uriTokens.push(authority);\n if (components.path && components.path.charAt(0) !== \"/\") {\n uriTokens.push(\"/\");\n }\n }\n if (components.path !== undefined) {\n var s = components.path;\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s);\n }\n if (authority === undefined) {\n s = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n }\n uriTokens.push(s);\n }\n if (components.query !== undefined) {\n uriTokens.push(\"?\");\n uriTokens.push(components.query);\n }\n if (components.fragment !== undefined) {\n uriTokens.push(\"#\");\n uriTokens.push(components.fragment);\n }\n return uriTokens.join(\"\"); //merge tokens into a string\n}\n\nfunction resolveComponents(base, relative) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var skipNormalization = arguments[3];\n\n var target = {};\n if (!skipNormalization) {\n base = parse(serialize(base, options), options); //normalize base components\n relative = parse(serialize(relative, options), options); //normalize relative components\n }\n options = options || {};\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme;\n //target.authority = relative.authority;\n target.userinfo = relative.userinfo;\n target.host = relative.host;\n target.port = relative.port;\n target.path = removeDotSegments(relative.path || \"\");\n target.query = relative.query;\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n //target.authority = relative.authority;\n target.userinfo = relative.userinfo;\n target.host = relative.host;\n target.port = relative.port;\n target.path = removeDotSegments(relative.path || \"\");\n target.query = relative.query;\n } else {\n if (!relative.path) {\n target.path = base.path;\n if (relative.query !== undefined) {\n target.query = relative.query;\n } else {\n target.query = base.query;\n }\n } else {\n if (relative.path.charAt(0) === \"/\") {\n target.path = removeDotSegments(relative.path);\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = \"/\" + relative.path;\n } else if (!base.path) {\n target.path = relative.path;\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n }\n target.path = removeDotSegments(target.path);\n }\n target.query = relative.query;\n }\n //target.authority = base.authority;\n target.userinfo = base.userinfo;\n target.host = base.host;\n target.port = base.port;\n }\n target.scheme = base.scheme;\n }\n target.fragment = relative.fragment;\n return target;\n}\n\nfunction resolve(baseURI, relativeURI, options) {\n var schemelessOptions = assign({ scheme: 'null' }, options);\n return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n}\n\nfunction normalize(uri, options) {\n if (typeof uri === \"string\") {\n uri = serialize(parse(uri, options), options);\n } else if (typeOf(uri) === \"object\") {\n uri = parse(serialize(uri, options), options);\n }\n return uri;\n}\n\nfunction equal(uriA, uriB, options) {\n if (typeof uriA === \"string\") {\n uriA = serialize(parse(uriA, options), options);\n } else if (typeOf(uriA) === \"object\") {\n uriA = serialize(uriA, options);\n }\n if (typeof uriB === \"string\") {\n uriB = serialize(parse(uriB, options), options);\n } else if (typeOf(uriB) === \"object\") {\n uriB = serialize(uriB, options);\n }\n return uriA === uriB;\n}\n\nfunction escapeComponent(str, options) {\n return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar);\n}\n\nfunction unescapeComponent(str, options) {\n return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars);\n}\n\nvar handler = {\n scheme: \"http\",\n domainHost: true,\n parse: function parse(components, options) {\n //report missing host\n if (!components.host) {\n components.error = components.error || \"HTTP URIs must have a host.\";\n }\n return components;\n },\n serialize: function serialize(components, options) {\n var secure = String(components.scheme).toLowerCase() === \"https\";\n //normalize the default port\n if (components.port === (secure ? 443 : 80) || components.port === \"\") {\n components.port = undefined;\n }\n //normalize the empty path\n if (!components.path) {\n components.path = \"/\";\n }\n //NOTE: We do not parse query strings for HTTP URIs\n //as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n //and not the HTTP spec.\n return components;\n }\n};\n\nvar handler$1 = {\n scheme: \"https\",\n domainHost: handler.domainHost,\n parse: handler.parse,\n serialize: handler.serialize\n};\n\nfunction isSecure(wsComponents) {\n return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n//RFC 6455\nvar handler$2 = {\n scheme: \"ws\",\n domainHost: true,\n parse: function parse(components, options) {\n var wsComponents = components;\n //indicate if the secure flag is set\n wsComponents.secure = isSecure(wsComponents);\n //construct resouce name\n wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n wsComponents.path = undefined;\n wsComponents.query = undefined;\n return wsComponents;\n },\n serialize: function serialize(wsComponents, options) {\n //normalize the default port\n if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n wsComponents.port = undefined;\n }\n //ensure scheme matches secure flag\n if (typeof wsComponents.secure === 'boolean') {\n wsComponents.scheme = wsComponents.secure ? 'wss' : 'ws';\n wsComponents.secure = undefined;\n }\n //reconstruct path from resource name\n if (wsComponents.resourceName) {\n var _wsComponents$resourc = wsComponents.resourceName.split('?'),\n _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2),\n path = _wsComponents$resourc2[0],\n query = _wsComponents$resourc2[1];\n\n wsComponents.path = path && path !== '/' ? path : undefined;\n wsComponents.query = query;\n wsComponents.resourceName = undefined;\n }\n //forbid fragment component\n wsComponents.fragment = undefined;\n return wsComponents;\n }\n};\n\nvar handler$3 = {\n scheme: \"wss\",\n domainHost: handler$2.domainHost,\n parse: handler$2.parse,\n serialize: handler$2.serialize\n};\n\nvar O = {};\nvar isIRI = true;\n//RFC 3986\nvar UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nvar HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nvar PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nvar ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nvar QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nvar VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nvar SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nvar UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nvar PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nvar NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nvar NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nvar NOT_HFVALUE = NOT_HFNAME;\nfunction decodeUnreserved(str) {\n var decStr = pctDecChars(str);\n return !decStr.match(UNRESERVED) ? str : decStr;\n}\nvar handler$4 = {\n scheme: \"mailto\",\n parse: function parse$$1(components, options) {\n var mailtoComponents = components;\n var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(\",\") : [];\n mailtoComponents.path = undefined;\n if (mailtoComponents.query) {\n var unknownHeaders = false;\n var headers = {};\n var hfields = mailtoComponents.query.split(\"&\");\n for (var x = 0, xl = hfields.length; x < xl; ++x) {\n var hfield = hfields[x].split(\"=\");\n switch (hfield[0]) {\n case \"to\":\n var toAddrs = hfield[1].split(\",\");\n for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) {\n to.push(toAddrs[_x]);\n }\n break;\n case \"subject\":\n mailtoComponents.subject = unescapeComponent(hfield[1], options);\n break;\n case \"body\":\n mailtoComponents.body = unescapeComponent(hfield[1], options);\n break;\n default:\n unknownHeaders = true;\n headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n break;\n }\n }\n if (unknownHeaders) mailtoComponents.headers = headers;\n }\n mailtoComponents.query = undefined;\n for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) {\n var addr = to[_x2].split(\"@\");\n addr[0] = unescapeComponent(addr[0]);\n if (!options.unicodeSupport) {\n //convert Unicode IDN -> ASCII IDN\n try {\n addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n } catch (e) {\n mailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n }\n } else {\n addr[1] = unescapeComponent(addr[1], options).toLowerCase();\n }\n to[_x2] = addr.join(\"@\");\n }\n return mailtoComponents;\n },\n serialize: function serialize$$1(mailtoComponents, options) {\n var components = mailtoComponents;\n var to = toArray(mailtoComponents.to);\n if (to) {\n for (var x = 0, xl = to.length; x < xl; ++x) {\n var toAddr = String(to[x]);\n var atIdx = toAddr.lastIndexOf(\"@\");\n var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n var domain = toAddr.slice(atIdx + 1);\n //convert IDN via punycode\n try {\n domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);\n } catch (e) {\n components.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n }\n to[x] = localPart + \"@\" + domain;\n }\n components.path = to.join(\",\");\n }\n var headers = mailtoComponents.headers = mailtoComponents.headers || {};\n if (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n if (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n var fields = [];\n for (var name in headers) {\n if (headers[name] !== O[name]) {\n fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + \"=\" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar));\n }\n }\n if (fields.length) {\n components.query = fields.join(\"&\");\n }\n return components;\n }\n};\n\nvar URN_PARSE = /^([^\\:]+)\\:(.*)/;\n//RFC 2141\nvar handler$5 = {\n scheme: \"urn\",\n parse: function parse$$1(components, options) {\n var matches = components.path && components.path.match(URN_PARSE);\n var urnComponents = components;\n if (matches) {\n var scheme = options.scheme || urnComponents.scheme || \"urn\";\n var nid = matches[1].toLowerCase();\n var nss = matches[2];\n var urnScheme = scheme + \":\" + (options.nid || nid);\n var schemeHandler = SCHEMES[urnScheme];\n urnComponents.nid = nid;\n urnComponents.nss = nss;\n urnComponents.path = undefined;\n if (schemeHandler) {\n urnComponents = schemeHandler.parse(urnComponents, options);\n }\n } else {\n urnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n }\n return urnComponents;\n },\n serialize: function serialize$$1(urnComponents, options) {\n var scheme = options.scheme || urnComponents.scheme || \"urn\";\n var nid = urnComponents.nid;\n var urnScheme = scheme + \":\" + (options.nid || nid);\n var schemeHandler = SCHEMES[urnScheme];\n if (schemeHandler) {\n urnComponents = schemeHandler.serialize(urnComponents, options);\n }\n var uriComponents = urnComponents;\n var nss = urnComponents.nss;\n uriComponents.path = (nid || options.nid) + \":\" + nss;\n return uriComponents;\n }\n};\n\nvar UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\n//RFC 4122\nvar handler$6 = {\n scheme: \"urn:uuid\",\n parse: function parse(urnComponents, options) {\n var uuidComponents = urnComponents;\n uuidComponents.uuid = uuidComponents.nss;\n uuidComponents.nss = undefined;\n if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n uuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n }\n return uuidComponents;\n },\n serialize: function serialize(uuidComponents, options) {\n var urnComponents = uuidComponents;\n //normalize UUID\n urnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n return urnComponents;\n }\n};\n\nSCHEMES[handler.scheme] = handler;\nSCHEMES[handler$1.scheme] = handler$1;\nSCHEMES[handler$2.scheme] = handler$2;\nSCHEMES[handler$3.scheme] = handler$3;\nSCHEMES[handler$4.scheme] = handler$4;\nSCHEMES[handler$5.scheme] = handler$5;\nSCHEMES[handler$6.scheme] = handler$6;\n\nexports.SCHEMES = SCHEMES;\nexports.pctEncChar = pctEncChar;\nexports.pctDecChars = pctDecChars;\nexports.parse = parse;\nexports.removeDotSegments = removeDotSegments;\nexports.serialize = serialize;\nexports.resolveComponents = resolveComponents;\nexports.resolve = resolve;\nexports.normalize = normalize;\nexports.equal = equal;\nexports.escapeComponent = escapeComponent;\nexports.unescapeComponent = unescapeComponent;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=uri.all.js.map\n","import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nlet _nodeId;\n\nlet _clockseq; // Previous uuid creation time\n\n\nlet _lastMSecs = 0;\nlet _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n let i = buf && offset || 0;\n const b = buf || new Array(16);\n options = options || {};\n let node = options.node || _nodeId;\n let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n const seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n const tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (let n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || unsafeStringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import { unsafeStringify } from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","import crypto from 'crypto';\n\nfunction md5(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return crypto.createHash('md5').update(bytes).digest();\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nconst v3 = v35('v3', 0x30, md5);\nexport default v3;","import crypto from 'crypto';\nexport default {\n randomUUID: crypto.randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nconst v5 = v35('v5', 0x50, sha1);\nexport default v5;","import crypto from 'crypto';\n\nfunction sha1(bytes) {\n if (Array.isArray(bytes)) {\n bytes = Buffer.from(bytes);\n } else if (typeof bytes === 'string') {\n bytes = Buffer.from(bytes, 'utf8');\n }\n\n return crypto.createHash('sha1').update(bytes).digest();\n}\n\nexport default sha1;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.slice(14, 15), 16);\n}\n\nexport default version;","var LIB;(()=>{\"use strict\";var t={470:t=>{function e(t){if(\"string\"!=typeof t)throw new TypeError(\"Path must be a string. Received \"+JSON.stringify(t))}function r(t,e){for(var r,n=\"\",o=0,i=-1,a=0,h=0;h<=t.length;++h){if(h2){var s=n.lastIndexOf(\"/\");if(s!==n.length-1){-1===s?(n=\"\",o=0):o=(n=n.slice(0,s)).length-1-n.lastIndexOf(\"/\"),i=h,a=0;continue}}else if(2===n.length||1===n.length){n=\"\",o=0,i=h,a=0;continue}e&&(n.length>0?n+=\"/..\":n=\"..\",o=2)}else n.length>0?n+=\"/\"+t.slice(i+1,h):n=t.slice(i+1,h),o=h-i-1;i=h,a=0}else 46===r&&-1!==a?++a:a=-1}return n}var n={resolve:function(){for(var t,n=\"\",o=!1,i=arguments.length-1;i>=-1&&!o;i--){var a;i>=0?a=arguments[i]:(void 0===t&&(t=process.cwd()),a=t),e(a),0!==a.length&&(n=a+\"/\"+n,o=47===a.charCodeAt(0))}return n=r(n,!o),o?n.length>0?\"/\"+n:\"/\":n.length>0?n:\".\"},normalize:function(t){if(e(t),0===t.length)return\".\";var n=47===t.charCodeAt(0),o=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t=\".\"),t.length>0&&o&&(t+=\"/\"),n?\"/\"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return\".\";for(var t,r=0;r0&&(void 0===t?t=o:t+=\"/\"+o)}return void 0===t?\".\":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return\"\";if((t=n.resolve(t))===(r=n.resolve(r)))return\"\";for(var o=1;oc){if(47===r.charCodeAt(h+u))return r.slice(h+u+1);if(0===u)return r.slice(h+u)}else a>c&&(47===t.charCodeAt(o+u)?f=u:0===u&&(f=0));break}var l=t.charCodeAt(o+u);if(l!==r.charCodeAt(h+u))break;47===l&&(f=u)}var p=\"\";for(u=o+f+1;u<=i;++u)u!==i&&47!==t.charCodeAt(u)||(0===p.length?p+=\"..\":p+=\"/..\");return p.length>0?p+r.slice(h+f):(h+=f,47===r.charCodeAt(h)&&++h,r.slice(h))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return\".\";for(var r=t.charCodeAt(0),n=47===r,o=-1,i=!0,a=t.length-1;a>=1;--a)if(47===(r=t.charCodeAt(a))){if(!i){o=a;break}}else i=!1;return-1===o?n?\"/\":\".\":n&&1===o?\"//\":t.slice(0,o)},basename:function(t,r){if(void 0!==r&&\"string\"!=typeof r)throw new TypeError('\"ext\" argument must be a string');e(t);var n,o=0,i=-1,a=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return\"\";var h=r.length-1,s=-1;for(n=t.length-1;n>=0;--n){var c=t.charCodeAt(n);if(47===c){if(!a){o=n+1;break}}else-1===s&&(a=!1,s=n+1),h>=0&&(c===r.charCodeAt(h)?-1==--h&&(i=n):(h=-1,i=s))}return o===i?i=s:-1===i&&(i=t.length),t.slice(o,i)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!a){o=n+1;break}}else-1===i&&(a=!1,i=n+1);return-1===i?\"\":t.slice(o,i)},extname:function(t){e(t);for(var r=-1,n=0,o=-1,i=!0,a=0,h=t.length-1;h>=0;--h){var s=t.charCodeAt(h);if(47!==s)-1===o&&(i=!1,o=h+1),46===s?-1===r?r=h:1!==a&&(a=1):-1!==r&&(a=-1);else if(!i){n=h+1;break}}return-1===r||-1===o||0===a||1===a&&r===o-1&&r===n+1?\"\":t.slice(r,o)},format:function(t){if(null===t||\"object\"!=typeof t)throw new TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||\"\")+(e.ext||\"\");return r?r===e.root?r+n:r+\"/\"+n:n}(0,t)},parse:function(t){e(t);var r={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(0===t.length)return r;var n,o=t.charCodeAt(0),i=47===o;i?(r.root=\"/\",n=1):n=0;for(var a=-1,h=0,s=-1,c=!0,f=t.length-1,u=0;f>=n;--f)if(47!==(o=t.charCodeAt(f)))-1===s&&(c=!1,s=f+1),46===o?-1===a?a=f:1!==u&&(u=1):-1!==a&&(u=-1);else if(!c){h=f+1;break}return-1===a||-1===s||0===u||1===u&&a===s-1&&a===h+1?-1!==s&&(r.base=r.name=0===h&&i?t.slice(1,s):t.slice(h,s)):(0===h&&i?(r.name=t.slice(1,a),r.base=t.slice(1,s)):(r.name=t.slice(h,a),r.base=t.slice(h,s)),r.ext=t.slice(a,s)),h>0?r.dir=t.slice(0,h-1):i&&(r.dir=\"/\"),r},sep:\"/\",delimiter:\":\",win32:null,posix:null};n.posix=n,t.exports=n}},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}r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})};var n={};(()=>{var t;if(r.r(n),r.d(n,{URI:()=>g,Utils:()=>O}),\"object\"==typeof process)t=\"win32\"===process.platform;else if(\"object\"==typeof navigator){var e=navigator.userAgent;t=e.indexOf(\"Windows\")>=0}var o,i,a=(o=function(t,e){return o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},o(t,e)},function(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Class extends value \"+String(e)+\" is not a constructor or null\");function r(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),h=/^\\w[\\w\\d+.-]*$/,s=/^\\//,c=/^\\/\\//;function f(t,e){if(!t.scheme&&e)throw new Error('[UriError]: Scheme is missing: {scheme: \"\", authority: \"'.concat(t.authority,'\", path: \"').concat(t.path,'\", query: \"').concat(t.query,'\", fragment: \"').concat(t.fragment,'\"}'));if(t.scheme&&!h.test(t.scheme))throw new Error(\"[UriError]: Scheme contains illegal characters.\");if(t.path)if(t.authority){if(!s.test(t.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character')}else if(c.test(t.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")')}var u=\"\",l=\"/\",p=/^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/,g=function(){function e(t,e,r,n,o,i){void 0===i&&(i=!1),\"object\"==typeof t?(this.scheme=t.scheme||u,this.authority=t.authority||u,this.path=t.path||u,this.query=t.query||u,this.fragment=t.fragment||u):(this.scheme=function(t,e){return t||e?t:\"file\"}(t,i),this.authority=e||u,this.path=function(t,e){switch(t){case\"https\":case\"http\":case\"file\":e?e[0]!==l&&(e=l+e):e=l}return e}(this.scheme,r||u),this.query=n||u,this.fragment=o||u,f(this,i))}return e.isUri=function(t){return t instanceof e||!!t&&\"string\"==typeof t.authority&&\"string\"==typeof t.fragment&&\"string\"==typeof t.path&&\"string\"==typeof t.query&&\"string\"==typeof t.scheme&&\"string\"==typeof t.fsPath&&\"function\"==typeof t.with&&\"function\"==typeof t.toString},Object.defineProperty(e.prototype,\"fsPath\",{get:function(){return C(this,!1)},enumerable:!1,configurable:!0}),e.prototype.with=function(t){if(!t)return this;var e=t.scheme,r=t.authority,n=t.path,o=t.query,i=t.fragment;return void 0===e?e=this.scheme:null===e&&(e=u),void 0===r?r=this.authority:null===r&&(r=u),void 0===n?n=this.path:null===n&&(n=u),void 0===o?o=this.query:null===o&&(o=u),void 0===i?i=this.fragment:null===i&&(i=u),e===this.scheme&&r===this.authority&&n===this.path&&o===this.query&&i===this.fragment?this:new v(e,r,n,o,i)},e.parse=function(t,e){void 0===e&&(e=!1);var r=p.exec(t);return r?new v(r[2]||u,_(r[4]||u),_(r[5]||u),_(r[7]||u),_(r[9]||u),e):new v(u,u,u,u,u)},e.file=function(e){var r=u;if(t&&(e=e.replace(/\\\\/g,l)),e[0]===l&&e[1]===l){var n=e.indexOf(l,2);-1===n?(r=e.substring(2),e=l):(r=e.substring(2,n),e=e.substring(n)||l)}return new v(\"file\",r,e,u,u)},e.from=function(t){var e=new v(t.scheme,t.authority,t.path,t.query,t.fragment);return f(e,!0),e},e.prototype.toString=function(t){return void 0===t&&(t=!1),A(this,t)},e.prototype.toJSON=function(){return this},e.revive=function(t){if(t){if(t instanceof e)return t;var r=new v(t);return r._formatted=t.external,r._fsPath=t._sep===d?t.fsPath:null,r}return t},e}(),d=t?1:void 0,v=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._formatted=null,e._fsPath=null,e}return a(e,t),Object.defineProperty(e.prototype,\"fsPath\",{get:function(){return this._fsPath||(this._fsPath=C(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),e.prototype.toString=function(t){return void 0===t&&(t=!1),t?A(this,!0):(this._formatted||(this._formatted=A(this,!1)),this._formatted)},e.prototype.toJSON=function(){var t={$mid:1};return this._fsPath&&(t.fsPath=this._fsPath,t._sep=d),this._formatted&&(t.external=this._formatted),this.path&&(t.path=this.path),this.scheme&&(t.scheme=this.scheme),this.authority&&(t.authority=this.authority),this.query&&(t.query=this.query),this.fragment&&(t.fragment=this.fragment),t},e}(g),y=((i={})[58]=\"%3A\",i[47]=\"%2F\",i[63]=\"%3F\",i[35]=\"%23\",i[91]=\"%5B\",i[93]=\"%5D\",i[64]=\"%40\",i[33]=\"%21\",i[36]=\"%24\",i[38]=\"%26\",i[39]=\"%27\",i[40]=\"%28\",i[41]=\"%29\",i[42]=\"%2A\",i[43]=\"%2B\",i[44]=\"%2C\",i[59]=\"%3B\",i[61]=\"%3D\",i[32]=\"%20\",i);function m(t,e,r){for(var n=void 0,o=-1,i=0;i=97&&a<=122||a>=65&&a<=90||a>=48&&a<=57||45===a||46===a||95===a||126===a||e&&47===a||r&&91===a||r&&93===a||r&&58===a)-1!==o&&(n+=encodeURIComponent(t.substring(o,i)),o=-1),void 0!==n&&(n+=t.charAt(i));else{void 0===n&&(n=t.substr(0,i));var h=y[a];void 0!==h?(-1!==o&&(n+=encodeURIComponent(t.substring(o,i)),o=-1),n+=h):-1===o&&(o=i)}}return-1!==o&&(n+=encodeURIComponent(t.substring(o))),void 0!==n?n:t}function b(t){for(var e=void 0,r=0;r1&&\"file\"===e.scheme?\"//\".concat(e.authority).concat(e.path):47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?r?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,t&&(n=n.replace(/\\//g,\"\\\\\")),n}function A(t,e){var r=e?b:m,n=\"\",o=t.scheme,i=t.authority,a=t.path,h=t.query,s=t.fragment;if(o&&(n+=o,n+=\":\"),(i||\"file\"===o)&&(n+=l,n+=l),i){var c=i.indexOf(\"@\");if(-1!==c){var f=i.substr(0,c);i=i.substr(c+1),-1===(c=f.lastIndexOf(\":\"))?n+=r(f,!1,!1):(n+=r(f.substr(0,c),!1,!1),n+=\":\",n+=r(f.substr(c+1),!1,!0)),n+=\"@\"}-1===(c=(i=i.toLowerCase()).lastIndexOf(\":\"))?n+=r(i,!1,!0):(n+=r(i.substr(0,c),!1,!0),n+=i.substr(c))}if(a){if(a.length>=3&&47===a.charCodeAt(0)&&58===a.charCodeAt(2))(u=a.charCodeAt(1))>=65&&u<=90&&(a=\"/\".concat(String.fromCharCode(u+32),\":\").concat(a.substr(3)));else if(a.length>=2&&58===a.charCodeAt(1)){var u;(u=a.charCodeAt(0))>=65&&u<=90&&(a=\"\".concat(String.fromCharCode(u+32),\":\").concat(a.substr(2)))}n+=r(a,!0,!1)}return h&&(n+=\"?\",n+=r(h,!1,!1)),s&&(n+=\"#\",n+=e?s:m(s,!1,!1)),n}function w(t){try{return decodeURIComponent(t)}catch(e){return t.length>3?t.substr(0,3)+w(t.substr(3)):t}}var x=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function _(t){return t.match(x)?t.replace(x,(function(t){return w(t)})):t}var O,P=r(470),j=function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o {\n\tif (process.platform === 'win32') {\n\t\tconst pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''));\n\n\t\tif (pathHasInvalidWinCharacters) {\n\t\t\tconst err = new Error(`Path contains invalid characters: ${pth}`);\n\t\t\terr.code = 'EINVAL';\n\t\t\tthrow err;\n\t\t}\n\t}\n};\n\nmodule.exports = (input, opts) => Promise.resolve().then(() => {\n\tcheckPath(input);\n\topts = Object.assign({}, defaults, opts);\n\n\tconst mkdir = pify(opts.fs.mkdir);\n\tconst stat = pify(opts.fs.stat);\n\n\tconst make = pth => {\n\t\treturn mkdir(pth, opts.mode)\n\t\t\t.then(() => pth)\n\t\t\t.catch(err => {\n\t\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\t\tif (err.message.includes('null bytes') || path.dirname(pth) === pth) {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn make(path.dirname(pth)).then(() => make(pth));\n\t\t\t\t}\n\n\t\t\t\treturn stat(pth)\n\t\t\t\t\t.then(stats => stats.isDirectory() ? pth : Promise.reject())\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t});\n\t\t\t});\n\t};\n\n\treturn make(path.resolve(input));\n});\n\nmodule.exports.sync = (input, opts) => {\n\tcheckPath(input);\n\topts = Object.assign({}, defaults, opts);\n\n\tconst make = pth => {\n\t\ttry {\n\t\t\topts.fs.mkdirSync(pth, opts.mode);\n\t\t} catch (err) {\n\t\t\tif (err.code === 'ENOENT') {\n\t\t\t\tif (err.message.includes('null bytes') || path.dirname(pth) === pth) {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\n\t\t\t\tmake(path.dirname(pth));\n\t\t\t\treturn make(pth);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (!opts.fs.statSync(pth).isDirectory()) {\n\t\t\t\t\tthrow new Error('The path is not a directory');\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\treturn pth;\n\t};\n\n\treturn make(path.resolve(input));\n};\n","(()=>{var __webpack_modules__={696:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.convertChangesToDMP=function(e){for(var t,n,r=[],s=0;s{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.convertChangesToXML=function(e){for(var t=[],n=0;n\"):r.removed&&t.push(\"\"),t.push((s=r.value,void 0,s.replace(/&/g,\"&\").replace(//g,\">\").replace(/\"/g,\""\"))),r.added?t.push(\"\"):r.removed&&t.push(\"\")}var s;return t.join(\"\")}},6976:(e,t,n)=>{\"use strict\";var r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.diffArrays=function(e,t,n){return s.diff(e,t,n)},t.arrayDiff=void 0;var s=new(((r=n(5913))&&r.__esModule?r:{default:r}).default);t.arrayDiff=s,s.tokenize=function(e){return e.slice()},s.join=s.removeEmpty=function(e){return e}},5913:(e,t)=>{\"use strict\";function n(){}function r(e,t,n,r,s){for(var i=0,o=t.length,a=0,l=0;ie.length?n:e})),u.value=e.join(c)}else u.value=e.join(n.slice(a,a+u.count));a+=u.count,u.added||(l+=u.count)}}var d=t[o-1];return o>1&&\"string\"==typeof d.value&&(d.added||d.removed)&&e.equals(\"\",d.value)&&(t[o-2].value+=d.value,t.pop()),t}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=n,n.prototype={diff:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=n.callback;\"function\"==typeof n&&(s=n,n={}),this.options=n;var i=this;function o(e){return s?(setTimeout((function(){s(void 0,e)}),0),!0):e}e=this.castInput(e),t=this.castInput(t),e=this.removeEmpty(this.tokenize(e));var a=(t=this.removeEmpty(this.tokenize(t))).length,l=e.length,u=1,_=a+l;n.maxEditLength&&(_=Math.min(_,n.maxEditLength));var c=[{newPos:-1,components:[]}],d=this.extractCommon(c[0],t,e,0);if(c[0].newPos+1>=a&&d+1>=l)return o([{value:this.join(t),count:t.length}]);function p(){for(var n=-1*u;n<=u;n+=2){var s=void 0,_=c[n-1],d=c[n+1],p=(d?d.newPos:0)-n;_&&(c[n-1]=void 0);var m=_&&_.newPos+1=a&&p+1>=l)return o(r(i,s.components,t,e,i.useLongestToken));c[n]=s}else c[n]=void 0}var h;u++}if(s)!function e(){setTimeout((function(){if(u>_)return s();p()||e()}),0)}();else for(;u<=_;){var m=p();if(m)return m}},pushComponent:function(e,t,n){var r=e[e.length-1];r&&r.added===t&&r.removed===n?e[e.length-1]={count:r.count+1,added:t,removed:n}:e.push({count:1,added:t,removed:n})},extractCommon:function(e,t,n,r){for(var s=t.length,i=n.length,o=e.newPos,a=o-r,l=0;o+1{\"use strict\";var r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.diffChars=function(e,t,n){return s.diff(e,t,n)},t.characterDiff=void 0;var s=new(((r=n(5913))&&r.__esModule?r:{default:r}).default);t.characterDiff=s},4852:(e,t,n)=>{\"use strict\";var r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.diffCss=function(e,t,n){return s.diff(e,t,n)},t.cssDiff=void 0;var s=new(((r=n(5913))&&r.__esModule?r:{default:r}).default);t.cssDiff=s,s.tokenize=function(e){return e.split(/([{}:;,]|\\s+)/)}},4276:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.diffJson=function(e,t,n){return l.diff(e,t,n)},t.canonicalize=u,t.jsonDiff=void 0;var r,s=(r=n(5913))&&r.__esModule?r:{default:r},i=n(8187);function o(e){return o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o(e)}var a=Object.prototype.toString,l=new s.default;function u(e,t,n,r,s){var i,l;for(t=t||[],n=n||[],r&&(e=r(s,e)),i=0;i{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.diffLines=function(e,t,n){return o.diff(e,t,n)},t.diffTrimmedLines=function(e,t,n){var r=(0,i.generateOptions)(n,{ignoreWhitespace:!0});return o.diff(e,t,r)},t.lineDiff=void 0;var r,s=(r=n(5913))&&r.__esModule?r:{default:r},i=n(8009),o=new s.default;t.lineDiff=o,o.tokenize=function(e){var t=[],n=e.split(/(\\n|\\r\\n)/);n[n.length-1]||n.pop();for(var r=0;r{\"use strict\";var r;Object.defineProperty(t,\"__esModule\",{value:!0}),t.diffSentences=function(e,t,n){return s.diff(e,t,n)},t.sentenceDiff=void 0;var s=new(((r=n(5913))&&r.__esModule?r:{default:r}).default);t.sentenceDiff=s,s.tokenize=function(e){return e.split(/(\\S.+?[.!?])(?=\\s+|$)/)}},5303:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.diffWords=function(e,t,n){return n=(0,i.generateOptions)(n,{ignoreWhitespace:!0}),l.diff(e,t,n)},t.diffWordsWithSpace=function(e,t,n){return l.diff(e,t,n)},t.wordDiff=void 0;var r,s=(r=n(5913))&&r.__esModule?r:{default:r},i=n(8009),o=/^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/,a=/\\S/,l=new s.default;t.wordDiff=l,l.equals=function(e,t){return this.options.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e===t||this.options.ignoreWhitespace&&!a.test(e)&&!a.test(t)},l.tokenize=function(e){for(var t=e.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/),n=0;n{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),Object.defineProperty(t,\"Diff\",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,\"diffChars\",{enumerable:!0,get:function(){return i.diffChars}}),Object.defineProperty(t,\"diffWords\",{enumerable:!0,get:function(){return o.diffWords}}),Object.defineProperty(t,\"diffWordsWithSpace\",{enumerable:!0,get:function(){return o.diffWordsWithSpace}}),Object.defineProperty(t,\"diffLines\",{enumerable:!0,get:function(){return a.diffLines}}),Object.defineProperty(t,\"diffTrimmedLines\",{enumerable:!0,get:function(){return a.diffTrimmedLines}}),Object.defineProperty(t,\"diffSentences\",{enumerable:!0,get:function(){return l.diffSentences}}),Object.defineProperty(t,\"diffCss\",{enumerable:!0,get:function(){return u.diffCss}}),Object.defineProperty(t,\"diffJson\",{enumerable:!0,get:function(){return _.diffJson}}),Object.defineProperty(t,\"canonicalize\",{enumerable:!0,get:function(){return _.canonicalize}}),Object.defineProperty(t,\"diffArrays\",{enumerable:!0,get:function(){return c.diffArrays}}),Object.defineProperty(t,\"applyPatch\",{enumerable:!0,get:function(){return d.applyPatch}}),Object.defineProperty(t,\"applyPatches\",{enumerable:!0,get:function(){return d.applyPatches}}),Object.defineProperty(t,\"parsePatch\",{enumerable:!0,get:function(){return p.parsePatch}}),Object.defineProperty(t,\"merge\",{enumerable:!0,get:function(){return m.merge}}),Object.defineProperty(t,\"structuredPatch\",{enumerable:!0,get:function(){return f.structuredPatch}}),Object.defineProperty(t,\"createTwoFilesPatch\",{enumerable:!0,get:function(){return f.createTwoFilesPatch}}),Object.defineProperty(t,\"createPatch\",{enumerable:!0,get:function(){return f.createPatch}}),Object.defineProperty(t,\"convertChangesToDMP\",{enumerable:!0,get:function(){return h.convertChangesToDMP}}),Object.defineProperty(t,\"convertChangesToXML\",{enumerable:!0,get:function(){return g.convertChangesToXML}});var r,s=(r=n(5913))&&r.__esModule?r:{default:r},i=n(7630),o=n(5303),a=n(8187),l=n(4146),u=n(4852),_=n(4276),c=n(6976),d=n(3690),p=n(3719),m=n(3051),f=n(1286),h=n(696),g=n(5826)},3690:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.applyPatch=o,t.applyPatches=function(e,t){\"string\"==typeof e&&(e=(0,s.parsePatch)(e));var n=0;!function r(){var s=e[n++];if(!s)return t.complete();t.loadFile(s,(function(e,n){if(e)return t.complete(e);var i=o(n,s,t);t.patched(s,i,(function(e){if(e)return t.complete(e);r()}))}))}()};var r,s=n(3719),i=(r=n(8169))&&r.__esModule?r:{default:r};function o(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(\"string\"==typeof t&&(t=(0,s.parsePatch)(t)),Array.isArray(t)){if(t.length>1)throw new Error(\"applyPatch only works with a single input.\");t=t[0]}var r,o,a=e.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),l=e.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g)||[],u=t.hunks,_=n.compareLine||function(e,t,n,r){return t===r},c=0,d=n.fuzzFactor||0,p=0,m=0;function f(e,t){for(var n=0;n0?r[0]:\" \",i=r.length>0?r.substr(1):r;if(\" \"===s||\"-\"===s){if(!_(t+1,a[t],s,i)&&++c>d)return!1;t++}}return!0}for(var h=0;h0?I[0]:\" \",N=I.length>0?I.substr(1):I,P=M.linedelimiters[k];if(\" \"===x)T++;else if(\"-\"===x)a.splice(T,1),l.splice(T,1);else if(\"+\"===x)a.splice(T,0,N),l.splice(T,0,P),T++;else if(\"\\\\\"===x){var F=M.lines[k-1]?M.lines[k-1][0]:null;\"+\"===F?r=!0:\"-\"===F&&(o=!0)}}}if(r)for(;!a[a.length-1];)a.pop(),l.pop();else o&&(a.push(\"\"),l.push(\"\\n\"));for(var L=0;L{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.structuredPatch=o,t.formatPatch=a,t.createTwoFilesPatch=l,t.createPatch=function(e,t,n,r,s,i){return l(e,e,t,n,r,s,i)};var r=n(8187);function s(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||function(e,t){if(e){if(\"string\"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?b(a.lines.slice(-l.context)):[],c-=p.length,d-=p.length)}(o=p).push.apply(o,s(r.map((function(e){return(t.added?\"+\":\"-\")+e})))),t.added?f+=r.length:m+=r.length}else{if(c)if(r.length<=2*l.context&&e=u.length-2&&r.length<=l.context){var E=/\\n$/.test(n),S=/\\n$/.test(i),v=0==r.length&&p.length>w.oldLines;!E&&v&&n.length>0&&p.splice(w.oldLines,0,\"\\\\ No newline at end of file\"),(E||v)&&S||p.push(\"\\\\ No newline at end of file\")}_.push(w),c=0,d=0,p=[]}m+=r.length,f+=r.length}},g=0;g{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.calcLineCount=l,t.merge=function(e,t,n){e=u(e,n),t=u(t,n);var r={};(e.index||t.index)&&(r.index=e.index||t.index),(e.newFileName||t.newFileName)&&(_(e)?_(t)?(r.oldFileName=c(r,e.oldFileName,t.oldFileName),r.newFileName=c(r,e.newFileName,t.newFileName),r.oldHeader=c(r,e.oldHeader,t.oldHeader),r.newHeader=c(r,e.newHeader,t.newHeader)):(r.oldFileName=e.oldFileName,r.newFileName=e.newFileName,r.oldHeader=e.oldHeader,r.newHeader=e.newHeader):(r.oldFileName=t.oldFileName||e.oldFileName,r.newFileName=t.newFileName||e.newFileName,r.oldHeader=t.oldHeader||e.oldHeader,r.newHeader=t.newHeader||e.newHeader)),r.hunks=[];for(var s=0,i=0,o=0,a=0;se.length)&&(t=e.length);for(var n=0,r=new Array(t);n{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.parsePatch=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),r=e.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g)||[],s=[],i=0;function o(){var e={};for(s.push(e);i{\"use strict\";function n(e,t){if(t.length>e.length)return!1;for(var n=0;n{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,n){var r=!0,s=!1,i=!1,o=1;return function a(){if(r&&!i){if(s?o++:r=!1,e+o<=n)return o;i=!0}if(!s)return i||(r=!0),t<=e-o?-o++:(s=!0,a())}}},8009:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.generateOptions=function(e,t){if(\"function\"==typeof e)t.callback=e;else if(e)for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}},4288:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.ElidableText=void 0;const r=n(1145),s=n(3407),i=n(4121);class o{constructor(...e){this.lines=[];const t=[];for(const n of e){const e=Array.isArray(n)?n[1]:1,r=Array.isArray(n)?n[0]:n;\"string\"==typeof r?r.split(\"\\n\").forEach((n=>t.push(new i.LineWithValueAndCost(n,e)))):r instanceof o?t.push(...r.lines.map((t=>t.copy().adjustValue(e)))):\"source\"in r&&\"languageId\"in r&&t.push(...(0,s.elidableTextForSourceCode)(r).lines.map((t=>t.copy().adjustValue(e))))}this.lines=t}adjust(e){this.lines.forEach((t=>t.adjustValue(e)))}recost(e=(e=>(0,r.getTokenizer)().tokenLength(e+\"\\n\"))){this.lines.forEach((t=>t.recost(e)))}makePrompt(e,t=\"[...]\",n=!0,s=\"removeLeastDesirable\",o=(0,r.getTokenizer)()){return function(e,t,n,r,s,o){if(o.tokenLength(n+\"\\n\")>t)throw new Error(\"maxTokens must be larger than the ellipsis length\");\"removeLeastBangForBuck\"===s&&e.forEach((e=>e.adjustValue(1/e.cost)));const a=e.reduce(((e,t)=>Math.max(e,t.value)),0)+1,l=e.reduce(((e,t)=>Math.max(e,t.text.length)),0)+1,u=n.trim();let _=e.reduce(((e,t)=>e+t.cost),0),c=e.length+1;for(;_>t&&c-- >=-1;){const t=e.reduce(((e,t)=>t.value\"\"!==e.text.trim()))??{text:\"\"},d=r?Math.min(c.text.match(/^\\s*/)?.[0].length??0,e[s-1]?.text.trim()===u?e[s-1]?.text.match(/^\\s*/)?.[0].length??0:l,e[s+1]?.text.trim()===u?e[s+1]?.text.match(/^\\s*/)?.[0].length??0:l):0,p=\" \".repeat(d)+n,m=new i.LineWithValueAndCost(p,a,o.tokenLength(p+\"\\n\"),\"loose\");e.splice(s,1,m),e[s+1]?.text.trim()===u&&e.splice(s+1,1),e[s-1]?.text.trim()===u&&e.splice(s-1,1);const f=e.reduce(((e,t)=>e+t.cost),0);f>=_&&e.every((e=>e.value===a))&&(r=!1),_=f}if(c<0)throw new Error(`Infinite loop in ElidableText.makePrompt: Defensive counter < 0 in ElidableText.makePrompt with end text:\\n ${e.map((e=>e.text)).join(\"\\n\")}`);return e.map((e=>e.text)).join(\"\\n\")}(this.lines.map((e=>e.copy())),e,t,n,s,o)}}t.ElidableText=o},8975:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.elidableTextForDiff=void 0;const r=n(9479),s=n(2180),i=n(5533);t.elidableTextForDiff=function(e,t){const n=\"string\"==typeof e?\"string\"==typeof t?void 0:t.languageId:\"string\"==typeof t||e.languageId===t.languageId?e.languageId:void 0;e=\"string\"==typeof e?e:e.source,t=\"string\"==typeof t?t:t.source;const o=r.structuredPatch(\"\",\"\",e,t),a=new Set,l=new Set;for(const e of o.hunks){for(let t=e.oldStart;t!1)),_=(0,s.mapLabels)((0,s.flattenVirtual)((0,s.parseTree)(t,n)),(()=>!1));return(0,s.visitTree)(u,(e=>{\"line\"!==e.type&&\"blank\"!==e.type||a.has(e.lineNumber)&&(e.label=!0)}),\"topDown\"),(0,s.visitTree)(_,(e=>{\"line\"!==e.type&&\"blank\"!==e.type||l.has(e.lineNumber)&&(e.label=!0)}),\"topDown\"),[(0,i.fromTreeWithFocussedLines)(u),(0,i.fromTreeWithFocussedLines)(_)]}},5533:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.fromTreeWithValuedLines=t.fromTreeWithFocussedLines=t.DEFAULT_TREE_TRAVERSAL_CONFIG=void 0;const r=n(2180),s=n(4288);function i(e){const t=(0,r.foldTree)(e,[],((e,t)=>(\"line\"!==e.type&&\"blank\"!==e.type||t.push(\"line\"===e.type?[(0,r.deparseLine)(e).trimEnd(),e.label??0]:[\"\",e.label??0]),t)),\"topDown\");return new s.ElidableText(...t)}t.DEFAULT_TREE_TRAVERSAL_CONFIG={worthUp:.9,worthSibling:.88,worthDown:.8},t.fromTreeWithFocussedLines=function(e,n=t.DEFAULT_TREE_TRAVERSAL_CONFIG){const s=(0,r.mapLabels)(e,(e=>e?1:void 0));return(0,r.visitTree)(s,(e=>{if((0,r.isBlank)(e))return;const t=Math.max(...e.subs.map((e=>e.label??0)));e.label=Math.max(e.label??0,t*n.worthUp)}),\"bottomUp\"),(0,r.visitTree)(s,(e=>{if((0,r.isBlank)(e))return;const t=e.subs.map((e=>e.label??0));let s=[...t];for(let e=0;eMath.max(r,Math.pow(n.worthSibling,Math.abs(e-s))*t[e]))));const i=e.label;void 0!==i&&(s=s.map((e=>Math.max(e,n.worthDown*i)))),e.subs.forEach(((e,t)=>e.label=s[t]))}),\"topDown\"),i(s)},t.fromTreeWithValuedLines=i},3407:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.elidableTextForSourceCode=void 0;const r=n(2180),s=n(5533);t.elidableTextForSourceCode=function(e,t=!0,n=!0){const i=\"string\"==typeof e?(0,r.parseTree)(e):(0,r.parseTree)(e.source,e.languageId);(0,r.flattenVirtual)(i);const o=(0,r.mapLabels)(i,(e=>t&&\"closer\"!==e));return(0,r.visitTree)(o,(e=>{void 0===e.label&&(e.label=t&&!1!==e.label)}),\"topDown\"),t&&(0,r.visitTree)(o,(e=>{if(e.label){let t=!1;for(const n of[...e.subs].reverse())n.label&&!t?t=!0:n.label=!1}else for(const t of e.subs)t.label=!1;e.subs.length>0&&(e.label=!1)}),\"topDown\"),n&&(0,r.visitTree)(o,(e=>{e.label||(e.label=((0,r.isLine)(e)||(0,r.isBlank)(e))&&0==e.lineNumber)}),\"topDown\"),(0,s.fromTreeWithFocussedLines)(o)}},3346:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!(\"get\"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),s(n(4288),t),s(n(8975),t),s(n(5533),t),s(n(3407),t),s(n(4121),t)},4121:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.LineWithValueAndCost=void 0;const r=n(1145);class s{constructor(e,t,n=(0,r.getTokenizer)().tokenLength(e+\"\\n\"),s=\"strict\"){if(this.text=e,this._value=t,this._cost=n,e.includes(\"\\n\")&&\"none\"!==s)throw new Error(\"LineWithValueAndCost: text contains newline\");if(t<0&&\"none\"!==s)throw new Error(\"LineWithValueAndCost: value is negative\");if(n<0&&\"none\"!==s)throw new Error(\"LineWithValueAndCost: cost is negative\");if(\"strict\"==s&&t>1)throw new Error(\"Value should normally be between 0 and 1 -- set validation to `loose` to ignore this error\")}get value(){return this._value}get cost(){return this._cost}adjustValue(e){return this._value*=e,this}recost(e=(e=>(0,r.getTokenizer)().tokenLength(e+\"\\n\"))){return this._cost=e(this.text),this}copy(){return new s(this.text,this.value,this.cost,\"none\")}}t.LineWithValueAndCost=s},2271:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.defaultFileSystem=t.FileSystem=void 0;const r=n(7147);t.FileSystem=class{},t.defaultFileSystem={readFile:e=>r.promises.readFile(e),mtime:async e=>(await r.promises.stat(e)).mtimeMs,async stat(e){const t=await r.promises.stat(e);return{ctime:t.ctimeMs,mtime:t.mtimeMs,size:t.size}}}},4876:(e,t)=>{\"use strict\";function n(e){return\"virtual\"===e.type}function r(e){return\"top\"===e.type}Object.defineProperty(t,\"__esModule\",{value:!0}),t.duplicateTree=t.cutTreeAfterLine=t.isTop=t.isVirtual=t.isLine=t.isBlank=t.topNode=t.blankNode=t.lineNode=t.virtualNode=void 0,t.virtualNode=function(e,t,n){return{type:\"virtual\",indentation:e,subs:t,label:n}},t.lineNode=function(e,t,n,r,s){if(\"\"===n)throw new Error(\"Cannot create a line node with an empty source line\");return{type:\"line\",indentation:e,lineNumber:t,sourceLine:n,subs:r,label:s}},t.blankNode=function(e){return{type:\"blank\",lineNumber:e,subs:[]}},t.topNode=function(e){return{type:\"top\",indentation:-1,subs:e??[]}},t.isBlank=function(e){return\"blank\"===e.type},t.isLine=function(e){return\"line\"===e.type},t.isVirtual=n,t.isTop=r,t.cutTreeAfterLine=function(e,t){!function e(s){if(!n(s)&&!r(s)&&s.lineNumber===t)return s.subs=[],!0;for(let t=0;t{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.lastLineOf=t.firstLineOf=t.encodeTree=t.describeTree=t.deparseAndCutTree=t.deparseTree=t.deparseLine=void 0;const r=n(4876),s=n(8617);function i(e){return\" \".repeat(e.indentation)+e.sourceLine+\"\\n\"}function o(e){return(0,s.foldTree)(e,\"\",(function(e,t){let n=\"\";return(0,r.isLine)(e)?n=i(e):(0,r.isBlank)(e)&&(n=\"\\n\"),t+n}),\"topDown\")}t.deparseLine=i,t.deparseTree=o,t.deparseAndCutTree=function(e,t){const n=new Set(t),s=[];let a=\"\";return function e(t){void 0!==t.label&&n.has(t.label)?(\"\"!==a&&s.push({label:void 0,source:a}),s.push({label:t.label,source:o(t)}),a=\"\"):((0,r.isLine)(t)&&(a+=i(t)),t.subs.forEach(e))}(e),\"\"!==a&&s.push({label:void 0,source:a}),s},t.describeTree=function e(t,n=0){const s=\" \".repeat(n);if(void 0===t)return\"UNDEFINED NODE\";let i;i=void 0===t.subs?\"UNDEFINED SUBS\":t.subs.map((t=>e(t,n+2))).join(\",\\n\"),i=\"\"===i?\"[]\":`[\\n${i}\\n ${s}]`;const o=((0,r.isVirtual)(t)||(0,r.isTop)(t)?\" \":String(t.lineNumber).padStart(3,\" \"))+`: ${s}`,a=void 0===t.label?\"\":JSON.stringify(t.label);return(0,r.isVirtual)(t)||(0,r.isTop)(t)?`${o}vnode(${t.indentation}, ${a}, ${i})`:(0,r.isBlank)(t)?`${o}blank(${a??\"\"})`:`${o}lnode(${t.indentation}, ${a}, ${JSON.stringify(t.sourceLine)}, ${i})`},t.encodeTree=function e(t,n=\"\"){const s=void 0===t.label?\"\":`, ${JSON.stringify(t.label)}`,i=!(0,r.isBlank)(t)&&t.subs.length>0?`[\\n${t.subs.map((t=>e(t,n+\" \"))).join(\", \\n\")}\\n${n}]`:\"[]\";switch(t.type){case\"blank\":return`${n}blankNode(${t.lineNumber}${s})`;case\"top\":return`topNode(${i}${s})`;case\"virtual\":return`${n}virtualNode(${t.indentation}, ${i}${s})`;case\"line\":return`${n}lineNode(${t.indentation}, ${t.lineNumber}, \"${t.sourceLine}\", ${i}${s})`}},t.firstLineOf=function e(t){if((0,r.isLine)(t)||(0,r.isBlank)(t))return t.lineNumber;for(const n of t.subs){const t=e(n);if(void 0!==t)return t}},t.lastLineOf=function e(t){let n,s=t.subs.length-1;for(;s>=0&&void 0===n;)n=e(t.subs[s]),s--;return void 0!==n||(0,r.isVirtual)(t)||(0,r.isTop)(t)?n:t.lineNumber}},2180:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!(\"get\"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0});const i=n(6647),o=n(1152),a=n(3469);(0,a.registerLanguageSpecificParser)(\"markdown\",o.processMarkdown),(0,a.registerLanguageSpecificParser)(\"java\",i.processJava),s(n(4876),t),s(n(3059),t),s(n(8617),t),s(n(3469),t)},6647:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.processJava=void 0;const r=n(4876),s=n(8617),i=n(3469),o=(0,i.buildLabelRules)({package:/^package /,import:/^import /,class:/\\bclass /,interface:/\\binterface /,javadoc:/^\\/\\*\\*/,comment_multi:/^\\/\\*[^*]/,comment_single:/^\\/\\//,annotation:/^@/,opener:/^[\\[({]/,closer:/^[\\])}]/});t.processJava=function(e){let t=e;return(0,i.labelLines)(t,o),t=(0,i.combineClosersAndOpeners)(t),t=(0,i.flattenVirtual)(t),(0,i.labelVirtualInherited)(t),(0,s.visitTree)(t,(e=>{if(\"class\"===e.label||\"interface\"===e.label)for(const t of e.subs)(0,r.isBlank)(t)||void 0!==t.label&&\"annotation\"!==t.label||(t.label=\"member\")}),\"bottomUp\"),t}},8617:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.rebuildTree=t.foldTree=t.visitTreeConditionally=t.visitTree=t.resetLineNumbers=t.mapLabels=t.clearLabelsIf=t.clearLabels=void 0;const r=n(4876);function s(e,t,n){!function e(r){\"topDown\"===n&&t(r),r.subs.forEach((t=>{e(t)})),\"bottomUp\"===n&&t(r)}(e)}t.clearLabels=function(e){return s(e,(e=>{e.label=void 0}),\"bottomUp\"),e},t.clearLabelsIf=function(e,t){return s(e,(e=>{e.label=e.label?t(e.label)?void 0:e.label:void 0}),\"bottomUp\"),e},t.mapLabels=function e(t,n){switch(t.type){case\"line\":case\"virtual\":const r=t.subs.map((t=>e(t,n)));return{...t,subs:r,label:t.label?n(t.label):void 0};case\"blank\":return{...t,label:t.label?n(t.label):void 0};case\"top\":return{...t,subs:t.subs.map((t=>e(t,n))),label:t.label?n(t.label):void 0}}},t.resetLineNumbers=function(e){let t=0;s(e,(function(e){(0,r.isVirtual)(e)||(0,r.isTop)(e)||(e.lineNumber=t,t++)}),\"topDown\")},t.visitTree=s,t.visitTreeConditionally=function(e,t,n){!function e(r){if(\"topDown\"===n&&!t(r))return!1;let s=!0;return r.subs.forEach((t=>{s=s&&e(t)})),\"bottomUp\"===n&&(s=s&&t(r)),s}(e)},t.foldTree=function(e,t,n,r){let i=t;return s(e,(function(e){i=n(e,i)}),r),i},t.rebuildTree=function(e,t,n){const s=e=>{if(void 0!==n&&n(e))return e;{const n=e.subs.map(s).filter((e=>void 0!==e));return e.subs=n,t(e)}},i=s(e);return void 0!==i?i:(0,r.topNode)()}},1152:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.processMarkdown=void 0;const r=n(4876),s=n(3469),i=(0,s.buildLabelRules)({heading:/^# /,subheading:/^## /,subsubheading:/### /});t.processMarkdown=function(e){let t=e;if((0,s.labelLines)(t,i),(0,r.isBlank)(t))return t;function n(e){return\"heading\"===e.label?1:\"subheading\"===e.label?2:\"subsubheading\"===e.label?3:void 0}let o=[t],a=[...t.subs];t.subs=[];for(const e of a){const t=n(e);if(void 0===t||(0,r.isBlank)(e))o[o.length-1].subs.push(e);else{for(;o.lengtht+1;)o.pop()}}return t=(0,s.groupBlocks)(t),t=(0,s.flattenVirtual)(t),(0,s.labelVirtualInherited)(t),t}},3469:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.parseTree=t.registerLanguageSpecificParser=t.flattenVirtual=t.groupBlocks=t.combineClosersAndOpeners=t.buildLabelRules=t.labelVirtualInherited=t.labelLines=t.parseRaw=void 0;const r=n(4876),s=n(8617);function i(e){const t=e.split(\"\\n\"),n=t.map((e=>e.match(/^\\s*/)[0].length)),s=t.map((e=>e.trimLeft()));function i(e){const[t,i]=o(e+1,n[e]);return[(0,r.lineNode)(n[e],e,s[e],t),i]}function o(e,t){let o;const a=[];let l,u=e;for(;ut);)if(\"\"===s[u])void 0===l&&(l=u),u+=1;else{if(void 0!==l){for(let e=l;et.matches(e.sourceLine)));n&&(e.label=n.label)}}),\"bottomUp\")}function a(e){return Object.keys(e).map((t=>{let n;return n=e[t].test?n=>e[t].test(n):e[t],{matches:n,label:t}}))}function l(e){const t=(0,s.rebuildTree)(e,(function(e){if(0===e.subs.length||-1===e.subs.findIndex((e=>\"closer\"===e.label||\"opener\"===e.label)))return e;const t=[];let n;for(let s=0;so.subs.push(e))),i.subs=[];else if(\"closer\"===i.label&&void 0!==n&&((0,r.isLine)(i)||(0,r.isVirtual)(i))&&i.indentation>=n.indentation){let e=t.length-1;for(;e>0&&(0,r.isBlank)(t[e]);)e-=1;if(n.subs.push(...t.splice(e+1)),i.subs.length>0){const e=n.subs.findIndex((e=>\"newVirtual\"!==e.label)),t=n.subs.slice(0,e),s=n.subs.slice(e),o=s.length>0?[(0,r.virtualNode)(i.indentation,s,\"newVirtual\")]:[];n.subs=[...t,...o,i]}else n.subs.push(i)}else t.push(i),(0,r.isBlank)(i)||(n=i)}return e.subs=t,e}));return(0,s.clearLabelsIf)(e,(e=>\"newVirtual\"===e)),t}t.parseRaw=i,t.labelLines=o,t.labelVirtualInherited=function(e){(0,s.visitTree)(e,(function(e){if((0,r.isVirtual)(e)&&void 0===e.label){const t=e.subs.filter((e=>!(0,r.isBlank)(e)));1===t.length&&(e.label=t[0].label)}}),\"bottomUp\")},t.buildLabelRules=a,t.combineClosersAndOpeners=l,t.groupBlocks=function(e,t=r.isBlank,n){return(0,s.rebuildTree)(e,(function(e){if(e.subs.length<=1)return e;const s=[];let i,o=[],a=!1;function l(e=!1){if(void 0!==i&&(s.length>0||!e)){const e=(0,r.virtualNode)(i,o,n);s.push(e)}else o.forEach((e=>s.push(e)))}for(let n=0;n{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getPathMarker=t.getLanguageMarker=t.commentBlockAsSingles=t.comment=t.hasLanguageMarker=t.languageCommentMarkers=void 0,t.languageCommentMarkers={abap:{start:'\"',end:\"\"},bat:{start:\"REM\",end:\"\"},bibtex:{start:\"%\",end:\"\"},blade:{start:\"#\",end:\"\"},c:{start:\"//\",end:\"\"},clojure:{start:\";\",end:\"\"},coffeescript:{start:\"//\",end:\"\"},cpp:{start:\"//\",end:\"\"},csharp:{start:\"//\",end:\"\"},css:{start:\"/*\",end:\"*/\"},dart:{start:\"//\",end:\"\"},dockerfile:{start:\"#\",end:\"\"},elixir:{start:\"#\",end:\"\"},erb:{start:\"<%#\",end:\"%>\"},erlang:{start:\"%\",end:\"\"},fsharp:{start:\"//\",end:\"\"},go:{start:\"//\",end:\"\"},groovy:{start:\"//\",end:\"\"},haml:{start:\"-#\",end:\"\"},handlebars:{start:\"{{!\",end:\"}}\"},haskell:{start:\"--\",end:\"\"},html:{start:\"\\x3c!--\",end:\"--\\x3e\"},ini:{start:\";\",end:\"\"},java:{start:\"//\",end:\"\"},javascript:{start:\"//\",end:\"\"},javascriptreact:{start:\"//\",end:\"\"},jsonc:{start:\"//\",end:\"\"},jsx:{start:\"//\",end:\"\"},julia:{start:\"#\",end:\"\"},kotlin:{start:\"//\",end:\"\"},latex:{start:\"%\",end:\"\"},less:{start:\"//\",end:\"\"},lua:{start:\"--\",end:\"\"},makefile:{start:\"#\",end:\"\"},markdown:{start:\"[]: #\",end:\"\"},\"objective-c\":{start:\"//\",end:\"\"},\"objective-cpp\":{start:\"//\",end:\"\"},perl:{start:\"#\",end:\"\"},php:{start:\"//\",end:\"\"},powershell:{start:\"#\",end:\"\"},pug:{start:\"//\",end:\"\"},python:{start:\"#\",end:\"\"},ql:{start:\"//\",end:\"\"},r:{start:\"#\",end:\"\"},razor:{start:\"\\x3c!--\",end:\"--\\x3e\"},ruby:{start:\"#\",end:\"\"},rust:{start:\"//\",end:\"\"},sass:{start:\"//\",end:\"\"},scala:{start:\"//\",end:\"\"},scss:{start:\"//\",end:\"\"},shellscript:{start:\"#\",end:\"\"},slim:{start:\"/\",end:\"\"},solidity:{start:\"//\",end:\"\"},sql:{start:\"--\",end:\"\"},stylus:{start:\"//\",end:\"\"},svelte:{start:\"\\x3c!--\",end:\"--\\x3e\"},swift:{start:\"//\",end:\"\"},terraform:{start:\"#\",end:\"\"},tex:{start:\"%\",end:\"\"},typescript:{start:\"//\",end:\"\"},typescriptreact:{start:\"//\",end:\"\"},vb:{start:\"'\",end:\"\"},verilog:{start:\"//\",end:\"\"},\"vue-html\":{start:\"\\x3c!--\",end:\"--\\x3e\"},vue:{start:\"//\",end:\"\"},xml:{start:\"\\x3c!--\",end:\"--\\x3e\"},xsl:{start:\"\\x3c!--\",end:\"--\\x3e\"},yaml:{start:\"#\",end:\"\"}};const n=[\"php\",\"plaintext\"],r={html:\"\",python:\"#!/usr/bin/env python3\",ruby:\"#!/usr/bin/env ruby\",shellscript:\"#!/bin/sh\",yaml:\"# YAML data\"};function s({source:e}){return e.startsWith(\"#!\")||e.startsWith(\"i(e,n))).join(\"\\n\");return r?s+\"\\n\":s},t.getLanguageMarker=function(e){const{languageId:t}=e;return-1!==n.indexOf(t)||s(e)?\"\":t in r?r[t]:i(`Language: ${t}`,t)},t.getPathMarker=function(e){return e.relativePath?i(`Path: ${e.relativePath}`,e.languageId):\"\"}},5563:function(e,t,n){\"use strict\";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!(\"get\"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),t.createWorker=t.SnippetSemantics=t.SnippetProviderType=t.NeighboringTabsOption=t.NeighboringSnippetType=t.getCursorContext=t.languageCommentMarkers=t.commentBlockAsSingles=t.comment=t.FileSystem=void 0;const i=n(1017),o=n(1267);s(n(3346),t);var a=n(2271);Object.defineProperty(t,\"FileSystem\",{enumerable:!0,get:function(){return a.FileSystem}}),s(n(2180),t);var l=n(2417);Object.defineProperty(t,\"comment\",{enumerable:!0,get:function(){return l.comment}}),Object.defineProperty(t,\"commentBlockAsSingles\",{enumerable:!0,get:function(){return l.commentBlockAsSingles}}),Object.defineProperty(t,\"languageCommentMarkers\",{enumerable:!0,get:function(){return l.languageCommentMarkers}}),s(n(8306),t),s(n(9610),t),s(n(8312),t);var u=n(648);Object.defineProperty(t,\"getCursorContext\",{enumerable:!0,get:function(){return u.getCursorContext}}),s(n(6845),t);var _=n(9125);Object.defineProperty(t,\"NeighboringSnippetType\",{enumerable:!0,get:function(){return _.NeighboringSnippetType}}),Object.defineProperty(t,\"NeighboringTabsOption\",{enumerable:!0,get:function(){return _.NeighboringTabsOption}});var c=n(4830);Object.defineProperty(t,\"SnippetProviderType\",{enumerable:!0,get:function(){return c.SnippetProviderType}}),Object.defineProperty(t,\"SnippetSemantics\",{enumerable:!0,get:function(){return c.SnippetSemantics}}),s(n(1145),t),t.createWorker=function(){return new o.Worker((0,i.resolve)(__dirname,\"..\",\"dist\",\"worker.js\"))}},5179:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.extractLocalImportContext=t.getDocComment=void 0;const r=n(1017),s=n(8306);function i(e,t){let n=t.namedChild(1)?.text.slice(1,-1);if(!n||!n.startsWith(\".\"))return null;if(\"\"===(0,r.extname)(n))n+=\".ts\";else if(\".ts\"!==(0,r.extname)(n))return null;return(0,r.join)((0,r.dirname)(e),n)}function o(e){let t=[];if(\"import_clause\"===e.namedChild(0)?.type){let n=e.namedChild(0);if(\"named_imports\"===n?.namedChild(0)?.type){let e=n.namedChild(0);for(let n of e?.namedChildren??[])if(\"import_specifier\"===n.type){const e=n.childForFieldName(\"name\")?.text;if(e){const r=n.childForFieldName(\"alias\")?.text;t.push({name:e,alias:r})}}}}return t}const a=new Map,l=1e3,u=2e3;function _(e,t){let n=t?.childForFieldName(\"name\")?.text??\"\";switch(t?.type){case\"ambient_declaration\":return _(e,t.namedChild(0));case\"interface_declaration\":case\"enum_declaration\":case\"type_alias_declaration\":return{name:n,decl:t.text};case\"function_declaration\":case\"function_signature\":return{name:n,decl:c(e,t)};case\"class_declaration\":{let r=function(e,t){let n=t.childForFieldName(\"body\");if(n)return n.namedChildren.map((t=>p(e,t))).filter((e=>e))}(e,t),s=\"\";if(r){let n=t.childForFieldName(\"body\");s=`declare ${e.substring(t.startIndex,n.startIndex+1)}`,s+=r.map((e=>\"\\n\"+e)).join(\"\"),s+=\"\\n}\"}return{name:n,decl:s}}}return{name:n,decl:\"\"}}function c(e,t){const n=t.childForFieldName(\"return_type\")?.endIndex??t.childForFieldName(\"parameters\")?.endIndex;if(void 0!==n){let r=e.substring(t.startIndex,n)+\";\";return\"function_declaration\"===t.type||\"function_signature\"===t.type?\"declare \"+r:r}return\"\"}function d(e,t){const n=(0,s.getFirstPrecedingComment)(t);return n?e.substring(n.startIndex,t.startIndex):\"\"}function p(e,t){if(\"accessibility_modifier\"===t?.firstChild?.type&&\"private\"===t.firstChild.text)return\"\";const n=function(e,t){let n=t.startIndex-1;for(;n>=0&&(\" \"===e[n]||\"\\t\"===e[n]);)n--;if(n<0||\"\\n\"===e[n])return e.substring(n+1,t.startIndex)}(e,(0,s.getFirstPrecedingComment)(t)??t)??\" \",r=d(e,t);switch(t.type){case\"ambient_declaration\":const s=t.namedChild(0);return s?n+r+p(e,s):\"\";case\"method_definition\":case\"method_signature\":return n+r+c(e,t);case\"public_field_definition\":{let s=t.childForFieldName(\"type\")?.endIndex??t.childForFieldName(\"name\")?.endIndex;if(void 0!==s)return n+r+e.substring(t.startIndex,s)+\";\"}}return\"\"}async function m(e,t,n){let r=new Map,i=-1;try{i=await n.mtime(e)}catch{return r}let o=a.get(e);if(o&&o.mtime===i)return o.exports;if(\"typescript\"===t){let i=null;try{let o=(await n.readFile(e)).toString();i=await(0,s.parseTreeSitter)(t,o);for(let e of(0,s.queryExports)(t,i.rootNode))for(let t of e.captures){let e=t.node;if(\"export_statement\"===e.type){let t=e.childForFieldName(\"declaration\");if(t?.hasError())continue;let{name:n,decl:s}=_(o,t);if(n){s=d(o,e)+s;let t=r.get(n);t||(t=[],r.set(n,t)),t.push(s)}}}}catch{}finally{i&&i.delete()}}if(a.size>u)for(let e of a.keys())if(a.delete(e),r.size<=l)break;return a.set(e,{mtime:i,exports:r}),r}t.getDocComment=d;const f=/^\\s*import\\s*(type|)\\s*\\{[^}]*\\}\\s*from\\s*['\"]\\./gm;t.extractLocalImportContext=async function(e,t){let{source:n,uri:r,languageId:a}=e;return t&&\"typescript\"===a?async function(e,t,n){let r=\"typescript\",a=[];const l=function(e){let t,n=-1;f.lastIndex=-1;do{t=f.exec(e),t&&(n=f.lastIndex+t.length)}while(t);if(-1===n)return-1;const r=e.indexOf(\"\\n\",n);return-1!==r?r:e.length}(e);if(-1===l)return a;e=e.substring(0,l);let u=await(0,s.parseTreeSitter)(r,e);try{for(let e of function(e){let t=[];for(let n of e.namedChildren)\"import_statement\"===n.type&&t.push(n);return t}(u.rootNode)){let s=i(t,e);if(!s)continue;let l=o(e);if(0===l.length)continue;let u=await m(s,r,n);for(let e of l)u.has(e.name)&&a.push(...u.get(e.name))}}finally{u.delete()}return a}(n,r,t):[]}},8306:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getCallSites=t.getFunctionPositions=t.getFirstPrecedingComment=t.isFunctionDefinition=t.isFunction=t.getAncestorWithSiblingFunctions=t.queryPythonIsDocstring=t.queryGlobalVars=t.queryExports=t.queryImports=t.queryFunctions=t.getBlockCloseToken=t.parsesWithoutError=t.parseTreeSitter=t.getLanguage=t.languageIdToWasmLanguage=t.isSupportedLanguageId=t.WASMLanguage=void 0;const r=n(1017),s=n(4087),i=n(4087);var o;!function(e){e.Python=\"python\",e.JavaScript=\"javascript\",e.TypeScript=\"typescript\",e.TSX=\"tsx\",e.Go=\"go\",e.Ruby=\"ruby\"}(o=t.WASMLanguage||(t.WASMLanguage={}));const a={python:o.Python,javascript:o.JavaScript,javascriptreact:o.JavaScript,jsx:o.JavaScript,typescript:o.TypeScript,typescriptreact:o.TSX,go:o.Go,ruby:o.Ruby};function l(e){if(!(e in a))throw new Error(`Unrecognized language: ${e}`);return a[e]}t.isSupportedLanguageId=function(e){return e in a},t.languageIdToWasmLanguage=l;const u=\"[\\n (function body: (statement_block) @body)\\n (function_declaration body: (statement_block) @body)\\n (generator_function body: (statement_block) @body)\\n (generator_function_declaration body: (statement_block) @body)\\n (method_definition body: (statement_block) @body)\\n (arrow_function body: (statement_block) @body)\\n ] @function\",_={python:[[\"(function_definition body: (block\\n (expression_statement (string))? @docstring) @body) @function\"],['(ERROR (\"def\" (identifier) (parameters))) @function']],javascript:[[u]],typescript:[[u]],tsx:[[u]],go:[[\"[\\n (function_declaration body: (block) @body)\\n (method_declaration body: (block) @body)\\n ] @function\"]],ruby:[['[\\n (method name: (_) parameters: (method_parameters)? @params [(_)+ \"end\"] @body)\\n (singleton_method name: (_) parameters: (method_parameters)? @params [(_)+ \"end\"] @body)\\n ] @function']]},c='(variable_declarator value: (call_expression function: ((identifier) @req (#eq? @req \"require\"))))',d=`\\n (lexical_declaration ${c}+)\\n (variable_declaration ${c}+)\\n`,p=[[`(program [ ${d} ] @import)`],[\"(program [ (import_statement) (import_alias) ] @import)\"]],m={python:[[\"(module (future_import_statement) @import)\"],[\"(module (import_statement) @import)\"],[\"(module (import_from_statement) @import)\"]],javascript:[[`(program [ ${d} ] @import)`],[\"(program [ (import_statement) ] @import)\"]],typescript:p,tsx:p,go:[],ruby:[]},f=[[\"(program (export_statement) @export)\"]],h={python:[],javascript:f,typescript:f,tsx:f,go:[],ruby:[]},g={python:[[\"(module (global_statement) @globalVar)\"],[\"(module (expression_statement) @globalVar)\"]],javascript:[],typescript:[],tsx:[],go:[],ruby:[]},b=[\"function\",\"function_declaration\",\"generator_function\",\"generator_function_declaration\",\"method_definition\",\"arrow_function\"],y={python:new Set([\"function_definition\"]),javascript:new Set(b),typescript:new Set(b),tsx:new Set(b),go:new Set([\"function_declaration\",\"method_declaration\"]),ruby:new Set([\"method\",\"singleton_method\"])},w={python:e=>\"module\"===e.type||\"block\"===e.type&&\"class_definition\"===e.parent?.type,javascript:e=>\"program\"===e.type||\"class_body\"===e.type,typescript:e=>\"program\"===e.type||\"class_body\"===e.type,tsx:e=>\"program\"===e.type||\"class_body\"===e.type,go:e=>\"source_file\"===e.type,ruby:e=>\"program\"===e.type||\"class\"===e.type},E=new Map;async function S(e){const t=l(e);if(!E.has(t)){const e=await async function(e){await s.init();const t=(0,r.resolve)(__dirname,\"..\",\"dist\",`tree-sitter-${e}.wasm`);return i.Language.load(t)}(t);E.set(t,e)}return E.get(t)}async function v(e,t){let n=await S(e);const r=new s;r.setLanguage(n);const i=r.parse(t);return r.delete(),i}function M(e,t){const n=[];for(const r of e){if(!r[1]){const e=t.tree.getLanguage();r[1]=e.query(r[0])}n.push(...r[1].matches(t))}return n}function T(e,t){return M(_[l(e)],t)}t.getLanguage=S,t.parseTreeSitter=v,t.parsesWithoutError=async function(e,t){const n=await v(e,t),r=!n.rootNode.hasError();return n.delete(),r},t.getBlockCloseToken=function(e){switch(l(e)){case o.Python:return null;case o.JavaScript:case o.TypeScript:case o.TSX:case o.Go:return\"}\";case o.Ruby:return\"end\"}},t.queryFunctions=T,t.queryImports=function(e,t){return M(m[l(e)],t)},t.queryExports=function(e,t){return M(h[l(e)],t)},t.queryGlobalVars=function(e,t){return M(g[l(e)],t)};const k=[\"[\\n (class_definition (block (expression_statement (string))))\\n (function_definition (block (expression_statement (string))))\\n]\"];function I(e,t){return y[l(e)].has(t.type)}t.queryPythonIsDocstring=function(e){return 1==M([k],e).length},t.getAncestorWithSiblingFunctions=function(e,t){const n=w[l(e)];for(;t.parent;){if(n(t.parent))return t;t=t.parent}return t.parent?t:null},t.isFunction=I,t.isFunctionDefinition=function(e,t){switch(l(e)){case o.Python:case o.Go:case o.Ruby:return I(e,t);case o.JavaScript:case o.TypeScript:case o.TSX:if(\"function_declaration\"===t.type||\"generator_function_declaration\"===t.type||\"method_definition\"===t.type)return!0;if(\"lexical_declaration\"===t.type||\"variable_declaration\"===t.type){if(t.namedChildCount>1)return!1;let n=t.namedChild(0);if(null==n)return!1;let r=n.namedChild(1);return null!==r&&I(e,r)}if(\"expression_statement\"===t.type){let n=t.namedChild(0);if(\"assignment_expression\"===n?.type){let t=n.namedChild(1);return null!==t&&I(e,t)}}return!1}},t.getFirstPrecedingComment=function(e){let t=e;for(;\"comment\"===t.previousSibling?.type;){let e=t.previousSibling;if(e.endPosition.row{const t=e.captures.find((e=>\"function\"===e.name)).node;return{startIndex:t.startIndex,endIndex:t.endIndex}}));return n.delete(),r};const x={python:[[\"(call\\n function: [\\n (identifier) @caller\\n (attribute attribute:(identifier) @caller)\\n ]\\n arguments: (argument_list) @args\\n )\"]],javascript:[],tsx:[],typescript:[],go:[],ruby:[]};t.getCallSites=async function(e){if(!(e.languageId in x))return[];let t=e.offset,n=e.source.substring(0,t);const r=Math.max(n.length-5e3,0),s=n.substring(0,r).split(\"\\n\").length-1;t-=r,n=n.substring(r),n+=\")))))\";let i=[];const o=await v(e.languageId,n);return M(x[a[e.languageId]],o.rootNode).forEach(((e,r)=>{let o=\"\",a=0,l=0,u=0,_=0;if(e.captures.forEach(((e,t)=>{const r=e.node;\"caller\"==e.name?(o=n.substring(r.startIndex,r.endIndex),a=r.startPosition.row+s,l=r.startPosition.column):\"args\"==e.name&&(u=r.startIndex,_=r.endIndex)})),t>=u&&t<=_){const e={line:a,character:l};i.push([o,e])}})),o.delete(),i.map((([e,t])=>({name:e,position:t})))}},9610:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getNodeStart=t.isBlockBodyFinished=t.isEmptyBlockStart=t.getBlockParser=void 0;const r=n(8306);class s{constructor(e,t,n){this.languageId=e,this.nodeMatch=t,this.nodeTypesWithBlockOrStmtChild=n}async getNodeMatchAtPosition(e,t,n){const s=await(0,r.parseTreeSitter)(this.languageId,e);try{let e=s.rootNode.descendantForIndex(t);for(;e;){const t=this.nodeMatch[e.type];if(t){if(!this.nodeTypesWithBlockOrStmtChild.has(e.type))break;const n=this.nodeTypesWithBlockOrStmtChild.get(e.type),r=\"\"==n?e.namedChildren[0]:e.childForFieldName(n);if(r?.type==t)break}e=e.parent}if(!e)return;return n(e)}finally{s.delete()}}getNextBlockAtPosition(e,t,n){return this.getNodeMatchAtPosition(e,t,(e=>{let t=e.children.reverse().find((t=>t.type==this.nodeMatch[e.type]));if(t){if(\"python\"==this.languageId&&t.parent){const e=\":\"==t.parent.type?t.parent.parent:t.parent;let n=e?.nextSibling;for(;n&&\"comment\"==n.type;){const r=n.startPosition.row==t.endPosition.row&&n.startPosition.column>=t.endPosition.column,s=n.startPosition.row>e.endPosition.row&&n.startPosition.column>e.startPosition.column;if(!r&&!s)break;t=n,n=n.nextSibling}}if(!(t.endIndex>=t.tree.rootNode.endIndex-1&&(t.hasError()||t.parent.hasError())))return n(t)}}))}async isBlockBodyFinished(e,t,n){const r=(e+t).trimEnd(),s=await this.getNextBlockAtPosition(r,n,(e=>e.endIndex));if(void 0!==s&&s0?t:void 0}}getNodeStart(e,t){const n=e.trimEnd();return this.getNodeMatchAtPosition(n,t,(e=>e.startIndex))}}class i extends s{constructor(e,t,n,r,s){super(e,r,s),this.blockEmptyMatch=t,this.lineMatch=n}isBlockStart(e){return this.lineMatch.test(e.trimStart())}async isBlockBodyEmpty(e,t){const n=await this.getNextBlockAtPosition(e,t,(n=>{n.startIndex0&&/\\s/.test(e.charAt(n-1));)n--;return n}function a(e,t){const n=e.startIndex,r=e.startIndex-e.startPosition.column,s=t.substring(r,n);if(/^\\s*$/.test(s))return s}function l(e,t,n){if(t.startPosition.row<=e.startPosition.row)return!1;const r=a(e,n),s=a(t,n);return void 0!==r&&void 0!==s&&r.startsWith(s)}class u extends s{constructor(e,t,n,r,s,i,o){super(e,t,n),this.startKeywords=r,this.blockNodeType=s,this.emptyStatementType=i,this.curlyBraceLanguage=o}isBlockEmpty(e,t){let n=e.text.trim();return this.curlyBraceLanguage&&(n.startsWith(\"{\")&&(n=n.slice(1)),n.endsWith(\"}\")&&(n=n.slice(0,-1)),n=n.trim()),0==n.length||!(\"python\"!=this.languageId||\"class_definition\"!=e.parent?.type&&\"function_definition\"!=e.parent?.type||1!=e.children.length||!(0,r.queryPythonIsDocstring)(e.parent))}async isEmptyBlockStart(e,t){if(t>e.length)throw new RangeError(\"Invalid offset\");for(let n=t;n\";\"==e.type))&&n.endIndex<=t}n=n.parent}}let s=null,i=null,o=null,a=r;for(;null!=a;){if(a.type==this.blockNodeType){i=a;break}if(this.nodeMatch[a.type]){o=a;break}if(\"ERROR\"==a.type){s=a;break}a=a.parent}if(null!=i){if(!i.parent||!this.nodeMatch[i.parent.type])return!1;if(\"python\"==this.languageId){const e=i.previousSibling;if(null!=e&&e.hasError()&&(e.text.startsWith('\"\"\"')||e.text.startsWith(\"'''\")))return!0}return this.isBlockEmpty(i,t)}if(null!=s){if(\"module\"==s.previousSibling?.type||\"internal_module\"==s.previousSibling?.type||\"def\"==s.previousSibling?.type)return!0;const e=[...s.children].reverse(),n=e.find((e=>this.startKeywords.includes(e.type)));let i=e.find((e=>e.type==this.blockNodeType));if(n){switch(this.languageId){case\"python\":{let t;\"try\"==n.type&&\"identifier\"==r.type&&r.text.length>4&&(i=e.find((e=>e.hasError()))?.children.find((e=>\"block\"==e.type)));let o=0;for(const e of s.children){if(\":\"==e.type&&0==o){t=e;break}\"(\"==e.type&&(o+=1),\")\"==e.type&&(o-=1)}if(t&&n.endIndex<=t.startIndex&&t.nextSibling){if(\"def\"==n.type){const e=t.nextSibling;if('\"'==e.type||\"'\"==e.type)return!0;if(\"ERROR\"==e.type&&('\"\"\"'==e.text||\"'''\"==e.text))return!0}return!1}break}case\"javascript\":{const t=e.find((e=>\"formal_parameters\"==e.type));if(\"class\"==n.type&&t)return!0;const r=e.find((e=>\"{\"==e.type));if(r&&r.startIndex>n.endIndex&&null!=r.nextSibling)return!1;if(e.find((e=>\"do\"==e.type))&&\"while\"==n.type)return!1;if(\"=>\"==n.type&&n.nextSibling&&\"{\"!=n.nextSibling.type)return!1;break}case\"typescript\":{const t=e.find((e=>\"{\"==e.type));if(t&&t.startIndex>n.endIndex&&null!=t.nextSibling)return!1;if(e.find((e=>\"do\"==e.type))&&\"while\"==n.type)return!1;if(\"=>\"==n.type&&n.nextSibling&&\"{\"!=n.nextSibling.type)return!1;break}}return!(i&&i.startIndex>n.endIndex)||this.isBlockEmpty(i,t)}}if(null!=o){const e=this.nodeMatch[o.type],n=o.children.slice().reverse().find((t=>t.type==e));if(n)return this.isBlockEmpty(n,t);if(this.nodeTypesWithBlockOrStmtChild.has(o.type)){const e=this.nodeTypesWithBlockOrStmtChild.get(o.type),t=\"\"==e?o.children[0]:o.childForFieldName(e);if(t&&t.type!=this.blockNodeType&&t.type!=this.emptyStatementType)return!1}return!0}return!1}finally{n.delete()}}}const _={python:new u(\"python\",{class_definition:\"block\",elif_clause:\"block\",else_clause:\"block\",except_clause:\"block\",finally_clause:\"block\",for_statement:\"block\",function_definition:\"block\",if_statement:\"block\",try_statement:\"block\",while_statement:\"block\",with_statement:\"block\"},new Map,[\"def\",\"class\",\"if\",\"elif\",\"else\",\"for\",\"while\",\"try\",\"except\",\"finally\",\"with\"],\"block\",null,!1),javascript:new u(\"javascript\",{arrow_function:\"statement_block\",catch_clause:\"statement_block\",do_statement:\"statement_block\",else_clause:\"statement_block\",finally_clause:\"statement_block\",for_in_statement:\"statement_block\",for_statement:\"statement_block\",function:\"statement_block\",function_declaration:\"statement_block\",generator_function:\"statement_block\",generator_function_declaration:\"statement_block\",if_statement:\"statement_block\",method_definition:\"statement_block\",try_statement:\"statement_block\",while_statement:\"statement_block\",with_statement:\"statement_block\",class:\"class_body\",class_declaration:\"class_body\"},new Map([[\"arrow_function\",\"body\"],[\"do_statement\",\"body\"],[\"else_clause\",\"\"],[\"for_in_statement\",\"body\"],[\"for_statement\",\"body\"],[\"if_statement\",\"consequence\"],[\"while_statement\",\"body\"],[\"with_statement\",\"body\"]]),[\"=>\",\"try\",\"catch\",\"finally\",\"do\",\"for\",\"if\",\"else\",\"while\",\"with\",\"function\",\"function*\",\"class\"],\"statement_block\",\"empty_statement\",!0),typescript:new u(\"typescript\",{ambient_declaration:\"statement_block\",arrow_function:\"statement_block\",catch_clause:\"statement_block\",do_statement:\"statement_block\",else_clause:\"statement_block\",finally_clause:\"statement_block\",for_in_statement:\"statement_block\",for_statement:\"statement_block\",function:\"statement_block\",function_declaration:\"statement_block\",generator_function:\"statement_block\",generator_function_declaration:\"statement_block\",if_statement:\"statement_block\",internal_module:\"statement_block\",method_definition:\"statement_block\",module:\"statement_block\",try_statement:\"statement_block\",while_statement:\"statement_block\",abstract_class_declaration:\"class_body\",class:\"class_body\",class_declaration:\"class_body\"},new Map([[\"arrow_function\",\"body\"],[\"do_statement\",\"body\"],[\"else_clause\",\"\"],[\"for_in_statement\",\"body\"],[\"for_statement\",\"body\"],[\"if_statement\",\"consequence\"],[\"while_statement\",\"body\"],[\"with_statement\",\"body\"]]),[\"declare\",\"=>\",\"try\",\"catch\",\"finally\",\"do\",\"for\",\"if\",\"else\",\"while\",\"with\",\"function\",\"function*\",\"class\"],\"statement_block\",\"empty_statement\",!0),tsx:new u(\"typescriptreact\",{ambient_declaration:\"statement_block\",arrow_function:\"statement_block\",catch_clause:\"statement_block\",do_statement:\"statement_block\",else_clause:\"statement_block\",finally_clause:\"statement_block\",for_in_statement:\"statement_block\",for_statement:\"statement_block\",function:\"statement_block\",function_declaration:\"statement_block\",generator_function:\"statement_block\",generator_function_declaration:\"statement_block\",if_statement:\"statement_block\",internal_module:\"statement_block\",method_definition:\"statement_block\",module:\"statement_block\",try_statement:\"statement_block\",while_statement:\"statement_block\",abstract_class_declaration:\"class_body\",class:\"class_body\",class_declaration:\"class_body\"},new Map([[\"arrow_function\",\"body\"],[\"do_statement\",\"body\"],[\"else_clause\",\"\"],[\"for_in_statement\",\"body\"],[\"for_statement\",\"body\"],[\"if_statement\",\"consequence\"],[\"while_statement\",\"body\"],[\"with_statement\",\"body\"]]),[\"declare\",\"=>\",\"try\",\"catch\",\"finally\",\"do\",\"for\",\"if\",\"else\",\"while\",\"with\",\"function\",\"function*\",\"class\"],\"statement_block\",\"empty_statement\",!0),go:new i(\"go\",\"{}\",/\\b(func|if|else|for)\\b/,{communication_case:\"block\",default_case:\"block\",expression_case:\"block\",for_statement:\"block\",func_literal:\"block\",function_declaration:\"block\",if_statement:\"block\",labeled_statement:\"block\",method_declaration:\"block\",type_case:\"block\"},new Map),ruby:new i(\"ruby\",\"end\",/\\b(BEGIN|END|case|class|def|do|else|elsif|for|if|module|unless|until|while)\\b|->/,{begin_block:\"}\",block:\"}\",end_block:\"}\",lambda:\"block\",for:\"do\",until:\"do\",while:\"do\",case:\"end\",do:\"end\",if:\"end\",method:\"end\",module:\"end\",unless:\"end\",do_block:\"end\"},new Map)};function c(e){return _[(0,r.languageIdToWasmLanguage)(e)]}t.getBlockParser=c,t.isEmptyBlockStart=async function(e,t,n){return!!(0,r.isSupportedLanguageId)(e)&&c(e).isEmptyBlockStart(t,n)},t.isBlockBodyFinished=async function(e,t,n,s){if((0,r.isSupportedLanguageId)(e))return c(e).isBlockBodyFinished(t,n,s)},t.getNodeStart=async function(e,t,n){if((0,r.isSupportedLanguageId)(e))return c(e).getNodeStart(t,n)}},8312:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getPrompt=t.newLineEnded=t.normalizeLanguageId=t.PromptOptions=t.SuffixStartMode=t.SuffixMatchOption=t.SuffixOption=t.LineEndingOptions=t.LocalImportContextOption=t.SnippetSelectionOption=t.SnippetPositionOption=t.PathMarkerOption=t.LanguageMarkerOption=t.DEFAULT_NUM_OF_SNIPPETS=t.TOKENS_RESERVED_FOR_SUFFIX_ENCODING=t.MAX_EDIT_DISTANCE_LENGTH=t.MAX_PROMPT_LENGTH=void 0;const r=n(2417),s=n(5179),i=n(7670),o=n(6845),a=n(9125),l=n(4830),u=n(2395),_=n(1145),c=n(4456);let d={text:\"\",tokens:[]};var p,m,f,h,g,b,y,w,E;t.MAX_PROMPT_LENGTH=1500,t.MAX_EDIT_DISTANCE_LENGTH=50,t.TOKENS_RESERVED_FOR_SUFFIX_ENCODING=5,t.DEFAULT_NUM_OF_SNIPPETS=4,function(e){e.NoMarker=\"nomarker\",e.Top=\"top\",e.Always=\"always\"}(p=t.LanguageMarkerOption||(t.LanguageMarkerOption={})),function(e){e.NoMarker=\"nomarker\",e.Top=\"top\",e.Always=\"always\"}(m=t.PathMarkerOption||(t.PathMarkerOption={})),function(e){e.TopOfText=\"top\",e.DirectlyAboveCursor=\"aboveCursor\",e.AfterSiblings=\"afterSiblings\"}(f=t.SnippetPositionOption||(t.SnippetPositionOption={})),function(e){e.BestMatch=\"bestMatch\",e.TopK=\"topK\"}(h=t.SnippetSelectionOption||(t.SnippetSelectionOption={})),function(e){e.NoContext=\"nocontext\",e.Declarations=\"declarations\"}(g=t.LocalImportContextOption||(t.LocalImportContextOption={})),function(e){e.ConvertToUnix=\"unix\",e.KeepOriginal=\"keep\"}(b=t.LineEndingOptions||(t.LineEndingOptions={})),(E=t.SuffixOption||(t.SuffixOption={})).None=\"none\",E.FifteenPercent=\"fifteenPercent\",function(e){e.Equal=\"equal\",e.Levenshtein=\"levenshteineditdistance\"}(y=t.SuffixMatchOption||(t.SuffixMatchOption={})),function(e){e.Cursor=\"cursor\",e.CursorTrimStart=\"cursortrimstart\",e.SiblingBlock=\"siblingblock\",e.SiblingBlockTrimStart=\"siblingblocktrimstart\"}(w=t.SuffixStartMode||(t.SuffixStartMode={}));class S{constructor(e,n){if(this.fs=e,this.maxPromptLength=t.MAX_PROMPT_LENGTH,this.languageMarker=p.Top,this.pathMarker=m.Top,this.localImportContext=g.Declarations,this.snippetPosition=f.TopOfText,this.numberOfSnippets=t.DEFAULT_NUM_OF_SNIPPETS,this.snippetProviderOptions={\"neighboring-tabs\":{normalizationFunction:\"affine\",normalizationParams:[1,0]},retrieval:{normalizationFunction:\"affine\",normalizationParams:[-1,0]},\"symbol-def\":{normalizationFunction:\"affine\",normalizationParams:[1,0],reservedSnippetCount:2}},this.neighboringTabs=a.NeighboringTabsOption.Eager,this.neighboringSnippetTypes=a.NeighboringSnippetType.NeighboringSnippets,this.lineEnding=b.ConvertToUnix,this.suffixPercent=0,this.snippetPercent=0,this.suffixStartMode=w.Cursor,this.tokenizerName=_.TokenizerName.cushman001,this.suffixMatchThreshold=0,this.suffixMatchCriteria=y.Levenshtein,this.fimSuffixLengthThreshold=0,this.cursorContextFix=!1,this.cursorSnippetsPickingStrategy=o.CursorSnippetsPickingStrategy.CursorJaccard,n){const e=n?.snippetSelection;if(e&&!Object.values(h).includes(e))throw new Error(`Invalid value for snippetSelection: ${e}`);for(const e in n)if(\"snippetProviderOptions\"!==e)this[e]=n[e];else{const e=n.snippetProviderOptions||{};let t;for(t in e){const n=e[t];n&&(this.snippetProviderOptions[t]={...this.snippetProviderOptions[t],...n})}}}if(this.suffixPercent<0||this.suffixPercent>100)throw new Error(`suffixPercent must be between 0 and 100, but was ${this.suffixPercent}`);if(this.snippetPercent<0||this.snippetPercent>100)throw new Error(`snippetPercent must be between 0 and 100, but was ${this.snippetPercent}`);if(this.suffixMatchThreshold<0||this.suffixMatchThreshold>100)throw new Error(`suffixMatchThreshold must be at between 0 and 100, but was ${this.suffixMatchThreshold}`);if(this.fimSuffixLengthThreshold<-1)throw new Error(`fimSuffixLengthThreshold must be at least -1, but was ${this.fimSuffixLengthThreshold}`);if(void 0!==this.indentationMinLength&&void 0!==this.indentationMaxLength){if(this.indentationMinLength>this.indentationMaxLength)throw new Error(`indentationMinLength must be less than or equal to indentationMaxLength, but was ${this.indentationMinLength} and ${this.indentationMaxLength}`);if(this.indentationMinLength<0)throw new Error(`indentationMinLength must be greater than or equal to zero but was ${this.indentationMinLength}`)}if(this.snippetSelection===h.TopK&&void 0===this.snippetSelectionK)throw new Error(\"snippetSelectionK must be defined.\");if(this.snippetSelection===h.TopK&&this.snippetSelectionK&&this.snippetSelectionK<=0)throw new Error(`snippetSelectionK must be greater than 0, but was ${this.snippetSelectionK}`)}}t.PromptOptions=S;const v={javascriptreact:\"javascript\",jsx:\"javascript\",typescriptreact:\"typescript\",jade:\"pug\",cshtml:\"razor\"};function M(e){return e=e.toLowerCase(),v[e]??e}function T(e){return\"\"===e||e.endsWith(\"\\n\")?e:e+\"\\n\"}t.normalizeLanguageId=M,t.newLineEnded=T,t.getPrompt=async function(e,n,o={},h=[],b=[],E){const v=new S(e,o),k=(0,_.getTokenizer)(v.tokenizerName);let I=!1;const{source:x,offset:N}=n;if(N<0||N>x.length)throw new Error(`Offset ${N} is out of range.`);n.languageId=M(n.languageId);const P=new c.Priorities,F=P.justBelow(c.Priorities.TOP),L=v.languageMarker===p.Always?P.justBelow(c.Priorities.TOP):P.justBelow(F),O=v.pathMarker===m.Always?P.justBelow(c.Priorities.TOP):P.justBelow(F),C=P.justBelow(F),A=P.justBelow(C),R=P.justAbove(F),D=new c.PromptWishlist(k,v.lineEnding);let j,B;if(v.languageMarker!==p.NoMarker){const e=T((0,r.getLanguageMarker)(n));j=D.append(e,c.PromptElementKind.LanguageMarker,L)}if(v.pathMarker!==m.NoMarker){const e=T((0,r.getPathMarker)(n));e.length>0&&(B=D.append(e,c.PromptElementKind.PathMarker,O))}if(v.localImportContext!==g.NoContext)for(const e of await(0,s.extractLocalImportContext)(n,v.fs))D.append(T(e),c.PromptElementKind.ImportedFile,C);const U=[...b,...v.neighboringTabs===a.NeighboringTabsOption.None||0===h.length?[]:await(0,a.getNeighborSnippets)(n,h,v.neighboringSnippetTypes,v.neighboringTabs,v.cursorContextFix,v.indentationMinLength,v.indentationMaxLength,v.snippetSelection,v.snippetSelectionK,E,v.cursorSnippetsPickingStrategy)];function W(){const e=Math.round(v.snippetPercent/100*v.maxPromptLength);(0,l.processSnippetsForWishlist)(U,n.languageId,k,v.snippetProviderOptions,{priorities:P,low:A,high:R},v.numberOfSnippets,e).forEach((e=>{let t=c.PromptElementKind.SimilarFile;e.provider===l.SnippetProviderType.Retrieval?t=c.PromptElementKind.RetrievalSnippet:e.provider==l.SnippetProviderType.SymbolDef&&(t=c.PromptElementKind.SymbolDefinition),D.append(e.announcedSnippet,t,e.priority,e.tokens,e.normalizedScore)}))}v.snippetPosition===f.TopOfText&&W();const z=[];let H;if(H=x.substring(0,N),v.snippetPosition===f.DirectlyAboveCursor){const e=H.lastIndexOf(\"\\n\")+1,t=H.substring(0,e),n=H.substring(e);D.appendLineForLine(t,c.PromptElementKind.BeforeCursor,F).forEach((e=>z.push(e))),W(),n.length>0&&(z.push(D.append(n,c.PromptElementKind.AfterCursor,F)),z.length>1&&D.require(z[z.length-2],z[z.length-1]))}else D.appendLineForLine(H,c.PromptElementKind.BeforeCursor,F).forEach((e=>z.push(e)));p.Top===v.languageMarker&&z.length>0&&void 0!==j&&D.require(j,z[0]),m.Top===v.pathMarker&&z.length>0&&void 0!==B&&(j?D.require(B,j):D.require(B,z[0])),void 0!==j&&void 0!==B&&D.exclude(B,j);let V=x.slice(N);if(0===v.suffixPercent||V.length<=v.fimSuffixLengthThreshold)return D.fulfill(v.maxPromptLength);{let e=n.offset;v.suffixStartMode!==w.Cursor&&v.suffixStartMode!==w.CursorTrimStart&&(e=await(0,i.getSiblingFunctionStart)(n));const r=v.maxPromptLength-t.TOKENS_RESERVED_FOR_SUFFIX_ENCODING;let s=Math.floor(r*(100-v.suffixPercent)/100),o=D.fulfill(s);const a=r-o.prefixLength;let l=x.slice(e);v.suffixStartMode!==w.SiblingBlockTrimStart&&v.suffixStartMode!==w.CursorTrimStart||(l=l.trimStart());const _=k.takeFirstTokens(l,a);if(_.tokens.length<=a-3&&(s=r-_.tokens.length,o=D.fulfill(s)),v.suffixMatchCriteria===y.Equal)_.tokens.length===d.tokens.length&&_.tokens.every(((e,t)=>e===d.tokens[t]))&&(I=!0);else if(v.suffixMatchCriteria===y.Levenshtein&&_.tokens.length>0&&v.suffixMatchThreshold>0){const e=(0,u.findEditDistanceScore)(_.tokens.slice(0,t.MAX_EDIT_DISTANCE_LENGTH),d.tokens.slice(0,t.MAX_EDIT_DISTANCE_LENGTH))?.score;100*e{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getSiblingFunctionStart=void 0;const r=n(8306);t.getSiblingFunctionStart=async function({source:e,offset:t,languageId:n}){if((0,r.isSupportedLanguageId)(n)){const s=await(0,r.parseTreeSitter)(n,e);try{let i=t;for(;i>=0&&/\\s/.test(e[i]);)i--;const o=s.rootNode.descendantForIndex(i),a=(0,r.getAncestorWithSiblingFunctions)(n,o);if(a){for(let e=a.nextSibling;e;e=e.nextSibling)if((0,r.isFunctionDefinition)(n,e)){const n=(0,r.getFirstPrecedingComment)(e),s=n?.startIndex??e.startIndex;if(s=t)return a.endIndex}}finally{s.delete()}}return t}},648:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getCursorContext=void 0;const r=n(1145),s={tokenizerName:r.TokenizerName.cushman002};t.getCursorContext=function e(t,n={}){const i=function(e){return{...s,...e}}(n),o=(0,r.getTokenizer)(i.tokenizerName);if(i.cursorContextFix){if(void 0!==i.maxLineCount&&i.maxLineCount<0)throw new Error(\"maxLineCount must be non-negative if defined\");if(void 0!==i.maxTokenLength&&i.maxTokenLength<0)throw new Error(\"maxTokenLength must be non-negative if defined\");if(0===i.maxLineCount||0===i.maxTokenLength)return{context:\"\",lineCount:0,tokenLength:0,tokenizerName:i.tokenizerName};let e=t.source.slice(0,t.offset);return void 0!==i.maxLineCount&&(e=e.split(\"\\n\").slice(-i.maxLineCount).join(\"\\n\")),void 0!==i.maxTokenLength&&(e=o.takeLastLinesTokens(e,i.maxTokenLength)),{context:e,lineCount:e.split(\"\\n\").length,tokenLength:o.tokenLength(e),tokenizerName:i.tokenizerName}}if(void 0===i.maxTokenLength&&void 0!==i.maxLineCount){const e=t.source.slice(0,t.offset).split(\"\\n\").slice(-i.maxLineCount),n=e.join(\"\\n\");return{context:n,lineCount:e.length,tokenLength:o.tokenLength(n),tokenizerName:i.tokenizerName}}if(void 0!==i.maxTokenLength&&void 0===i.maxLineCount){const e=o.takeLastLinesTokens(t.source.slice(0,t.offset),i.maxTokenLength);return{context:e,lineCount:e.split(\"\\n\").length,tokenLength:o.tokenLength(e),tokenizerName:i.tokenizerName}}if(void 0!==i.maxTokenLength&&void 0!==i.maxLineCount){const r=e(t,{...n,maxTokenLength:void 0});return r.tokenLength>i.maxTokenLength?e(t,{...n,maxLineCount:void 0}):r}throw new Error(\"Either maxTokenLength or maxLineCount must be defined\")}},6845:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.CursorHistoryMatcher=t.CursorSnippetsPickingStrategy=void 0;const r=n(8312),s=n(648),i=n(9404),o=n(1467),a=n(4830),l=n(5380);var u;!function(e){e.CursorOnly=\"cursoronly\",e.CursorJaccard=\"cursorjaccard\",e.JaccardCursor=\"jaccardcursor\"}(u=t.CursorSnippetsPickingStrategy||(t.CursorSnippetsPickingStrategy={}));const _=new class{constructor(e){this.keys=[],this.cache={},this.size=e}put(e,t){if(this.cache[e]=t,this.keys.length>this.size){this.keys.push(e);const t=this.keys.shift()??\"\";delete this.cache[t]}}get(e){return this.cache[e]}}(20);class c extends o.WindowedMatcher{constructor(e,t,n){super(e,n),this.windowLength=t,this.cursorContextFix=n}id(){return\"CustomizedFixedWindowSizeJaccardMatcher:\"+this.windowLength}getWindowsDelineations(e){return(0,l.getBasicWindowDelineations)(this.windowLength,e)}trimDocument(e){return e.source.slice(0,e.offset).split(\"\\n\").slice(-this.windowLength).join(\"\\n\")}_getCursorContextInfo(e){return(0,s.getCursorContext)(e,{maxLineCount:this.windowLength,cursorContextFix:this.cursorContextFix})}similarityScore(e,t){return(0,i.computeScore)(e,t)}retrieveAllSnippets(e,t=o.SortOptions.Descending,n){const r=[];if(0===e.source.length||0===this.referenceTokens.size)return r;const s=e.source.split(\"\\n\"),i=this.id()+\":\"+e.source,a=_.get(i)??[],l=0==a.length,u=l?s.map(this.tokenizer.tokenize,this.tokenizer):[];for(const[e,[t,i]]of this.getWindowsDelineations(s).entries()){if(l){const e=new Set;u.slice(t,i).forEach((t=>t.forEach(e.add,e))),a.push(e)}if(void 0!==n&&n.get(t)!==i)continue;const s=a[e],o=this.similarityScore(s,this.referenceTokens);r.push({score:o,startLine:t,endLine:i})}return l&&_.put(i,a),this.sortScoredSnippets(r,t)}}class d{constructor(e,t,n,r,s){this.windowLength=t,this.lineCursorHistory=n,this.jaccardMatcher=new c(e,t,s),this.strategy=r}sortScoredSnippets(e,t=o.SortOptions.Descending){return t==o.SortOptions.Ascending?e.sort(((e,t)=>e.score>t.score?1:-1)):t==o.SortOptions.Descending?e.sort(((e,t)=>e.score>t.score?-1:1)):e}markerToSnippet(e,t){return e.map((e=>({snippet:t.slice(e.startLine,e.endLine).join(\"\\n\"),provider:a.SnippetProviderType.NeighboringTabs,semantics:a.SnippetSemantics.Snippet,...e})))}async findMatches(e,t=r.SnippetSelectionOption.BestMatch,n){if(t==r.SnippetSelectionOption.BestMatch){const t=await this.findBestMatch(e);return void 0===t?[]:[t]}return t==r.SnippetSelectionOption.TopK&&await this.findTopKMatches(e,n)||[]}async findBestMatch(e){if(0!==e.source.length){if(this.strategy===u.CursorOnly){let t=this.retrieveCursorSnippets(e);if(t=this.sortScoredSnippets(t,o.SortOptions.Descending),0===t.length)return;const n=Math.max(...t.map((e=>e.score))),r=t.filter((e=>e.score===n)),s=r.sort(((e,t)=>e.startLine-t.startLine))[Math.floor(r.length/2)];return{snippet:e.source.split(\"\\n\").slice(s.startLine,s.endLine).join(\"\\n\"),provider:a.SnippetProviderType.NeighboringTabs,semantics:a.SnippetSemantics.Snippet,...s}}if(this.strategy===u.CursorJaccard){let t=this.retrieveCursorSnippets(e);if(t=this.sortScoredSnippets(t,o.SortOptions.Descending),0===t.length)return;const n=Math.max(...t.map((e=>e.score))),r=[],s=new Map;for(const e of t)e.score===n&&(r.push(e),s.set(e.startLine,e.endLine));const i=this.jaccardMatcher.retrieveAllSnippets(e,o.SortOptions.Descending,s);if(0===i.length)return;const l=i[0];for(const e of t)if(e.startLine===l.startLine&&e.endLine===l.endLine){l.score+=e.score;break}return{snippet:e.source.split(\"\\n\").slice(l.startLine,l.endLine).join(\"\\n\"),provider:a.SnippetProviderType.NeighboringTabs,semantics:a.SnippetSemantics.Snippet,...l}}if(this.strategy===u.JaccardCursor){const t=await this.jaccardMatcher.findBestMatch(e);if(void 0===t)return;let n=this.retrieveCursorSnippets(e);if(n=this.sortScoredSnippets(n,o.SortOptions.Descending),0===n.length)return;for(const e of n)if(e.startLine===t.startLine&&e.endLine===t.endLine){t.score+=e.score;break}return t}}}async findTopKMatches(e,t=1){if(0===e.source.length||t<1)return;const n=e.source.split(\"\\n\");let r=this.retrieveCursorSnippets(e);if(0!==r.length){if(this.strategy===u.CursorOnly){r=this.sortScoredSnippets(r,o.SortOptions.Descending);let e=this.gatherNonOverlappingSnippets(r,t);return this.markerToSnippet(e,n)}if(this.strategy===u.CursorJaccard){r=this.sortScoredSnippets(r,o.SortOptions.Descending);const s=new Map(r.map((e=>[e.startLine,e.endLine]))),i=this.jaccardMatcher.retrieveAllSnippets(e,o.SortOptions.Descending,s).reduce(((e,t)=>e.set([t.startLine,t.endLine].join(\",\"),t.score)),new Map);r.forEach((e=>e.score+=i.get([e.startLine,e.endLine].join(\",\"))??0)),r=this.sortScoredSnippets(r,o.SortOptions.Descending);let a=this.gatherNonOverlappingSnippets(r,t);return this.markerToSnippet(a,n)}if(this.strategy===u.JaccardCursor){const s=await this.jaccardMatcher.findTopKMatches(e,t);if(void 0===s)return;const i=r.reduce(((e,t)=>e.set([t.startLine,t.endLine].join(\",\"),t.score)),new Map);s.forEach((e=>e.score+=i.get([e.startLine,e.endLine].join(\",\"))??0));const a=this.sortScoredSnippets(s,o.SortOptions.Descending);return this.markerToSnippet(a,n)}}}gatherNonOverlappingSnippets(e,t){let n=[e[0]];for(let r=1;re[r].startLinet.startLine))&&n.push(e[r]);return n}retrieveCursorSnippets(e){const t=[];if(0===e.source.length)return t;const n=this.lineCursorHistory.get(e.uri);if(void 0===n)return t;const r=e.source.split(\"\\n\");let s;!function(e){e[e.leftBoundary=0]=\"leftBoundary\",e[e.rightBoundary=1]=\"rightBoundary\"}(s||(s={}));let i=[];for(const[e,t]of n.entries())e>=r.length||(i.push([Math.max(0,e-this.windowLength+1),s.leftBoundary,t]),i.push([e+1,s.rightBoundary,t]));i.push([r.length,s.leftBoundary,0]),i=i.sort(((e,t)=>e[0]-t[0]));let o=0,a=0;for(const[e,n,l]of i){if(o>0)for(let n=a;n({to:s=>new d(s,e,t,n,r)})},9404:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.computeScore=t.FunctionJaccardMatcher=t.IndentationBasedJaccardMatcher=t.FixedWindowSizeJaccardMatcher=void 0;const r=n(648),s=n(1467),i=n(5380);class o extends s.WindowedMatcher{constructor(e,t,n){super(e,n),this.windowLength=t,this.cursorContextFix=n}id(){return\"fixed:\"+this.windowLength}getWindowsDelineations(e){return(0,i.getBasicWindowDelineations)(this.windowLength,e)}trimDocument(e){return e.source.slice(0,e.offset).split(\"\\n\").slice(-this.windowLength).join(\"\\n\")}_getCursorContextInfo(e){return(0,r.getCursorContext)(e,{maxLineCount:this.windowLength,cursorContextFix:this.cursorContextFix})}similarityScore(e,t){return u(e,t)}}t.FixedWindowSizeJaccardMatcher=o,o.FACTORY=(e,t)=>({to:n=>new o(n,e,t)});class a extends s.WindowedMatcher{constructor(e,t,n,r){super(e,r),this.indentationMinLength=t,this.indentationMaxLength=n,this.languageId=e.languageId,this.cursorContextFix=r}id(){return`indent:${this.indentationMinLength}:${this.indentationMaxLength}:${this.languageId}`}getWindowsDelineations(e){const t=(0,i.getIndentationWindowsDelineations)(e,this.languageId,this.indentationMinLength,this.indentationMaxLength);return t.length>0?t:e.length({to:r=>new a(r,e,t,n)});class l extends s.FunctionalMatcher{id(){return\"function:\"+this.windowLength}getWindowsDelineations(e){return void 0!==this.indentationMaxLength&&void 0!==this.indentationMinLength?(0,i.getIndentationWindowsDelineations)(e,this.languageId,this.indentationMinLength,this.indentationMaxLength):(0,i.getBasicWindowDelineations)(this.windowLength,e)}constructor(e,t,n,r,s){super(e,n),this.windowLength=t,this.indentationMinLength=r,this.indentationMaxLength=s,this.languageId=e.languageId,this.cursorContextFix=n}trimDocument(e){return e.source.slice(0,e.offset).split(\"\\n\").slice(-this.windowLength).join(\"\\n\")}_getCursorContextInfo(e){return(0,r.getCursorContext)(e,{maxLineCount:this.windowLength,cursorContextFix:this.cursorContextFix})}similarityScore(e,t){return u(e,t)}}function u(e,t){const n=new Set;return e.forEach((e=>{t.has(e)&&n.add(e)})),n.size/(e.size+t.size-n.size)}t.FunctionJaccardMatcher=l,l.FACTORY=(e,t,n,r)=>({to:s=>new l(s,e,t,n,r)}),t.computeScore=u},9125:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getNeighborSnippets=t.neighborOptionToSelection=t.NeighboringSnippetType=t.NeighboringTabsOption=void 0;const r=n(9491),s=n(6845),i=n(9404);var o,a;(a=t.NeighboringTabsOption||(t.NeighboringTabsOption={})).None=\"none\",a.Conservative=\"conservative\",a.Medium=\"medium\",a.Eager=\"eager\",a.EagerButLittle=\"eagerButLittle\",a.EagerButMedium=\"eagerButMedium\",a.EagerButMuch=\"eagerButMuch\",a.RetrievalComparable=\"retrievalComparable\",function(e){e.NeighboringFunctions=\"neighboringFunction\",e.NeighboringSnippets=\"neighboringSnippet\",e.CursorHistoryMatcher=\"cursorhistorymatcher\"}(o=t.NeighboringSnippetType||(t.NeighboringSnippetType={})),t.neighborOptionToSelection={none:{snippetLength:1,threshold:-1,numberOfSnippets:0},conservative:{snippetLength:10,threshold:.3,numberOfSnippets:1},medium:{snippetLength:20,threshold:.1,numberOfSnippets:2},eager:{snippetLength:60,threshold:0,numberOfSnippets:4},eagerButLittle:{snippetLength:10,threshold:0,numberOfSnippets:1},eagerButMedium:{snippetLength:20,threshold:0,numberOfSnippets:4},eagerButMuch:{snippetLength:60,threshold:0,numberOfSnippets:6},retrievalComparable:{snippetLength:30,threshold:0,numberOfSnippets:4}},t.getNeighborSnippets=async function(e,n,a,l,u,_,c,d,p,m,f){const h={...t.neighborOptionToSelection[l]},g=function(e,t,n,a,l,u,_,c=s.CursorSnippetsPickingStrategy.CursorJaccard){let d;return t===o.NeighboringSnippets?d=void 0!==l&&void 0!==u?i.IndentationBasedJaccardMatcher.FACTORY(l,u,a):i.FixedWindowSizeJaccardMatcher.FACTORY(n.snippetLength,a):t===o.NeighboringFunctions?d=i.FunctionJaccardMatcher.FACTORY(n.snippetLength,a,l,u):((0,r.ok)(void 0!==_,\"lineCursorHistory should not be undefined\"),d=s.CursorHistoryMatcher.FACTORY(n.snippetLength,_,c,a)),d.to(e)}(e,a,h,u,_,c,m,f);return 0===h.numberOfSnippets?[]:(await n.filter((e=>e.source.length<1e4&&e.source.length>0)).slice(0,20).reduce((async(e,t)=>(await e).concat((await g.findMatches(t,d,p)).map((e=>({relativePath:t.relativePath,...e}))))),Promise.resolve([]))).filter((e=>e.score&&e.snippet&&e.score>h.threshold)).sort(((e,t)=>e.score-t.score)).slice(-h.numberOfSnippets)}},1467:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.splitIntoWords=t.FunctionalMatcher=t.WindowedMatcher=t.SortOptions=void 0;const r=n(8306),s=n(8312),i=n(4830);var o;!function(e){e.Ascending=\"ascending\",e.Descending=\"descending\",e.None=\"none\"}(o=t.SortOptions||(t.SortOptions={}));class a{constructor(e){this.stopsForLanguage=p.get(e.languageId)??d}tokenize(e){return new Set(_(e).filter((e=>!this.stopsForLanguage.has(e))))}}const l=new class{constructor(e){this.keys=[],this.cache={},this.size=e}put(e,t){if(this.cache[e]=t,this.keys.length>this.size){this.keys.push(e);const t=this.keys.shift()??\"\";delete this.cache[t]}}get(e){return this.cache[e]}}(20);class u{constructor(e,t){this.referenceDoc=e,this.tokenizer=new a(e),t||(this._referenceTokens=this.tokenizer.tokenize(this.trimDocument(e)))}get referenceTokens(){return void 0===this._referenceTokens&&(this._referenceTokens=this.tokenizer.tokenize(this._getCursorContextInfo(this.referenceDoc).context)),this._referenceTokens}sortScoredSnippets(e,t=o.Descending){return t==o.Ascending?e.sort(((e,t)=>e.score>t.score?1:-1)):t==o.Descending?e.sort(((e,t)=>e.score>t.score?-1:1)):e}retrieveAllSnippets(e,t=o.Descending){const n=[];if(0===e.source.length||0===this.referenceTokens.size)return n;const r=e.source.split(\"\\n\"),s=this.id()+\":\"+e.source,i=l.get(s)??[],a=0==i.length,u=a?r.map(this.tokenizer.tokenize,this.tokenizer):[];for(const[e,[t,s]]of this.getWindowsDelineations(r).entries()){if(a){const e=new Set;u.slice(t,s).forEach((t=>t.forEach(e.add,e))),i.push(e)}const r=i[e],o=this.similarityScore(r,this.referenceTokens);n.push({score:o,startLine:t,endLine:s})}return a&&l.put(s,i),this.sortScoredSnippets(n,t)}async findMatches(e,t=s.SnippetSelectionOption.BestMatch,n){if(t==s.SnippetSelectionOption.BestMatch){const t=await this.findBestMatch(e);return t?[t]:[]}return t==s.SnippetSelectionOption.TopK&&await this.findTopKMatches(e,n)||[]}async findBestMatch(e){if(0===e.source.length||0===this.referenceTokens.size)return;const t=e.source.split(\"\\n\"),n=this.retrieveAllSnippets(e,o.Descending);return 0!==n.length&&0!==n[0].score?{snippet:t.slice(n[0].startLine,n[0].endLine).join(\"\\n\"),semantics:i.SnippetSemantics.Snippet,provider:i.SnippetProviderType.NeighboringTabs,...n[0]}:void 0}async findTopKMatches(e,t=1){if(0===e.source.length||0===this.referenceTokens.size||t<1)return;const n=e.source.split(\"\\n\"),r=this.retrieveAllSnippets(e,o.Descending);if(0===r.length||0===r[0].score)return;const s=[r[0]];for(let e=1;er[e].startLinet.startLine))&&s.push(r[e]);return s.map((e=>({snippet:n.slice(e.startLine,e.endLine).join(\"\\n\"),semantics:i.SnippetSemantics.Snippet,provider:i.SnippetProviderType.NeighboringTabs,...e})))}}function _(e){return e.split(/[^a-zA-Z0-9]/).filter((e=>e.length>0))}t.WindowedMatcher=u,t.FunctionalMatcher=class extends u{constructor(e,t){super(e,t)}getMatchingScore(e){const t=this.tokenizer.tokenize(e.source),n=this.similarityScore(t,this.referenceTokens);return{snippet:e.source,score:n,startLine:0,endLine:0}}async findBestMatch(e){const t=await this.findMatches(e);if(0!==t.length&&0!==t[0].score)return t[0]}async findMatches(e,t,n){if(0===e.source.length||0===this.referenceTokens.size)return[];const s=await async function(e){let t=[];if((0,r.isSupportedLanguageId)(e.languageId)){const n=await(0,r.getFunctionPositions)(e.languageId,e.source);for(let r=0;r{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.processSnippetsForWishlist=t.selectSnippets=t.normalizeSnippetScore=t.announceSnippet=t.SnippetSemantics=t.SnippetProviderType=void 0;const r=n(2417);var s,i;(i=t.SnippetProviderType||(t.SnippetProviderType={})).NeighboringTabs=\"neighboring-tabs\",i.Retrieval=\"retrieval\",i.SymbolDef=\"symbol-def\",function(e){e.Function=\"function\",e.Snippet=\"snippet\",e.Variable=\"variable\",e.Parameter=\"parameter\",e.Method=\"method\",e.Class=\"class\",e.Module=\"module\",e.Alias=\"alias\",e.Enum=\"enum member\",e.Interface=\"interface\"}(s=t.SnippetSemantics||(t.SnippetSemantics={}));const o={[s.Function]:\"function\",[s.Snippet]:\"snippet\",[s.Variable]:\"variable\",[s.Parameter]:\"parameter\",[s.Method]:\"method\",[s.Class]:\"class\",[s.Module]:\"module\",[s.Alias]:\"alias\",[s.Enum]:\"enum member\",[s.Interface]:\"interface\"};function a(e,t){const n=o[e.semantics];let s=(e.relativePath?`Compare this ${n} from ${e.relativePath}:`:`Compare this ${n}:`)+\"\\n\"+e.snippet;return s.endsWith(\"\\n\")||(s+=\"\\n\"),(0,r.commentBlockAsSingles)(s,t)}function l(e,t){const n=t[e.provider];if(!n)throw new Error(\"Unknown snippet provider: \"+e.provider);const{score:r,...s}=e;let i=r;if(\"affine\"!==n.normalizationFunction)throw new Error(`Unknown normalization function ${n.normalizationFunction} for snippet provider ${e.provider}`);{const[e,t]=n.normalizationParams;i=e*r+t}return{...s,providerScore:r,normalizedScore:i}}function u(e){e.sort(((e,t)=>t.normalizedScore-e.normalizedScore))}function _(e,t,n){if(0==t)return{reserved:[],candidates:[]};const r=e.map((e=>l(e,n))),s=new Map;let i;for(i in n)s.set(i,[]);for(const e of r){let t=s.get(e.provider);if(!t)throw new Error(\"Unknown snippet provider: \"+e.provider);t.push(e)}for(const[e,t]of s)u(t);let o=[];for(i in n){const e=n[i].reservedSnippetCount||0;if(e>0){const t=s.get(i)||[];o=o.concat(t.slice(0,e)),s.set(i,t.slice(e))}}u(o);let a=[];if(o.length>t)throw new Error(\"Reserved snippet count exceeds number of snippets\");if(o.length=i)break;d=h(e,d)}return u(p),p.reverse(),p}},5380:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getIndentationWindowsDelineations=t.getBasicWindowDelineations=void 0;const r=n(8617),s=n(3469);t.getBasicWindowDelineations=function(e,t){const n=[],r=t.length;if(0==r)return[];if(r{if(\"blank\"===e.type)return void(e.label={totalLength:1,firstLineAfter:e.lineNumber+1});let t=\"line\"===e.type?1:0,r=\"line\"===e.type?e.lineNumber+1:NaN;function s(n){return-1==n?r-t:e.subs[n].label.firstLineAfter-e.subs[n].label.totalLength}function a(t,n){return 0==t?n+1:e.subs[t-1].label.firstLineAfter}let l=\"line\"===e.type?-1:0,u=\"line\"===e.type?1:0,_=0;for(let c=0;c=0&&li){const t=s(l),r=a(c,t),d=_==c?r:a(_,t);for(n<=r-t&&o.push([t,d]);u>i;)u-=-1==l?\"line\"==e.type?1:0:e.subs[l].label.totalLength,l++}}if(le[0]-t[0]||e[1]-t[1])).filter(((e,t,n)=>0==t||e[0]!=n[t-1][0]||e[1]!=n[t-1][1]))}},2395:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.findEditDistanceScore=void 0,t.findEditDistanceScore=function(e,t){if(0===e.length||0===t.length)return{score:e.length+t.length};const n=Array.from({length:e.length}).map((()=>Array.from({length:t.length}).map((()=>0))));for(let t=0;t{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.getTokenizer=t.TokenizerName=void 0;const r=n(7147),s=n(1017),i=n(3837),o=(e,t)=>Array.from(Array(t).keys()).slice(e),a=e=>e.charCodeAt(0),l=new i.TextDecoder(\"utf-8\"),u=e=>l.decode(new Uint8Array(e));function _(e){const t=new Set;let n=e[0];for(let r=1;rArray.from(this.textEncoder.encode(e));let t=\"\",n=\"\";if(e===d.cushman001)t=\"vocab_cushman001.bpe\",n=\"tokenizer_cushman001.json\";else{if(e!==d.cushman002)throw new Error(`Unknown tokenizer name: ${e}`);t=\"vocab_cushman002.bpe\",n=\"tokenizer_cushman002.json\"}const l=r.readFileSync(s.resolve(__dirname,\"resources\",e,n)),u=JSON.parse(l.toString());this.encoder=new Map(Object.entries(u));for(let[e,t]of this.encoder)this.decoder.set(t,e);const _=r.readFileSync(s.resolve(__dirname,\"resources\",e,t),\"utf-8\").split(\"\\n\").slice(1).filter((e=>e.trim().length>0));this.bpe_ranks=((e,t)=>{const n=new Map;return e.forEach(((r,s)=>{n.set(e[s],t[s])})),n})(_,o(0,_.length)),function(e){const t=o(a(\"!\"),a(\"~\")+1).concat(o(a(\"¡\"),a(\"¬\")+1),o(a(\"®\"),a(\"ÿ\")+1));let n=t.slice(),r=0;for(let e=0;e<256;e++)t.includes(e)||(t.push(e),n.push(256+r),r+=1);const s=n.map((e=>(e=>String.fromCharCode(e))(e)));for(let n=0;n{this.byte_decoder.set(e,t)}))}byteEncodeStr(e){return this.encodeStr(e).map((e=>this.byte_encoder.get(e)))}bpe(e){if(this.cache.has(e))return this.cache.get(e);let t=this.byteEncodeStr(e),n=_(t);if(!n)return t.map((e=>this.encoder.get(e)));for(;;){const e=new Map;n.forEach((t=>{const n=t.join(\" \"),r=this.bpe_ranks.get(n);e.set(void 0===r||isNaN(r)?1e11:r,t)}));const r=Array.from(e.keys()).map((e=>Number(e))),s=e.get(Math.min(...r));if(!s||!this.bpe_ranks.has(s.join(\" \")))break;const i=s[0],o=s[1];let a=[],l=0;for(;lthis.encoder.get(e)));return this.cache.set(e,r),r}tokenize(e){let t=[];const n=Array.from(e.matchAll(c)).map((e=>e[0]));for(let e of n){const n=this.bpe(e);Array.prototype.push.apply(t,n)}return t}tokenLength(e){return this.tokenize(e).length}takeLastTokens(e,t){if(t<=0)return\"\";let n=Math.min(e.length,4*t),r=e.slice(-n),s=this.tokenize(r);for(;s.lengththis.decoder.get(e))).join(\"\");return t=u(t.split(\"\").map((e=>this.byte_decoder.get(e)))),t}tokenizeStrings(e){return this.tokenize(e).map((e=>u(this.decoder.get(e).split(\"\").map((e=>this.byte_decoder.get(e))))))}}class f{constructor(){this.hash=e=>{let t=0;for(let n=0;ne.toString())).join(\" \")}tokenizeStrings(e){return e.split(/\\b/)}tokenLength(e){return this.tokenizeStrings(e).length}takeLastTokens(e,t){return this.tokenizeStrings(e).slice(-t).join(\"\")}takeFirstTokens(e,t){const n=this.tokenizeStrings(e).slice(0,t);return{text:n.join(\"\"),tokens:n.map(this.hash)}}takeLastLinesTokens(e,t){const n=this.takeLastTokens(e,t);if(n.length===e.length||\"\\n\"===e[e.length-n.length-1])return n;let r=n.indexOf(\"\\n\");return n.substring(r+1)}}},4456:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.Priorities=t.PromptWishlist=t.PromptElementRanges=t.PromptChoices=t.PromptBackground=t.PromptElementKind=void 0;const r=n(8312);var s;!function(e){e.BeforeCursor=\"BeforeCursor\",e.AfterCursor=\"AfterCursor\",e.SimilarFile=\"SimilarFile\",e.RetrievalSnippet=\"RetrievalSnippet\",e.SymbolDefinition=\"SymbolDefinition\",e.ImportedFile=\"ImportedFile\",e.LanguageMarker=\"LanguageMarker\",e.PathMarker=\"PathMarker\"}(s=t.PromptElementKind||(t.PromptElementKind={}));class i{constructor(){this.used=new Map,this.unused=new Map}markUsed(e){this.IsSnippet(e)&&this.used.set(e.id,this.convert(e))}undoMarkUsed(e){this.IsSnippet(e)&&this.used.delete(e.id)}markUnused(e){this.IsSnippet(e)&&this.unused.set(e.id,this.convert(e))}convert(e){return{score:e.score.toFixed(4),length:e.text.length}}IsSnippet(e){return e.kind==s.SimilarFile||e.kind==s.RetrievalSnippet}}t.PromptBackground=i;class o{constructor(){this.used=new Map,this.unused=new Map,this.usedCounts=new Map,this.unusedCounts=new Map}markUsed(e){this.used.set(e.kind,(this.used.get(e.kind)||0)+e.tokens),this.usedCounts.set(e.kind,(this.usedCounts.get(e.kind)||0)+1)}undoMarkUsed(e){this.used.set(e.kind,(this.used.get(e.kind)||0)-e.tokens),this.usedCounts.set(e.kind,(this.usedCounts.get(e.kind)||0)-1)}markUnused(e){this.unused.set(e.kind,(this.unused.get(e.kind)||0)+e.tokens),this.unusedCounts.set(e.kind,(this.unusedCounts.get(e.kind)||0)+1)}}t.PromptChoices=o;class a{constructor(e){this.ranges=new Array;let t,n=0;for(const{element:r}of e)0!==r.text.length&&(t===s.BeforeCursor&&r.kind===s.BeforeCursor?this.ranges[this.ranges.length-1].end+=r.text.length:this.ranges.push({kind:r.kind,start:n,end:n+r.text.length}),t=r.kind,n+=r.text.length)}}t.PromptElementRanges=a,t.PromptWishlist=class{constructor(e,t){this.tokenizer=e,this.content=[],this.tokenizer=e,this.lineEndingOption=t}getContent(){return[...this.content]}convertLineEndings(e){return this.lineEndingOption===r.LineEndingOptions.ConvertToUnix&&(e=e.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\")),e}append(e,t,n,r=this.tokenizer.tokenLength(e),s=NaN){e=this.convertLineEndings(e);const i=this.content.length;return this.content.push({id:i,text:e,kind:t,priority:n,tokens:r,requires:[],excludes:[],score:s}),i}appendLineForLine(e,t,n){const r=(e=this.convertLineEndings(e)).split(\"\\n\");for(let e=0;e{\"\\n\"===e&&s.length>0&&!s[s.length-1].endsWith(\"\\n\\n\")?s[s.length-1]+=\"\\n\":s.push(e)}));const i=[];return s.forEach(((e,r)=>{\"\"!==e&&(i.push(this.append(e,t,n)),r>0&&(this.content[this.content.length-2].requires=[this.content[this.content.length-1]]))})),i}require(e,t){const n=this.content.find((t=>t.id===e)),r=this.content.find((e=>e.id===t));n&&r&&n.requires.push(r)}exclude(e,t){const n=this.content.find((t=>t.id===e)),r=this.content.find((e=>e.id===t));n&&r&&n.excludes.push(r)}fulfill(e){const t=new o,n=new i,r=this.content.map(((e,t)=>({element:e,index:t})));r.sort(((e,t)=>e.element.priority===t.element.priority?t.index-e.index:t.element.priority-e.element.priority));const s=new Set,l=new Set;let u;const _=[];let c=e;r.forEach((e=>{const r=e.element,i=e.index;if(c>=0&&(c>0||void 0===u)&&r.requires.every((e=>s.has(e.id)))&&!l.has(r.id)){let o=r.tokens;const a=function(e,t){let n,r=1/0;for(const s of e)s.index>t&&s.index=o?(c-=o,s.add(r.id),r.excludes.forEach((e=>l.add(e.id))),t.markUsed(r),n.markUsed(r),_.push(e)):void 0===u?u=e:(t.markUnused(e.element),n.markUnused(e.element))}else t.markUnused(r),n.markUnused(r)})),_.sort(((e,t)=>e.index-t.index));let d=_.reduce(((e,t)=>e+t.element.text),\"\"),p=this.tokenizer.tokenLength(d);for(;p>e;){_.sort(((e,t)=>t.element.priority===e.element.priority?t.index-e.index:t.element.priority-e.element.priority));const e=_.pop();e&&(t.undoMarkUsed(e.element),t.markUnused(e.element),n.undoMarkUsed(e.element),n.markUnused(e.element),void 0!==u&&(t.markUnused(u.element),n.markUnused(u.element)),u=void 0),_.sort(((e,t)=>e.index-t.index)),d=_.reduce(((e,t)=>e+t.element.text),\"\"),p=this.tokenizer.tokenLength(d)}const m=[..._];if(void 0!==u){m.push(u),m.sort(((e,t)=>e.index-t.index));const r=m.reduce(((e,t)=>e+t.element.text),\"\"),s=this.tokenizer.tokenLength(r);if(s<=e){t.markUsed(u.element),n.markUsed(u.element);const e=new a(m);return{prefix:r,suffix:\"\",prefixLength:s,suffixLength:0,promptChoices:t,promptBackground:n,promptElementRanges:e}}t.markUnused(u.element),n.markUnused(u.element)}const f=new a(_);return{prefix:d,suffix:\"\",prefixLength:p,suffixLength:0,promptChoices:t,promptBackground:n,promptElementRanges:f}}};class l{constructor(){this.registeredPriorities=[0,1]}register(e){if(e>l.TOP||ee>t)));return this.register((n+t)/2)}justBelow(...e){const t=Math.min(...e),n=Math.max(...this.registeredPriorities.filter((e=>en>e&&n{var Module=void 0!==Module?Module:{},TreeSitter=function(){var initPromise,document=\"object\"==typeof window?{currentScript:window.document.currentScript}:null;class Parser{constructor(){this.initialize()}initialize(){throw new Error(\"cannot construct a Parser before calling `init()`\")}static init(moduleOptions){return initPromise||(Module=Object.assign({},Module,moduleOptions),initPromise=new Promise((resolveInitPromise=>{var moduleOverrides=Object.assign({},Module),arguments_=[],thisProgram=\"./this.program\",quit_=(e,t)=>{throw t},ENVIRONMENT_IS_WEB=\"object\"==typeof window,ENVIRONMENT_IS_WORKER=\"function\"==typeof importScripts,ENVIRONMENT_IS_NODE=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,scriptDirectory=\"\",read_,readAsync,readBinary,setWindowTitle;function locateFile(e){return Module.locateFile?Module.locateFile(e,scriptDirectory):scriptDirectory+e}function logExceptionOnExit(e){e instanceof ExitStatus||err(\"exiting due to exception: \"+e)}if(ENVIRONMENT_IS_NODE){var fs=__webpack_require__(7147),nodePath=__webpack_require__(1017);scriptDirectory=ENVIRONMENT_IS_WORKER?nodePath.dirname(scriptDirectory)+\"/\":__dirname+\"/\",read_=(e,t)=>(e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFileSync(e,t?void 0:\"utf8\")),readBinary=e=>{var t=read_(e,!0);return t.buffer||(t=new Uint8Array(t)),t},readAsync=(e,t,n)=>{e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFile(e,(function(e,r){e?n(e):t(r.buffer)}))},process.argv.length>1&&(thisProgram=process.argv[1].replace(/\\\\/g,\"/\")),arguments_=process.argv.slice(2),module.exports=Module,quit_=(e,t)=>{if(keepRuntimeAlive())throw process.exitCode=e,t;logExceptionOnExit(t),process.exit(e)},Module.inspect=function(){return\"[Emscripten Module object]\"}}else(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&(ENVIRONMENT_IS_WORKER?scriptDirectory=self.location.href:void 0!==document&&document.currentScript&&(scriptDirectory=document.currentScript.src),scriptDirectory=0!==scriptDirectory.indexOf(\"blob:\")?scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",read_=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.send(null),t.responseText},ENVIRONMENT_IS_WORKER&&(readBinary=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.responseType=\"arraybuffer\",t.send(null),new Uint8Array(t.response)}),readAsync=(e,t,n)=>{var r=new XMLHttpRequest;r.open(\"GET\",e,!0),r.responseType=\"arraybuffer\",r.onload=()=>{200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)},setWindowTitle=e=>document.title=e);var out=Module.print||console.log.bind(console),err=Module.printErr||console.warn.bind(console);Object.assign(Module,moduleOverrides),moduleOverrides=null,Module.arguments&&(arguments_=Module.arguments),Module.thisProgram&&(thisProgram=Module.thisProgram),Module.quit&&(quit_=Module.quit);var STACK_ALIGN=16,dynamicLibraries=Module.dynamicLibraries||[],wasmBinary;Module.wasmBinary&&(wasmBinary=Module.wasmBinary);var noExitRuntime=Module.noExitRuntime||!0,wasmMemory;\"object\"!=typeof WebAssembly&&abort(\"no native wasm support detected\");var ABORT=!1,EXITSTATUS,UTF8Decoder=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function UTF8ArrayToString(e,t,n){for(var r=t+n,s=t;e[s]&&!(s>=r);)++s;if(s-t>16&&e.buffer&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(t,s));for(var i=\"\";t>10,56320|1023&u)}}else i+=String.fromCharCode((31&o)<<6|a)}else i+=String.fromCharCode(o)}return i}function UTF8ToString(e,t){return e?UTF8ArrayToString(HEAPU8,e,t):\"\"}function stringToUTF8Array(e,t,n,r){if(!(r>0))return 0;for(var s=n,i=n+r-1,o=0;o=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++o)),a<=127){if(n>=i)break;t[n++]=a}else if(a<=2047){if(n+1>=i)break;t[n++]=192|a>>6,t[n++]=128|63&a}else if(a<=65535){if(n+2>=i)break;t[n++]=224|a>>12,t[n++]=128|a>>6&63,t[n++]=128|63&a}else{if(n+3>=i)break;t[n++]=240|a>>18,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}}return t[n]=0,n-s}function stringToUTF8(e,t,n){return stringToUTF8Array(e,HEAPU8,t,n)}function lengthBytesUTF8(e){for(var t=0,n=0;n=55296&&r<=57343?(t+=4,++n):t+=3}return t}function updateGlobalBufferAndViews(e){buffer=e,Module.HEAP8=HEAP8=new Int8Array(e),Module.HEAP16=HEAP16=new Int16Array(e),Module.HEAP32=HEAP32=new Int32Array(e),Module.HEAPU8=HEAPU8=new Uint8Array(e),Module.HEAPU16=HEAPU16=new Uint16Array(e),Module.HEAPU32=HEAPU32=new Uint32Array(e),Module.HEAPF32=HEAPF32=new Float32Array(e),Module.HEAPF64=HEAPF64=new Float64Array(e)}var INITIAL_MEMORY=Module.INITIAL_MEMORY||33554432;wasmMemory=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:32768}),wasmMemory&&(buffer=wasmMemory.buffer),INITIAL_MEMORY=buffer.byteLength,updateGlobalBufferAndViews(buffer);var wasmTable=new WebAssembly.Table({initial:20,element:\"anyfunc\"}),__ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATPOSTRUN__=[],__RELOC_FUNCS__=[],runtimeInitialized=!1;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module.preRun)for(\"function\"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=!0,callRuntimeCallbacks(__RELOC_FUNCS__),callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module.postRun)for(\"function\"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}var runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var t=dependenciesFulfilled;dependenciesFulfilled=null,t()}}function abort(e){throw Module.onAbort&&Module.onAbort(e),err(e=\"Aborted(\"+e+\")\"),ABORT=!0,EXITSTATUS=1,e+=\". Build with -sASSERTIONS for more info.\",new WebAssembly.RuntimeError(e)}var dataURIPrefix=\"data:application/octet-stream;base64,\",wasmBinaryFile,tempDouble,tempI64;function isDataURI(e){return e.startsWith(dataURIPrefix)}function isFileURI(e){return e.startsWith(\"file://\")}function getBinary(e){try{if(e==wasmBinaryFile&&wasmBinary)return new Uint8Array(wasmBinary);if(readBinary)return readBinary(e);throw\"both async and sync fetching of the wasm failed\"}catch(e){abort(e)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(\"function\"==typeof fetch&&!isFileURI(wasmBinaryFile))return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then((function(e){if(!e.ok)throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\";return e.arrayBuffer()})).catch((function(){return getBinary(wasmBinaryFile)}));if(readAsync)return new Promise((function(e,t){readAsync(wasmBinaryFile,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return getBinary(wasmBinaryFile)}))}function createWasm(){var e={env:asmLibraryArg,wasi_snapshot_preview1:asmLibraryArg,\"GOT.mem\":new Proxy(asmLibraryArg,GOTHandler),\"GOT.func\":new Proxy(asmLibraryArg,GOTHandler)};function t(e,t){var n=e.exports;n=relocateExports(n,1024);var r=getDylinkMetadata(t);r.neededDynlibs&&(dynamicLibraries=r.neededDynlibs.concat(dynamicLibraries)),mergeLibSymbols(n,\"main\"),Module.asm=n,addOnInit(Module.asm.__wasm_call_ctors),__RELOC_FUNCS__.push(Module.asm.__wasm_apply_data_relocs),removeRunDependency(\"wasm-instantiate\")}function n(e){t(e.instance,e.module)}function r(t){return getBinaryPromise().then((function(t){return WebAssembly.instantiate(t,e)})).then((function(e){return e})).then(t,(function(e){err(\"failed to asynchronously prepare wasm: \"+e),abort(e)}))}if(addRunDependency(\"wasm-instantiate\"),Module.instantiateWasm)try{return Module.instantiateWasm(e,t)}catch(e){return err(\"Module.instantiateWasm callback failed with error: \"+e),!1}return wasmBinary||\"function\"!=typeof WebAssembly.instantiateStreaming||isDataURI(wasmBinaryFile)||isFileURI(wasmBinaryFile)||ENVIRONMENT_IS_NODE||\"function\"!=typeof fetch?r(n):fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(n,(function(e){return err(\"wasm streaming compile failed: \"+e),err(\"falling back to ArrayBuffer instantiation\"),r(n)}))})),{}}wasmBinaryFile=\"tree-sitter.wasm\",isDataURI(wasmBinaryFile)||(wasmBinaryFile=locateFile(wasmBinaryFile));var ASM_CONSTS={};function ExitStatus(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e}var GOT={},CurrentModuleWeakSymbols=new Set([]),GOTHandler={get:function(e,t){var n=GOT[t];return n||(n=GOT[t]=new WebAssembly.Global({value:\"i32\",mutable:!0})),CurrentModuleWeakSymbols.has(t)||(n.required=!0),n}};function callRuntimeCallbacks(e){for(;e.length>0;)e.shift()(Module)}function getDylinkMetadata(e){var t=0,n=0;function r(){for(var n=0,r=1;;){var s=e[t++];if(n+=(127&s)*r,r*=128,!(128&s))break}return n}function s(){var n=r();return UTF8ArrayToString(e,(t+=n)-n,n)}function i(e,t){if(e)throw new Error(t)}var o=\"dylink.0\";if(e instanceof WebAssembly.Module){var a=WebAssembly.Module.customSections(e,o);0===a.length&&(o=\"dylink\",a=WebAssembly.Module.customSections(e,o)),i(0===a.length,\"need dylink section\"),n=(e=new Uint8Array(a[0])).length}else{i(!(1836278016==new Uint32Array(new Uint8Array(e.subarray(0,24)).buffer)[0]),\"need to see wasm magic number\"),i(0!==e[8],\"need the dylink section to be first\"),t=9;var l=r();n=t+l,o=s()}var u={neededDynlibs:[],tlsExports:new Set,weakImports:new Set};if(\"dylink\"==o){u.memorySize=r(),u.memoryAlign=r(),u.tableSize=r(),u.tableAlign=r();for(var _=r(),c=0;c<_;++c){var d=s();u.neededDynlibs.push(d)}}else for(i(\"dylink.0\"!==o);t>0];case\"i16\":return HEAP16[e>>1];case\"i32\":case\"i64\":return HEAP32[e>>2];case\"float\":return HEAPF32[e>>2];case\"double\":return HEAPF64[e>>3];case\"*\":return HEAPU32[e>>2];default:abort(\"invalid type for getValue: \"+t)}return null}function asmjsMangle(e){return 0==e.indexOf(\"dynCall_\")||[\"stackAlloc\",\"stackSave\",\"stackRestore\",\"getTempRet0\",\"setTempRet0\"].includes(e)?e:\"_\"+e}function mergeLibSymbols(e,t){for(var n in e)if(e.hasOwnProperty(n)){asmLibraryArg.hasOwnProperty(n)||(asmLibraryArg[n]=e[n]);var r=asmjsMangle(n);Module.hasOwnProperty(r)||(Module[r]=e[n]),\"__main_argc_argv\"==n&&(Module._main=e[n])}}var LDSO={loadedLibsByName:{},loadedLibsByHandle:{}};function dynCallLegacy(e,t,n){var r=Module[\"dynCall_\"+e];return n&&n.length?r.apply(null,[t].concat(n)):r.call(null,t)}var wasmTableMirror=[];function getWasmTableEntry(e){var t=wasmTableMirror[e];return t||(e>=wasmTableMirror.length&&(wasmTableMirror.length=e+1),wasmTableMirror[e]=t=wasmTable.get(e)),t}function dynCall(e,t,n){return e.includes(\"j\")?dynCallLegacy(e,t,n):getWasmTableEntry(t).apply(null,n)}function createInvokeFunction(e){return function(){var t=stackSave();try{return dynCall(e,arguments[0],Array.prototype.slice.call(arguments,1))}catch(e){if(stackRestore(t),e!==e+0)throw e;_setThrew(1,0)}}}var ___heap_base=78144;function zeroMemory(e,t){return HEAPU8.fill(0,e,e+t),e}function getMemory(e){if(runtimeInitialized)return zeroMemory(_malloc(e),e);var t=___heap_base,n=t+e+15&-16;return ___heap_base=n,GOT.__heap_base.value=n,t}function isInternalSym(e){return[\"__cpp_exception\",\"__c_longjmp\",\"__wasm_apply_data_relocs\",\"__dso_handle\",\"__tls_size\",\"__tls_align\",\"__set_stack_limits\",\"_emscripten_tls_init\",\"__wasm_init_tls\",\"__wasm_call_ctors\",\"__start_em_asm\",\"__stop_em_asm\"].includes(e)}function uleb128Encode(e,t){e<128?t.push(e):t.push(e%128|128,e>>7)}function sigToWasmTypes(e){for(var t={i:\"i32\",j:\"i32\",f:\"f32\",d:\"f64\",p:\"i32\"},n={parameters:[],results:\"v\"==e[0]?[]:[t[e[0]]]},r=1;r>0];if(firstLoad){var memAlign=Math.pow(2,metadata.memoryAlign);memAlign=Math.max(memAlign,STACK_ALIGN);var memoryBase=metadata.memorySize?alignMemory(getMemory(metadata.memorySize+memAlign),memAlign):0,tableBase=metadata.tableSize?wasmTable.length:0;handle&&(HEAP8[handle+12>>0]=1,HEAPU32[handle+16>>2]=memoryBase,HEAP32[handle+20>>2]=metadata.memorySize,HEAPU32[handle+24>>2]=tableBase,HEAP32[handle+28>>2]=metadata.tableSize)}else memoryBase=HEAPU32[handle+16>>2],tableBase=HEAPU32[handle+24>>2];var tableGrowthNeeded=tableBase+metadata.tableSize-wasmTable.length,moduleExports;function resolveSymbol(e){var t=resolveGlobalSymbol(e,!1);return t||(t=moduleExports[e]),t}tableGrowthNeeded>0&&wasmTable.grow(tableGrowthNeeded);var proxyHandler={get:function(e,t){switch(t){case\"__memory_base\":return memoryBase;case\"__table_base\":return tableBase}return t in asmLibraryArg?asmLibraryArg[t]:(t in e||(e[t]=function(){return n||(n=resolveSymbol(t)),n.apply(null,arguments)}),e[t]);var n}},proxy=new Proxy({},proxyHandler),info={\"GOT.mem\":new Proxy({},GOTHandler),\"GOT.func\":new Proxy({},GOTHandler),env:proxy,wasi_snapshot_preview1:proxy};function postInstantiation(instance){function addEmAsm(addr,body){for(var args=[],arity=0;arity<16&&-1!=body.indexOf(\"$\"+arity);arity++)args.push(\"$\"+arity);args=args.join(\",\");var func=\"(\"+args+\" ) => { \"+body+\"};\";ASM_CONSTS[start]=eval(func)}if(updateTableMap(tableBase,metadata.tableSize),moduleExports=relocateExports(instance.exports,memoryBase),flags.allowUndefined||reportUndefinedSymbols(),\"__start_em_asm\"in moduleExports)for(var start=moduleExports.__start_em_asm,stop=moduleExports.__stop_em_asm;startt(new Uint8Array(e))),n)}));if(!readBinary)throw new Error(e+\": file not found, and synchronous loading of external files is not available\");return readBinary(e)}function i(){if(\"undefined\"!=typeof preloadedWasm&&preloadedWasm[e]){var r=preloadedWasm[e];return t.loadAsync?Promise.resolve(r):r}return t.loadAsync?s(e).then((function(e){return loadWebAssemblyModule(e,t,n)})):loadWebAssemblyModule(s(e),t,n)}function o(t){r.global&&mergeLibSymbols(t,e),r.module=t}return r={refcount:t.nodelete?1/0:1,name:e,module:\"loading\",global:t.global},LDSO.loadedLibsByName[e]=r,n&&(LDSO.loadedLibsByHandle[n]=r),t.loadAsync?i().then((function(e){return o(e),!0})):(o(i()),!0)}function reportUndefinedSymbols(){for(var e in GOT)if(0==GOT[e].value){var t=resolveGlobalSymbol(e,!0);if(!t&&!GOT[e].required)continue;if(\"function\"==typeof t)GOT[e].value=addFunction(t,t.sig);else{if(\"number\"!=typeof t)throw new Error(\"bad export type for `\"+e+\"`: \"+typeof t);GOT[e].value=t}}}function preloadDylibs(){dynamicLibraries.length?(addRunDependency(\"preloadDylibs\"),dynamicLibraries.reduce((function(e,t){return e.then((function(){return loadDynamicLibrary(t,{loadAsync:!0,global:!0,nodelete:!0,allowUndefined:!0})}))}),Promise.resolve()).then((function(){reportUndefinedSymbols(),removeRunDependency(\"preloadDylibs\")}))):reportUndefinedSymbols()}function setValue(e,t,n=\"i8\"){switch(n.endsWith(\"*\")&&(n=\"*\"),n){case\"i1\":case\"i8\":HEAP8[e>>0]=t;break;case\"i16\":HEAP16[e>>1]=t;break;case\"i32\":HEAP32[e>>2]=t;break;case\"i64\":tempI64=[t>>>0,(tempDouble=t,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case\"float\":HEAPF32[e>>2]=t;break;case\"double\":HEAPF64[e>>3]=t;break;case\"*\":HEAPU32[e>>2]=t;break;default:abort(\"invalid type for setValue: \"+n)}}var ___memory_base=new WebAssembly.Global({value:\"i32\",mutable:!1},1024),___stack_pointer=new WebAssembly.Global({value:\"i32\",mutable:!0},78144),___table_base=new WebAssembly.Global({value:\"i32\",mutable:!1},1),nowIsMonotonic=!0,_emscripten_get_now;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function _abort(){abort(\"\")}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(e,t,n){HEAPU8.copyWithin(e,t,t+n)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(e){try{return wasmMemory.grow(e-buffer.byteLength+65535>>>16),updateGlobalBufferAndViews(wasmMemory.buffer),1}catch(e){}}function _emscripten_resize_heap(e){var t=HEAPU8.length;e>>>=0;var n,r=getHeapMax();if(e>r)return!1;for(var s=1;s<=4;s*=2){var i=t*(1+.2/s);if(i=Math.min(i,e+100663296),emscripten_realloc_buffer(Math.min(r,(n=Math.max(e,i))+(65536-n%65536)%65536)))return!0}return!1}__emscripten_get_now_is_monotonic.sig=\"i\",Module._abort=_abort,_abort.sig=\"v\",_emscripten_date_now.sig=\"d\",_emscripten_get_now=ENVIRONMENT_IS_NODE?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.now(),_emscripten_get_now.sig=\"d\",_emscripten_memcpy_big.sig=\"vppp\",_emscripten_resize_heap.sig=\"ip\";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(e,t,n){if(PATH.isAbs(t))return t;var r;if(r=-100===e?FS.cwd():SYSCALLS.getStreamFromFD(e).path,0==t.length){if(!n)throw new FS.ErrnoError(44);return r}return PATH.join2(r,t)},doStat:function(e,t,n){try{var r=e(t)}catch(e){if(e&&e.node&&PATH.normalize(t)!==PATH.normalize(FS.getPath(e.node)))return-54;throw e}HEAP32[n>>2]=r.dev,HEAP32[n+8>>2]=r.ino,HEAP32[n+12>>2]=r.mode,HEAPU32[n+16>>2]=r.nlink,HEAP32[n+20>>2]=r.uid,HEAP32[n+24>>2]=r.gid,HEAP32[n+28>>2]=r.rdev,tempI64=[r.size>>>0,(tempDouble=r.size,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[n+40>>2]=tempI64[0],HEAP32[n+44>>2]=tempI64[1],HEAP32[n+48>>2]=4096,HEAP32[n+52>>2]=r.blocks;var s=r.atime.getTime(),i=r.mtime.getTime(),o=r.ctime.getTime();return tempI64=[Math.floor(s/1e3)>>>0,(tempDouble=Math.floor(s/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[n+56>>2]=tempI64[0],HEAP32[n+60>>2]=tempI64[1],HEAPU32[n+64>>2]=s%1e3*1e3,tempI64=[Math.floor(i/1e3)>>>0,(tempDouble=Math.floor(i/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[n+72>>2]=tempI64[0],HEAP32[n+76>>2]=tempI64[1],HEAPU32[n+80>>2]=i%1e3*1e3,tempI64=[Math.floor(o/1e3)>>>0,(tempDouble=Math.floor(o/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[n+88>>2]=tempI64[0],HEAP32[n+92>>2]=tempI64[1],HEAPU32[n+96>>2]=o%1e3*1e3,tempI64=[r.ino>>>0,(tempDouble=r.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[n+104>>2]=tempI64[0],HEAP32[n+108>>2]=tempI64[1],0},doMsync:function(e,t,n,r,s){if(!FS.isFile(t.node.mode))throw new FS.ErrnoError(43);if(2&r)return 0;var i=HEAPU8.slice(e,e+n);FS.msync(t,i,s,n,r)},varargs:void 0,get:function(){return SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(e){return UTF8ToString(e)},getStreamFromFD:function(e){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(8);return t}};function _proc_exit(e){EXITSTATUS=e,keepRuntimeAlive()||(Module.onExit&&Module.onExit(e),ABORT=!0),quit_(e,new ExitStatus(e))}function exitJS(e,t){EXITSTATUS=e,_proc_exit(e)}_proc_exit.sig=\"vi\";var _exit=exitJS;function _fd_close(e){try{var t=SYSCALLS.getStreamFromFD(e);return FS.close(t),0}catch(e){if(\"undefined\"==typeof FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function convertI32PairToI53Checked(e,t){return t+2097152>>>0<4194305-!!e?(e>>>0)+4294967296*t:NaN}function _fd_seek(e,t,n,r,s){try{var i=convertI32PairToI53Checked(t,n);if(isNaN(i))return 61;var o=SYSCALLS.getStreamFromFD(e);return FS.llseek(o,i,r),tempI64=[o.position>>>0,(tempDouble=o.position,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[s>>2]=tempI64[0],HEAP32[s+4>>2]=tempI64[1],o.getdents&&0===i&&0===r&&(o.getdents=null),0}catch(e){if(\"undefined\"==typeof FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(e,t,n,r){for(var s=0,i=0;i>2],a=HEAPU32[t+4>>2];t+=8;var l=FS.write(e,HEAP8,o,a,r);if(l<0)return-1;s+=l,void 0!==r&&(r+=l)}return s}function _fd_write(e,t,n,r){try{var s=doWritev(SYSCALLS.getStreamFromFD(e),t,n);return HEAPU32[r>>2]=s,0}catch(e){if(\"undefined\"==typeof FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _tree_sitter_log_callback(e,t){if(currentLogCallback){const n=UTF8ToString(t);currentLogCallback(n,0!==e)}}function _tree_sitter_parse_callback(e,t,n,r,s){var i=currentParseCallback(t,{row:n,column:r});\"string\"==typeof i?(setValue(s,i.length,\"i32\"),stringToUTF16(i,e,10240)):setValue(s,0,\"i32\")}function handleException(e){if(e instanceof ExitStatus||\"unwind\"==e)return EXITSTATUS;quit_(1,e)}function allocateUTF8OnStack(e){var t=lengthBytesUTF8(e)+1,n=stackAlloc(t);return stringToUTF8Array(e,HEAP8,n,t),n}function stringToUTF16(e,t,n){if(void 0===n&&(n=2147483647),n<2)return 0;for(var r=t,s=(n-=2)<2*e.length?n/2:e.length,i=0;i>1]=o,t+=2}return HEAP16[t>>1]=0,t-r}function AsciiToString(e){for(var t=\"\";;){var n=HEAPU8[e++>>0];if(!n)return t;t+=String.fromCharCode(n)}}_exit.sig=\"vi\",_fd_close.sig=\"ii\",_fd_seek.sig=\"iijip\",_fd_write.sig=\"iippp\";var asmLibraryArg={__heap_base:___heap_base,__indirect_function_table:wasmTable,__memory_base:___memory_base,__stack_pointer:___stack_pointer,__table_base:___table_base,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,abort:_abort,emscripten_get_now:_emscripten_get_now,emscripten_memcpy_big:_emscripten_memcpy_big,emscripten_resize_heap:_emscripten_resize_heap,exit:_exit,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write,memory:wasmMemory,tree_sitter_log_callback:_tree_sitter_log_callback,tree_sitter_parse_callback:_tree_sitter_parse_callback},asm=createWasm(),___wasm_call_ctors=Module.___wasm_call_ctors=function(){return(___wasm_call_ctors=Module.___wasm_call_ctors=Module.asm.__wasm_call_ctors).apply(null,arguments)},___wasm_apply_data_relocs=Module.___wasm_apply_data_relocs=function(){return(___wasm_apply_data_relocs=Module.___wasm_apply_data_relocs=Module.asm.__wasm_apply_data_relocs).apply(null,arguments)},_malloc=Module._malloc=function(){return(_malloc=Module._malloc=Module.asm.malloc).apply(null,arguments)},_calloc=Module._calloc=function(){return(_calloc=Module._calloc=Module.asm.calloc).apply(null,arguments)},_realloc=Module._realloc=function(){return(_realloc=Module._realloc=Module.asm.realloc).apply(null,arguments)},_free=Module._free=function(){return(_free=Module._free=Module.asm.free).apply(null,arguments)},_ts_language_symbol_count=Module._ts_language_symbol_count=function(){return(_ts_language_symbol_count=Module._ts_language_symbol_count=Module.asm.ts_language_symbol_count).apply(null,arguments)},_ts_language_version=Module._ts_language_version=function(){return(_ts_language_version=Module._ts_language_version=Module.asm.ts_language_version).apply(null,arguments)},_ts_language_field_count=Module._ts_language_field_count=function(){return(_ts_language_field_count=Module._ts_language_field_count=Module.asm.ts_language_field_count).apply(null,arguments)},_ts_language_symbol_name=Module._ts_language_symbol_name=function(){return(_ts_language_symbol_name=Module._ts_language_symbol_name=Module.asm.ts_language_symbol_name).apply(null,arguments)},_ts_language_symbol_for_name=Module._ts_language_symbol_for_name=function(){return(_ts_language_symbol_for_name=Module._ts_language_symbol_for_name=Module.asm.ts_language_symbol_for_name).apply(null,arguments)},_ts_language_symbol_type=Module._ts_language_symbol_type=function(){return(_ts_language_symbol_type=Module._ts_language_symbol_type=Module.asm.ts_language_symbol_type).apply(null,arguments)},_ts_language_field_name_for_id=Module._ts_language_field_name_for_id=function(){return(_ts_language_field_name_for_id=Module._ts_language_field_name_for_id=Module.asm.ts_language_field_name_for_id).apply(null,arguments)},_memset=Module._memset=function(){return(_memset=Module._memset=Module.asm.memset).apply(null,arguments)},_memcpy=Module._memcpy=function(){return(_memcpy=Module._memcpy=Module.asm.memcpy).apply(null,arguments)},_ts_parser_delete=Module._ts_parser_delete=function(){return(_ts_parser_delete=Module._ts_parser_delete=Module.asm.ts_parser_delete).apply(null,arguments)},_ts_parser_reset=Module._ts_parser_reset=function(){return(_ts_parser_reset=Module._ts_parser_reset=Module.asm.ts_parser_reset).apply(null,arguments)},_ts_parser_set_language=Module._ts_parser_set_language=function(){return(_ts_parser_set_language=Module._ts_parser_set_language=Module.asm.ts_parser_set_language).apply(null,arguments)},_ts_parser_timeout_micros=Module._ts_parser_timeout_micros=function(){return(_ts_parser_timeout_micros=Module._ts_parser_timeout_micros=Module.asm.ts_parser_timeout_micros).apply(null,arguments)},_ts_parser_set_timeout_micros=Module._ts_parser_set_timeout_micros=function(){return(_ts_parser_set_timeout_micros=Module._ts_parser_set_timeout_micros=Module.asm.ts_parser_set_timeout_micros).apply(null,arguments)},_memmove=Module._memmove=function(){return(_memmove=Module._memmove=Module.asm.memmove).apply(null,arguments)},_memcmp=Module._memcmp=function(){return(_memcmp=Module._memcmp=Module.asm.memcmp).apply(null,arguments)},_ts_query_new=Module._ts_query_new=function(){return(_ts_query_new=Module._ts_query_new=Module.asm.ts_query_new).apply(null,arguments)},_ts_query_delete=Module._ts_query_delete=function(){return(_ts_query_delete=Module._ts_query_delete=Module.asm.ts_query_delete).apply(null,arguments)},_iswspace=Module._iswspace=function(){return(_iswspace=Module._iswspace=Module.asm.iswspace).apply(null,arguments)},_iswalnum=Module._iswalnum=function(){return(_iswalnum=Module._iswalnum=Module.asm.iswalnum).apply(null,arguments)},_ts_query_pattern_count=Module._ts_query_pattern_count=function(){return(_ts_query_pattern_count=Module._ts_query_pattern_count=Module.asm.ts_query_pattern_count).apply(null,arguments)},_ts_query_capture_count=Module._ts_query_capture_count=function(){return(_ts_query_capture_count=Module._ts_query_capture_count=Module.asm.ts_query_capture_count).apply(null,arguments)},_ts_query_string_count=Module._ts_query_string_count=function(){return(_ts_query_string_count=Module._ts_query_string_count=Module.asm.ts_query_string_count).apply(null,arguments)},_ts_query_capture_name_for_id=Module._ts_query_capture_name_for_id=function(){return(_ts_query_capture_name_for_id=Module._ts_query_capture_name_for_id=Module.asm.ts_query_capture_name_for_id).apply(null,arguments)},_ts_query_string_value_for_id=Module._ts_query_string_value_for_id=function(){return(_ts_query_string_value_for_id=Module._ts_query_string_value_for_id=Module.asm.ts_query_string_value_for_id).apply(null,arguments)},_ts_query_predicates_for_pattern=Module._ts_query_predicates_for_pattern=function(){return(_ts_query_predicates_for_pattern=Module._ts_query_predicates_for_pattern=Module.asm.ts_query_predicates_for_pattern).apply(null,arguments)},_ts_tree_copy=Module._ts_tree_copy=function(){return(_ts_tree_copy=Module._ts_tree_copy=Module.asm.ts_tree_copy).apply(null,arguments)},_ts_tree_delete=Module._ts_tree_delete=function(){return(_ts_tree_delete=Module._ts_tree_delete=Module.asm.ts_tree_delete).apply(null,arguments)},_ts_init=Module._ts_init=function(){return(_ts_init=Module._ts_init=Module.asm.ts_init).apply(null,arguments)},_ts_parser_new_wasm=Module._ts_parser_new_wasm=function(){return(_ts_parser_new_wasm=Module._ts_parser_new_wasm=Module.asm.ts_parser_new_wasm).apply(null,arguments)},_ts_parser_enable_logger_wasm=Module._ts_parser_enable_logger_wasm=function(){return(_ts_parser_enable_logger_wasm=Module._ts_parser_enable_logger_wasm=Module.asm.ts_parser_enable_logger_wasm).apply(null,arguments)},_ts_parser_parse_wasm=Module._ts_parser_parse_wasm=function(){return(_ts_parser_parse_wasm=Module._ts_parser_parse_wasm=Module.asm.ts_parser_parse_wasm).apply(null,arguments)},_ts_language_type_is_named_wasm=Module._ts_language_type_is_named_wasm=function(){return(_ts_language_type_is_named_wasm=Module._ts_language_type_is_named_wasm=Module.asm.ts_language_type_is_named_wasm).apply(null,arguments)},_ts_language_type_is_visible_wasm=Module._ts_language_type_is_visible_wasm=function(){return(_ts_language_type_is_visible_wasm=Module._ts_language_type_is_visible_wasm=Module.asm.ts_language_type_is_visible_wasm).apply(null,arguments)},_ts_tree_root_node_wasm=Module._ts_tree_root_node_wasm=function(){return(_ts_tree_root_node_wasm=Module._ts_tree_root_node_wasm=Module.asm.ts_tree_root_node_wasm).apply(null,arguments)},_ts_tree_edit_wasm=Module._ts_tree_edit_wasm=function(){return(_ts_tree_edit_wasm=Module._ts_tree_edit_wasm=Module.asm.ts_tree_edit_wasm).apply(null,arguments)},_ts_tree_get_changed_ranges_wasm=Module._ts_tree_get_changed_ranges_wasm=function(){return(_ts_tree_get_changed_ranges_wasm=Module._ts_tree_get_changed_ranges_wasm=Module.asm.ts_tree_get_changed_ranges_wasm).apply(null,arguments)},_ts_tree_cursor_new_wasm=Module._ts_tree_cursor_new_wasm=function(){return(_ts_tree_cursor_new_wasm=Module._ts_tree_cursor_new_wasm=Module.asm.ts_tree_cursor_new_wasm).apply(null,arguments)},_ts_tree_cursor_delete_wasm=Module._ts_tree_cursor_delete_wasm=function(){return(_ts_tree_cursor_delete_wasm=Module._ts_tree_cursor_delete_wasm=Module.asm.ts_tree_cursor_delete_wasm).apply(null,arguments)},_ts_tree_cursor_reset_wasm=Module._ts_tree_cursor_reset_wasm=function(){return(_ts_tree_cursor_reset_wasm=Module._ts_tree_cursor_reset_wasm=Module.asm.ts_tree_cursor_reset_wasm).apply(null,arguments)},_ts_tree_cursor_goto_first_child_wasm=Module._ts_tree_cursor_goto_first_child_wasm=function(){return(_ts_tree_cursor_goto_first_child_wasm=Module._ts_tree_cursor_goto_first_child_wasm=Module.asm.ts_tree_cursor_goto_first_child_wasm).apply(null,arguments)},_ts_tree_cursor_goto_next_sibling_wasm=Module._ts_tree_cursor_goto_next_sibling_wasm=function(){return(_ts_tree_cursor_goto_next_sibling_wasm=Module._ts_tree_cursor_goto_next_sibling_wasm=Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply(null,arguments)},_ts_tree_cursor_goto_parent_wasm=Module._ts_tree_cursor_goto_parent_wasm=function(){return(_ts_tree_cursor_goto_parent_wasm=Module._ts_tree_cursor_goto_parent_wasm=Module.asm.ts_tree_cursor_goto_parent_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_type_id_wasm=Module._ts_tree_cursor_current_node_type_id_wasm=function(){return(_ts_tree_cursor_current_node_type_id_wasm=Module._ts_tree_cursor_current_node_type_id_wasm=Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_is_named_wasm=Module._ts_tree_cursor_current_node_is_named_wasm=function(){return(_ts_tree_cursor_current_node_is_named_wasm=Module._ts_tree_cursor_current_node_is_named_wasm=Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_is_missing_wasm=Module._ts_tree_cursor_current_node_is_missing_wasm=function(){return(_ts_tree_cursor_current_node_is_missing_wasm=Module._ts_tree_cursor_current_node_is_missing_wasm=Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_id_wasm=Module._ts_tree_cursor_current_node_id_wasm=function(){return(_ts_tree_cursor_current_node_id_wasm=Module._ts_tree_cursor_current_node_id_wasm=Module.asm.ts_tree_cursor_current_node_id_wasm).apply(null,arguments)},_ts_tree_cursor_start_position_wasm=Module._ts_tree_cursor_start_position_wasm=function(){return(_ts_tree_cursor_start_position_wasm=Module._ts_tree_cursor_start_position_wasm=Module.asm.ts_tree_cursor_start_position_wasm).apply(null,arguments)},_ts_tree_cursor_end_position_wasm=Module._ts_tree_cursor_end_position_wasm=function(){return(_ts_tree_cursor_end_position_wasm=Module._ts_tree_cursor_end_position_wasm=Module.asm.ts_tree_cursor_end_position_wasm).apply(null,arguments)},_ts_tree_cursor_start_index_wasm=Module._ts_tree_cursor_start_index_wasm=function(){return(_ts_tree_cursor_start_index_wasm=Module._ts_tree_cursor_start_index_wasm=Module.asm.ts_tree_cursor_start_index_wasm).apply(null,arguments)},_ts_tree_cursor_end_index_wasm=Module._ts_tree_cursor_end_index_wasm=function(){return(_ts_tree_cursor_end_index_wasm=Module._ts_tree_cursor_end_index_wasm=Module.asm.ts_tree_cursor_end_index_wasm).apply(null,arguments)},_ts_tree_cursor_current_field_id_wasm=Module._ts_tree_cursor_current_field_id_wasm=function(){return(_ts_tree_cursor_current_field_id_wasm=Module._ts_tree_cursor_current_field_id_wasm=Module.asm.ts_tree_cursor_current_field_id_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_wasm=Module._ts_tree_cursor_current_node_wasm=function(){return(_ts_tree_cursor_current_node_wasm=Module._ts_tree_cursor_current_node_wasm=Module.asm.ts_tree_cursor_current_node_wasm).apply(null,arguments)},_ts_node_symbol_wasm=Module._ts_node_symbol_wasm=function(){return(_ts_node_symbol_wasm=Module._ts_node_symbol_wasm=Module.asm.ts_node_symbol_wasm).apply(null,arguments)},_ts_node_child_count_wasm=Module._ts_node_child_count_wasm=function(){return(_ts_node_child_count_wasm=Module._ts_node_child_count_wasm=Module.asm.ts_node_child_count_wasm).apply(null,arguments)},_ts_node_named_child_count_wasm=Module._ts_node_named_child_count_wasm=function(){return(_ts_node_named_child_count_wasm=Module._ts_node_named_child_count_wasm=Module.asm.ts_node_named_child_count_wasm).apply(null,arguments)},_ts_node_child_wasm=Module._ts_node_child_wasm=function(){return(_ts_node_child_wasm=Module._ts_node_child_wasm=Module.asm.ts_node_child_wasm).apply(null,arguments)},_ts_node_named_child_wasm=Module._ts_node_named_child_wasm=function(){return(_ts_node_named_child_wasm=Module._ts_node_named_child_wasm=Module.asm.ts_node_named_child_wasm).apply(null,arguments)},_ts_node_child_by_field_id_wasm=Module._ts_node_child_by_field_id_wasm=function(){return(_ts_node_child_by_field_id_wasm=Module._ts_node_child_by_field_id_wasm=Module.asm.ts_node_child_by_field_id_wasm).apply(null,arguments)},_ts_node_next_sibling_wasm=Module._ts_node_next_sibling_wasm=function(){return(_ts_node_next_sibling_wasm=Module._ts_node_next_sibling_wasm=Module.asm.ts_node_next_sibling_wasm).apply(null,arguments)},_ts_node_prev_sibling_wasm=Module._ts_node_prev_sibling_wasm=function(){return(_ts_node_prev_sibling_wasm=Module._ts_node_prev_sibling_wasm=Module.asm.ts_node_prev_sibling_wasm).apply(null,arguments)},_ts_node_next_named_sibling_wasm=Module._ts_node_next_named_sibling_wasm=function(){return(_ts_node_next_named_sibling_wasm=Module._ts_node_next_named_sibling_wasm=Module.asm.ts_node_next_named_sibling_wasm).apply(null,arguments)},_ts_node_prev_named_sibling_wasm=Module._ts_node_prev_named_sibling_wasm=function(){return(_ts_node_prev_named_sibling_wasm=Module._ts_node_prev_named_sibling_wasm=Module.asm.ts_node_prev_named_sibling_wasm).apply(null,arguments)},_ts_node_parent_wasm=Module._ts_node_parent_wasm=function(){return(_ts_node_parent_wasm=Module._ts_node_parent_wasm=Module.asm.ts_node_parent_wasm).apply(null,arguments)},_ts_node_descendant_for_index_wasm=Module._ts_node_descendant_for_index_wasm=function(){return(_ts_node_descendant_for_index_wasm=Module._ts_node_descendant_for_index_wasm=Module.asm.ts_node_descendant_for_index_wasm).apply(null,arguments)},_ts_node_named_descendant_for_index_wasm=Module._ts_node_named_descendant_for_index_wasm=function(){return(_ts_node_named_descendant_for_index_wasm=Module._ts_node_named_descendant_for_index_wasm=Module.asm.ts_node_named_descendant_for_index_wasm).apply(null,arguments)},_ts_node_descendant_for_position_wasm=Module._ts_node_descendant_for_position_wasm=function(){return(_ts_node_descendant_for_position_wasm=Module._ts_node_descendant_for_position_wasm=Module.asm.ts_node_descendant_for_position_wasm).apply(null,arguments)},_ts_node_named_descendant_for_position_wasm=Module._ts_node_named_descendant_for_position_wasm=function(){return(_ts_node_named_descendant_for_position_wasm=Module._ts_node_named_descendant_for_position_wasm=Module.asm.ts_node_named_descendant_for_position_wasm).apply(null,arguments)},_ts_node_start_point_wasm=Module._ts_node_start_point_wasm=function(){return(_ts_node_start_point_wasm=Module._ts_node_start_point_wasm=Module.asm.ts_node_start_point_wasm).apply(null,arguments)},_ts_node_end_point_wasm=Module._ts_node_end_point_wasm=function(){return(_ts_node_end_point_wasm=Module._ts_node_end_point_wasm=Module.asm.ts_node_end_point_wasm).apply(null,arguments)},_ts_node_start_index_wasm=Module._ts_node_start_index_wasm=function(){return(_ts_node_start_index_wasm=Module._ts_node_start_index_wasm=Module.asm.ts_node_start_index_wasm).apply(null,arguments)},_ts_node_end_index_wasm=Module._ts_node_end_index_wasm=function(){return(_ts_node_end_index_wasm=Module._ts_node_end_index_wasm=Module.asm.ts_node_end_index_wasm).apply(null,arguments)},_ts_node_to_string_wasm=Module._ts_node_to_string_wasm=function(){return(_ts_node_to_string_wasm=Module._ts_node_to_string_wasm=Module.asm.ts_node_to_string_wasm).apply(null,arguments)},_ts_node_children_wasm=Module._ts_node_children_wasm=function(){return(_ts_node_children_wasm=Module._ts_node_children_wasm=Module.asm.ts_node_children_wasm).apply(null,arguments)},_ts_node_named_children_wasm=Module._ts_node_named_children_wasm=function(){return(_ts_node_named_children_wasm=Module._ts_node_named_children_wasm=Module.asm.ts_node_named_children_wasm).apply(null,arguments)},_ts_node_descendants_of_type_wasm=Module._ts_node_descendants_of_type_wasm=function(){return(_ts_node_descendants_of_type_wasm=Module._ts_node_descendants_of_type_wasm=Module.asm.ts_node_descendants_of_type_wasm).apply(null,arguments)},_ts_node_is_named_wasm=Module._ts_node_is_named_wasm=function(){return(_ts_node_is_named_wasm=Module._ts_node_is_named_wasm=Module.asm.ts_node_is_named_wasm).apply(null,arguments)},_ts_node_has_changes_wasm=Module._ts_node_has_changes_wasm=function(){return(_ts_node_has_changes_wasm=Module._ts_node_has_changes_wasm=Module.asm.ts_node_has_changes_wasm).apply(null,arguments)},_ts_node_has_error_wasm=Module._ts_node_has_error_wasm=function(){return(_ts_node_has_error_wasm=Module._ts_node_has_error_wasm=Module.asm.ts_node_has_error_wasm).apply(null,arguments)},_ts_node_is_missing_wasm=Module._ts_node_is_missing_wasm=function(){return(_ts_node_is_missing_wasm=Module._ts_node_is_missing_wasm=Module.asm.ts_node_is_missing_wasm).apply(null,arguments)},_ts_query_matches_wasm=Module._ts_query_matches_wasm=function(){return(_ts_query_matches_wasm=Module._ts_query_matches_wasm=Module.asm.ts_query_matches_wasm).apply(null,arguments)},_ts_query_captures_wasm=Module._ts_query_captures_wasm=function(){return(_ts_query_captures_wasm=Module._ts_query_captures_wasm=Module.asm.ts_query_captures_wasm).apply(null,arguments)},___cxa_atexit=Module.___cxa_atexit=function(){return(___cxa_atexit=Module.___cxa_atexit=Module.asm.__cxa_atexit).apply(null,arguments)},_iswdigit=Module._iswdigit=function(){return(_iswdigit=Module._iswdigit=Module.asm.iswdigit).apply(null,arguments)},_iswalpha=Module._iswalpha=function(){return(_iswalpha=Module._iswalpha=Module.asm.iswalpha).apply(null,arguments)},_iswlower=Module._iswlower=function(){return(_iswlower=Module._iswlower=Module.asm.iswlower).apply(null,arguments)},_memchr=Module._memchr=function(){return(_memchr=Module._memchr=Module.asm.memchr).apply(null,arguments)},_strlen=Module._strlen=function(){return(_strlen=Module._strlen=Module.asm.strlen).apply(null,arguments)},_towupper=Module._towupper=function(){return(_towupper=Module._towupper=Module.asm.towupper).apply(null,arguments)},_setThrew=Module._setThrew=function(){return(_setThrew=Module._setThrew=Module.asm.setThrew).apply(null,arguments)},stackSave=Module.stackSave=function(){return(stackSave=Module.stackSave=Module.asm.stackSave).apply(null,arguments)},stackRestore=Module.stackRestore=function(){return(stackRestore=Module.stackRestore=Module.asm.stackRestore).apply(null,arguments)},stackAlloc=Module.stackAlloc=function(){return(stackAlloc=Module.stackAlloc=Module.asm.stackAlloc).apply(null,arguments)},__Znwm=Module.__Znwm=function(){return(__Znwm=Module.__Znwm=Module.asm._Znwm).apply(null,arguments)},__ZdlPv=Module.__ZdlPv=function(){return(__ZdlPv=Module.__ZdlPv=Module.asm._ZdlPv).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply(null,arguments)},__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply(null,arguments)},__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply(null,arguments)},__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply(null,arguments)},__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw).apply(null,arguments)},dynCall_jiji=Module.dynCall_jiji=function(){return(dynCall_jiji=Module.dynCall_jiji=Module.asm.dynCall_jiji).apply(null,arguments)},_orig$ts_parser_timeout_micros=Module._orig$ts_parser_timeout_micros=function(){return(_orig$ts_parser_timeout_micros=Module._orig$ts_parser_timeout_micros=Module.asm.orig$ts_parser_timeout_micros).apply(null,arguments)},_orig$ts_parser_set_timeout_micros=Module._orig$ts_parser_set_timeout_micros=function(){return(_orig$ts_parser_set_timeout_micros=Module._orig$ts_parser_set_timeout_micros=Module.asm.orig$ts_parser_set_timeout_micros).apply(null,arguments)},calledRun;function callMain(e){var t=Module._main;if(t){(e=e||[]).unshift(thisProgram);var n=e.length,r=stackAlloc(4*(n+1)),s=r>>2;e.forEach((e=>{HEAP32[s++]=allocateUTF8OnStack(e)})),HEAP32[s]=0;try{var i=t(n,r);return exitJS(i,!0),i}catch(e){return handleException(e)}}}Module.AsciiToString=AsciiToString,Module.stringToUTF16=stringToUTF16,dependenciesFulfilled=function e(){calledRun||run(),calledRun||(dependenciesFulfilled=e)};var dylibsLoaded=!1;function run(e){function t(){calledRun||(calledRun=!0,Module.calledRun=!0,ABORT||(initRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),shouldRunNow&&callMain(e),postRun()))}e=e||arguments_,runDependencies>0||!dylibsLoaded&&(preloadDylibs(),dylibsLoaded=!0,runDependencies>0)||(preRun(),runDependencies>0||(Module.setStatus?(Module.setStatus(\"Running...\"),setTimeout((function(){setTimeout((function(){Module.setStatus(\"\")}),1),t()}),1)):t()))}if(Module.preInit)for(\"function\"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run();const C=Module,INTERNAL={},SIZE_OF_INT=4,SIZE_OF_NODE=5*SIZE_OF_INT,SIZE_OF_POINT=2*SIZE_OF_INT,SIZE_OF_RANGE=2*SIZE_OF_INT+2*SIZE_OF_POINT,ZERO_POINT={row:0,column:0},QUERY_WORD_REGEX=/[\\w-.]*/g,PREDICATE_STEP_TYPE_CAPTURE=1,PREDICATE_STEP_TYPE_STRING=2,LANGUAGE_FUNCTION_REGEX=/^_?tree_sitter_\\w+/;var VERSION,MIN_COMPATIBLE_VERSION,TRANSFER_BUFFER,currentParseCallback,currentLogCallback;class ParserImpl{static init(){TRANSFER_BUFFER=C._ts_init(),VERSION=getValue(TRANSFER_BUFFER,\"i32\"),MIN_COMPATIBLE_VERSION=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\")}initialize(){C._ts_parser_new_wasm(),this[0]=getValue(TRANSFER_BUFFER,\"i32\"),this[1]=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\")}delete(){C._ts_parser_delete(this[0]),C._free(this[1]),this[0]=0,this[1]=0}setLanguage(e){let t;if(e){if(e.constructor!==Language)throw new Error(\"Argument must be a Language\");{t=e[0];const n=C._ts_language_version(t);if(ne.slice(t,r);else{if(\"function\"!=typeof e)throw new Error(\"Argument must be a string or a function\");currentParseCallback=e}this.logCallback?(currentLogCallback=this.logCallback,C._ts_parser_enable_logger_wasm(this[0],1)):(currentLogCallback=null,C._ts_parser_enable_logger_wasm(this[0],0));let r=0,s=0;if(n&&n.includedRanges){r=n.includedRanges.length,s=C._calloc(r,SIZE_OF_RANGE);let e=s;for(let t=0;t0){let e=n;for(let n=0;n0){let n=t;for(let t=0;t0){let n=t;for(let t=0;t0){let e=a;for(let t=0;t0){if(\"string\"!==s[0].type)throw new Error(\"Predicates must begin with a literal value\");const t=s[0].value;let n=!0;switch(t){case\"not-eq?\":n=!1;case\"eq?\":if(3!==s.length)throw new Error(\"Wrong number of arguments to `#eq?` predicate. Expected 2, got \"+(s.length-1));if(\"capture\"!==s[1].type)throw new Error(`First argument of \\`#eq?\\` predicate must be a capture. Got \"${s[1].value}\"`);if(\"capture\"===s[2].type){const t=s[1].name,r=s[2].name;p[e].push((function(e){let s,i;for(const n of e)n.name===t&&(s=n.node),n.name===r&&(i=n.node);return void 0===s||void 0===i||s.text===i.text===n}))}else{const t=s[1].name,r=s[2].value;p[e].push((function(e){for(const s of e)if(s.name===t)return s.node.text===r===n;return!0}))}break;case\"not-match?\":n=!1;case\"match?\":if(3!==s.length)throw new Error(`Wrong number of arguments to \\`#match?\\` predicate. Expected 2, got ${s.length-1}.`);if(\"capture\"!==s[1].type)throw new Error(`First argument of \\`#match?\\` predicate must be a capture. Got \"${s[1].value}\".`);if(\"string\"!==s[2].type)throw new Error(`Second argument of \\`#match?\\` predicate must be a string. Got @${s[2].value}.`);const r=s[1].name,i=new RegExp(s[2].value);p[e].push((function(e){for(const t of e)if(t.name===r)return i.test(t.node.text)===n;return!0}));break;case\"set!\":if(s.length<2||s.length>3)throw new Error(`Wrong number of arguments to \\`#set!\\` predicate. Expected 1 or 2. Got ${s.length-1}.`);if(s.some((e=>\"string\"!==e.type)))throw new Error('Arguments to `#set!` predicate must be a strings.\".');u[e]||(u[e]={}),u[e][s[1].value]=s[2]?s[2].value:null;break;case\"is?\":case\"is-not?\":if(s.length<2||s.length>3)throw new Error(`Wrong number of arguments to \\`#${t}\\` predicate. Expected 1 or 2. Got ${s.length-1}.`);if(s.some((e=>\"string\"!==e.type)))throw new Error(`Arguments to \\`#${t}\\` predicate must be a strings.\".`);const o=\"is?\"===t?_:c;o[e]||(o[e]={}),o[e][s[1].value]=s[2]?s[2].value:null;break;default:d[e].push({operator:t,operands:s.slice(1)})}s.length=0}}Object.freeze(u[e]),Object.freeze(_[e]),Object.freeze(c[e])}return C._free(n),new Query(INTERNAL,r,a,p,d,Object.freeze(u),Object.freeze(_),Object.freeze(c))}static load(e){let t;if(e instanceof Uint8Array)t=Promise.resolve(e);else{const n=e;if(\"undefined\"!=typeof process&&process.versions&&process.versions.node){const e=__webpack_require__(7147);t=Promise.resolve(e.readFileSync(n))}else t=fetch(n).then((e=>e.arrayBuffer().then((t=>{if(e.ok)return new Uint8Array(t);{const n=new TextDecoder(\"utf-8\").decode(t);throw new Error(`Language.load failed with status ${e.status}.\\n\\n${n}`)}}))))}const n=\"function\"==typeof loadSideModule?loadSideModule:loadWebAssemblyModule;return t.then((e=>n(e,{loadAsync:!0}))).then((e=>{const t=Object.keys(e),n=t.find((e=>LANGUAGE_FUNCTION_REGEX.test(e)&&!e.includes(\"external_scanner_\")));n||console.log(`Couldn't find language function in WASM file. Symbols:\\n${JSON.stringify(t,null,2)}`);const r=e[n]();return new Language(INTERNAL,r)}))}}class Query{constructor(e,t,n,r,s,i,o,a){assertInternal(e),this[0]=t,this.captureNames=n,this.textPredicates=r,this.predicates=s,this.setProperties=i,this.assertedProperties=o,this.refutedProperties=a,this.exceededMatchLimit=!1}delete(){C._ts_query_delete(this[0]),this[0]=0}matches(e,t,n,r){t||(t=ZERO_POINT),n||(n=ZERO_POINT),r||(r={});let s=r.matchLimit;if(void 0===s)s=0;else if(\"number\"!=typeof s)throw new Error(\"Arguments must be numbers\");marshalNode(e),C._ts_query_matches_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column,s);const i=getValue(TRANSFER_BUFFER,\"i32\"),o=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\"),a=getValue(TRANSFER_BUFFER+2*SIZE_OF_INT,\"i32\"),l=new Array(i);this.exceededMatchLimit=!!a;let u=0,_=o;for(let t=0;te(s)))){l[u++]={pattern:n,captures:s};const e=this.setProperties[n];e&&(l[t].setProperties=e);const r=this.assertedProperties[n];r&&(l[t].assertedProperties=r);const i=this.refutedProperties[n];i&&(l[t].refutedProperties=i)}}return l.length=u,C._free(o),l}captures(e,t,n,r){t||(t=ZERO_POINT),n||(n=ZERO_POINT),r||(r={});let s=r.matchLimit;if(void 0===s)s=0;else if(\"number\"!=typeof s)throw new Error(\"Arguments must be numbers\");marshalNode(e),C._ts_query_captures_wasm(this[0],e.tree[0],t.row,t.column,n.row,n.column,s);const i=getValue(TRANSFER_BUFFER,\"i32\"),o=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\"),a=getValue(TRANSFER_BUFFER+2*SIZE_OF_INT,\"i32\"),l=[];this.exceededMatchLimit=!!a;const u=[];let _=o;for(let t=0;te(u)))){const e=u[r],n=this.setProperties[t];n&&(e.setProperties=n);const s=this.assertedProperties[t];s&&(e.assertedProperties=s);const i=this.refutedProperties[t];i&&(e.refutedProperties=i),l.push(e)}}return C._free(o),l}predicatesForPattern(e){return this.predicates[e]}didExceedMatchLimit(){return this.exceededMatchLimit}}function getText(e,t,n){const r=n-t;let s=e.textCallback(t,null,n);for(t+=s.length;t0))break;t+=r.length,s+=r}return t>n&&(s=s.slice(0,r)),s}function unmarshalCaptures(e,t,n,r){for(let s=0,i=r.length;s{ParserImpl.init(),resolveInitPromise()}})))}}return Parser}();module.exports=TreeSitter},9491:e=>{\"use strict\";e.exports=require(\"assert\")},7147:e=>{\"use strict\";e.exports=require(\"fs\")},1017:e=>{\"use strict\";e.exports=require(\"path\")},3837:e=>{\"use strict\";e.exports=require(\"util\")},1267:e=>{\"use strict\";e.exports=require(\"worker_threads\")}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}var __webpack_exports__=__webpack_require__(5563);module.exports=__webpack_exports__})();\n//# sourceMappingURL=lib.js.map","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.convertChangesToDMP = convertChangesToDMP;\n\n/*istanbul ignore end*/\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n\n ret.push([operation, change.value]);\n }\n\n return ret;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L2RtcC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvRE1QIiwiY2hhbmdlcyIsInJldCIsImNoYW5nZSIsIm9wZXJhdGlvbiIsImkiLCJsZW5ndGgiLCJhZGRlZCIsInJlbW92ZWQiLCJwdXNoIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ08sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLEdBQUcsR0FBRyxFQUFWO0FBQUEsTUFDSUMsTUFESjtBQUFBLE1BRUlDLFNBRko7O0FBR0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixPQUFPLENBQUNLLE1BQTVCLEVBQW9DRCxDQUFDLEVBQXJDLEVBQXlDO0FBQ3ZDRixJQUFBQSxNQUFNLEdBQUdGLE9BQU8sQ0FBQ0ksQ0FBRCxDQUFoQjs7QUFDQSxRQUFJRixNQUFNLENBQUNJLEtBQVgsRUFBa0I7QUFDaEJILE1BQUFBLFNBQVMsR0FBRyxDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUlELE1BQU0sQ0FBQ0ssT0FBWCxFQUFvQjtBQUN6QkosTUFBQUEsU0FBUyxHQUFHLENBQUMsQ0FBYjtBQUNELEtBRk0sTUFFQTtBQUNMQSxNQUFBQSxTQUFTLEdBQUcsQ0FBWjtBQUNEOztBQUVERixJQUFBQSxHQUFHLENBQUNPLElBQUosQ0FBUyxDQUFDTCxTQUFELEVBQVlELE1BQU0sQ0FBQ08sS0FBbkIsQ0FBVDtBQUNEOztBQUNELFNBQU9SLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNlZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1kaWZmLW1hdGNoLXBhdGNoL3dpa2kvQVBJXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb0RNUChjaGFuZ2VzKSB7XG4gIGxldCByZXQgPSBbXSxcbiAgICAgIGNoYW5nZSxcbiAgICAgIG9wZXJhdGlvbjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhbmdlID0gY2hhbmdlc1tpXTtcbiAgICBpZiAoY2hhbmdlLmFkZGVkKSB7XG4gICAgICBvcGVyYXRpb24gPSAxO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgIG9wZXJhdGlvbiA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcGVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIHJldC5wdXNoKFtvcGVyYXRpb24sIGNoYW5nZS52YWx1ZV0pO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.convertChangesToXML = convertChangesToXML;\n\n/*istanbul ignore end*/\nfunction convertChangesToXML(changes) {\n var ret = [];\n\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n\n if (change.added) {\n ret.push('');\n } else if (change.removed) {\n ret.push('');\n }\n\n ret.push(escapeHTML(change.value));\n\n if (change.added) {\n ret.push('');\n } else if (change.removed) {\n ret.push('');\n }\n }\n\n return ret.join('');\n}\n\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&');\n n = n.replace(//g, '>');\n n = n.replace(/\"/g, '"');\n return n;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L3htbC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvWE1MIiwiY2hhbmdlcyIsInJldCIsImkiLCJsZW5ndGgiLCJjaGFuZ2UiLCJhZGRlZCIsInB1c2giLCJyZW1vdmVkIiwiZXNjYXBlSFRNTCIsInZhbHVlIiwiam9pbiIsInMiLCJuIiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLEdBQUcsR0FBRyxFQUFWOztBQUNBLE9BQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsT0FBTyxDQUFDRyxNQUE1QixFQUFvQ0QsQ0FBQyxFQUFyQyxFQUF5QztBQUN2QyxRQUFJRSxNQUFNLEdBQUdKLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFwQjs7QUFDQSxRQUFJRSxNQUFNLENBQUNDLEtBQVgsRUFBa0I7QUFDaEJKLE1BQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTLE9BQVQ7QUFDRCxLQUZELE1BRU8sSUFBSUYsTUFBTSxDQUFDRyxPQUFYLEVBQW9CO0FBQ3pCTixNQUFBQSxHQUFHLENBQUNLLElBQUosQ0FBUyxPQUFUO0FBQ0Q7O0FBRURMLElBQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTRSxVQUFVLENBQUNKLE1BQU0sQ0FBQ0ssS0FBUixDQUFuQjs7QUFFQSxRQUFJTCxNQUFNLENBQUNDLEtBQVgsRUFBa0I7QUFDaEJKLE1BQUFBLEdBQUcsQ0FBQ0ssSUFBSixDQUFTLFFBQVQ7QUFDRCxLQUZELE1BRU8sSUFBSUYsTUFBTSxDQUFDRyxPQUFYLEVBQW9CO0FBQ3pCTixNQUFBQSxHQUFHLENBQUNLLElBQUosQ0FBUyxRQUFUO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPTCxHQUFHLENBQUNTLElBQUosQ0FBUyxFQUFULENBQVA7QUFDRDs7QUFFRCxTQUFTRixVQUFULENBQW9CRyxDQUFwQixFQUF1QjtBQUNyQixNQUFJQyxDQUFDLEdBQUdELENBQVI7QUFDQUMsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE9BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE1BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLE1BQWhCLENBQUo7QUFDQUQsRUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUNDLE9BQUYsQ0FBVSxJQUFWLEVBQWdCLFFBQWhCLENBQUo7QUFFQSxTQUFPRCxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY29udmVydENoYW5nZXNUb1hNTChjaGFuZ2VzKSB7XG4gIGxldCByZXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgcmV0LnB1c2goJzxkZWw+Jyk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goZXNjYXBlSFRNTChjaGFuZ2UudmFsdWUpKTtcblxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICByZXQucHVzaCgnPC9kZWw+Jyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUhUTUwocykge1xuICBsZXQgbiA9IHM7XG4gIG4gPSBuLnJlcGxhY2UoLyYvZywgJyZhbXA7Jyk7XG4gIG4gPSBuLnJlcGxhY2UoLzwvZywgJyZsdDsnKTtcbiAgbiA9IG4ucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICBuID0gbi5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG5cbiAgcmV0dXJuIG47XG59XG4iXX0=\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.diffArrays = diffArrays;\nexports.arrayDiff = void 0;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./base\"))\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\nvar arrayDiff = new\n/*istanbul ignore start*/\n_base\n/*istanbul ignore end*/\n[\n/*istanbul ignore start*/\n\"default\"\n/*istanbul ignore end*/\n]();\n\n/*istanbul ignore start*/\nexports.arrayDiff = arrayDiff;\n\n/*istanbul ignore end*/\narrayDiff.tokenize = function (value) {\n return value.slice();\n};\n\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n};\n\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RGlmZiIsIkRpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic2xpY2UiLCJqb2luIiwicmVtb3ZlRW1wdHkiLCJkaWZmQXJyYXlzIiwib2xkQXJyIiwibmV3QXJyIiwiY2FsbGJhY2siLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxTQUFTLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFsQjs7Ozs7O0FBQ1BELFNBQVMsQ0FBQ0UsUUFBVixHQUFxQixVQUFTQyxLQUFULEVBQWdCO0FBQ25DLFNBQU9BLEtBQUssQ0FBQ0MsS0FBTixFQUFQO0FBQ0QsQ0FGRDs7QUFHQUosU0FBUyxDQUFDSyxJQUFWLEdBQWlCTCxTQUFTLENBQUNNLFdBQVYsR0FBd0IsVUFBU0gsS0FBVCxFQUFnQjtBQUN2RCxTQUFPQSxLQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTSSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsTUFBNUIsRUFBb0NDLFFBQXBDLEVBQThDO0FBQUUsU0FBT1YsU0FBUyxDQUFDVyxJQUFWLENBQWVILE1BQWYsRUFBdUJDLE1BQXZCLEVBQStCQyxRQUEvQixDQUFQO0FBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGFycmF5RGlmZiA9IG5ldyBEaWZmKCk7XG5hcnJheURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc2xpY2UoKTtcbn07XG5hcnJheURpZmYuam9pbiA9IGFycmF5RGlmZi5yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQXJyYXlzKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjaykgeyByZXR1cm4gYXJyYXlEaWZmLmRpZmYob2xkQXJyLCBuZXdBcnIsIGNhbGxiYWNrKTsgfVxuIl19\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = Diff;\n\n/*istanbul ignore end*/\nfunction Diff() {}\n\nDiff.prototype = {\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n diff: function diff(oldString, newString) {\n /*istanbul ignore start*/\n var\n /*istanbul ignore end*/\n options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n this.options = options;\n var self = this;\n\n function done(value) {\n if (callback) {\n setTimeout(function () {\n callback(undefined, value);\n }, 0);\n return true;\n } else {\n return value;\n }\n } // Allow subclasses to massage the input prior to running\n\n\n oldString = this.castInput(oldString);\n newString = this.castInput(newString);\n oldString = this.removeEmpty(this.tokenize(oldString));\n newString = this.removeEmpty(this.tokenize(newString));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n\n if (options.maxEditLength) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n\n var bestPath = [{\n newPos: -1,\n components: []\n }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n // Identity per the equality and tokenizer\n return done([{\n value: this.join(newString),\n count: newString.length\n }]);\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n\n\n function execEditLength() {\n for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath =\n /*istanbul ignore start*/\n void 0\n /*istanbul ignore end*/\n ;\n\n var addPath = bestPath[diagonalPath - 1],\n removePath = bestPath[diagonalPath + 1],\n _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos + 1 < newLen,\n canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;\n\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n } // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n\n\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done\n\n if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {\n return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n } // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n\n\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength) {\n return callback();\n }\n\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n\n if (ret) {\n return ret;\n }\n }\n }\n },\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n pushComponent: function pushComponent(components, added, removed) {\n var last = components[components.length - 1];\n\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\n }\n },\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {\n var newLen = newString.length,\n oldLen = oldString.length,\n newPos = basePath.newPos,\n oldPos = newPos - diagonalPath,\n commonCount = 0;\n\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({\n count: commonCount\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n equals: function equals(left, right) {\n if (this.options.comparator) {\n return this.options.comparator(left, right);\n } else {\n return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n\n return ret;\n },\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n castInput: function castInput(value) {\n return value;\n },\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n tokenize: function tokenize(value) {\n return value.split('');\n },\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n join: function join(chars) {\n return chars.join('');\n }\n};\n\nfunction buildValues(diff, components, newString, oldString, useLongestToken) {\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n\n newPos += component.count; // Common case\n\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count; // Reverse add and remove so removes are output first to match common convention\n // The diffing algorithm is tied to add then remove output and this is the simplest\n // route to get the desired output with minimal overhead.\n\n if (componentPos && components[componentPos - 1].added) {\n var tmp = components[componentPos - 1];\n components[componentPos - 1] = components[componentPos];\n components[componentPos] = tmp;\n }\n }\n } // Special case handle for when one terminal is ignored (i.e. whitespace).\n // For this case we merge the terminal into the prior string and drop the change.\n // This is only available for string mode.\n\n\n var lastComponent = components[componentLen - 1];\n\n if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {\n components[componentLen - 2].value += lastComponent.value;\n components.pop();\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsIk1hdGgiLCJtaW4iLCJiZXN0UGF0aCIsIm5ld1BvcyIsImNvbXBvbmVudHMiLCJvbGRQb3MiLCJleHRyYWN0Q29tbW9uIiwiam9pbiIsImNvdW50IiwiZXhlY0VkaXRMZW5ndGgiLCJkaWFnb25hbFBhdGgiLCJiYXNlUGF0aCIsImFkZFBhdGgiLCJyZW1vdmVQYXRoIiwiY2FuQWRkIiwiY2FuUmVtb3ZlIiwiY2xvbmVQYXRoIiwicHVzaENvbXBvbmVudCIsImJ1aWxkVmFsdWVzIiwidXNlTG9uZ2VzdFRva2VuIiwiZXhlYyIsInJldCIsImFkZGVkIiwicmVtb3ZlZCIsImxhc3QiLCJwdXNoIiwiY29tbW9uQ291bnQiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJjb21wYXJhdG9yIiwiaWdub3JlQ2FzZSIsInRvTG93ZXJDYXNlIiwiYXJyYXkiLCJpIiwic3BsaXQiLCJjaGFycyIsImNvbXBvbmVudFBvcyIsImNvbXBvbmVudExlbiIsImNvbXBvbmVudCIsInNsaWNlIiwibWFwIiwib2xkVmFsdWUiLCJ0bXAiLCJsYXN0Q29tcG9uZW50IiwicG9wIiwicGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWUsU0FBU0EsSUFBVCxHQUFnQixDQUFFOztBQUVqQ0EsSUFBSSxDQUFDQyxTQUFMLEdBQWlCO0FBQUE7O0FBQUE7QUFDZkMsRUFBQUEsSUFEZSxnQkFDVkMsU0FEVSxFQUNDQyxTQURELEVBQzBCO0FBQUE7QUFB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R0FBMkJNLEdBQTNCO0FBQ0Q7QUFDRjtBQUNGLEdBdkMyRSxDQXlDNUU7QUFDQTtBQUNBOzs7QUFDQSxNQUFJQyxhQUFhLEdBQUd4QyxVQUFVLENBQUNrQyxZQUFZLEdBQUcsQ0FBaEIsQ0FBOUI7O0FBQ0EsTUFBSUEsWUFBWSxHQUFHLENBQWYsSUFDRyxPQUFPTSxhQUFhLENBQUN2RCxLQUFyQixLQUErQixRQURsQyxLQUVJdUQsYUFBYSxDQUFDdEIsS0FBZCxJQUF1QnNCLGFBQWEsQ0FBQ3JCLE9BRnpDLEtBR0d6QyxJQUFJLENBQUM2QyxNQUFMLENBQVksRUFBWixFQUFnQmlCLGFBQWEsQ0FBQ3ZELEtBQTlCLENBSFAsRUFHNkM7QUFDM0NlLElBQUFBLFVBQVUsQ0FBQ2tDLFlBQVksR0FBRyxDQUFoQixDQUFWLENBQTZCakQsS0FBN0IsSUFBc0N1RCxhQUFhLENBQUN2RCxLQUFwRDtBQUNBZSxJQUFBQSxVQUFVLENBQUN5QyxHQUFYO0FBQ0Q7O0FBRUQsU0FBT3pDLFVBQVA7QUFDRDs7QUFFRCxTQUFTWSxTQUFULENBQW1COEIsSUFBbkIsRUFBeUI7QUFDdkIsU0FBTztBQUFFM0MsSUFBQUEsTUFBTSxFQUFFMkMsSUFBSSxDQUFDM0MsTUFBZjtBQUF1QkMsSUFBQUEsVUFBVSxFQUFFMEMsSUFBSSxDQUFDMUMsVUFBTCxDQUFnQm9DLEtBQWhCLENBQXNCLENBQXRCO0FBQW5DLEdBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERpZmYoKSB7fVxuXG5EaWZmLnByb3RvdHlwZSA9IHtcbiAgZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZywgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNhbGxiYWNrID0gb3B0aW9ucy5jYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGxldCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIGRvbmUodmFsdWUpIHtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayh1bmRlZmluZWQsIHZhbHVlKTsgfSwgMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuICAgIG9sZFN0cmluZyA9IHRoaXMuY2FzdElucHV0KG9sZFN0cmluZyk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5jYXN0SW5wdXQobmV3U3RyaW5nKTtcblxuICAgIG9sZFN0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShvbGRTdHJpbmcpKTtcbiAgICBuZXdTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUobmV3U3RyaW5nKSk7XG5cbiAgICBsZXQgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCwgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcbiAgICBsZXQgZWRpdExlbmd0aCA9IDE7XG4gICAgbGV0IG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG4gICAgaWYob3B0aW9ucy5tYXhFZGl0TGVuZ3RoKSB7XG4gICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICB9XG5cbiAgICBsZXQgYmVzdFBhdGggPSBbeyBuZXdQb3M6IC0xLCBjb21wb25lbnRzOiBbXSB9XTtcblxuICAgIC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG4gICAgbGV0IG9sZFBvcyA9IHRoaXMuZXh0cmFjdENvbW1vbihiZXN0UGF0aFswXSwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIDApO1xuICAgIGlmIChiZXN0UGF0aFswXS5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgLy8gSWRlbnRpdHkgcGVyIHRoZSBlcXVhbGl0eSBhbmQgdG9rZW5pemVyXG4gICAgICByZXR1cm4gZG9uZShbe3ZhbHVlOiB0aGlzLmpvaW4obmV3U3RyaW5nKSwgY291bnQ6IG5ld1N0cmluZy5sZW5ndGh9XSk7XG4gICAgfVxuXG4gICAgLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuICAgIGZ1bmN0aW9uIGV4ZWNFZGl0TGVuZ3RoKCkge1xuICAgICAgZm9yIChsZXQgZGlhZ29uYWxQYXRoID0gLTEgKiBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggPD0gZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoICs9IDIpIHtcbiAgICAgICAgbGV0IGJhc2VQYXRoO1xuICAgICAgICBsZXQgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgb2xkUG9zID0gKHJlbW92ZVBhdGggPyByZW1vdmVQYXRoLm5ld1BvcyA6IDApIC0gZGlhZ29uYWxQYXRoO1xuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gb2xkUG9zICYmIG9sZFBvcyA8IG9sZExlbjtcbiAgICAgICAgaWYgKCFjYW5BZGQgJiYgIWNhblJlbW92ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgcGF0aCBpcyBhIHRlcm1pbmFsIHRoZW4gcHJ1bmVcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBkaWFnb25hbCB0aGF0IHdlIHdhbnQgdG8gYnJhbmNoIGZyb20uIFdlIHNlbGVjdCB0aGUgcHJpb3JcbiAgICAgICAgLy8gcGF0aCB3aG9zZSBwb3NpdGlvbiBpbiB0aGUgbmV3IHN0cmluZyBpcyB0aGUgZmFydGhlc3QgZnJvbSB0aGUgb3JpZ2luXG4gICAgICAgIC8vIGFuZCBkb2VzIG5vdCBwYXNzIHRoZSBib3VuZHMgb2YgdGhlIGRpZmYgZ3JhcGhcbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgKGNhblJlbW92ZSAmJiBhZGRQYXRoLm5ld1BvcyA8IHJlbW92ZVBhdGgubmV3UG9zKSkge1xuICAgICAgICAgIGJhc2VQYXRoID0gY2xvbmVQYXRoKHJlbW92ZVBhdGgpO1xuICAgICAgICAgIHNlbGYucHVzaENvbXBvbmVudChiYXNlUGF0aC5jb21wb25lbnRzLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VQYXRoID0gYWRkUGF0aDsgLy8gTm8gbmVlZCB0byBjbG9uZSwgd2UndmUgcHVsbGVkIGl0IGZyb20gdGhlIGxpc3RcbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZFBvcyA9IHNlbGYuZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCk7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCBvZiBib3RoIHN0cmluZ3MsIHRoZW4gd2UgYXJlIGRvbmVcbiAgICAgICAgaWYgKGJhc2VQYXRoLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGRvbmUoYnVpbGRWYWx1ZXMoc2VsZiwgYmFzZVBhdGguY29tcG9uZW50cywgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIHNlbGYudXNlTG9uZ2VzdFRva2VuKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHRyYWNrIHRoaXMgcGF0aCBhcyBhIHBvdGVudGlhbCBjYW5kaWRhdGUgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZGl0TGVuZ3RoKys7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgdGhlIGxlbmd0aCBvZiBlZGl0IGl0ZXJhdGlvbi4gSXMgYSBiaXQgZnVnbHkgYXMgdGhpcyBoYXMgdG8gc3VwcG9ydCB0aGVcbiAgICAvLyBzeW5jIGFuZCBhc3luYyBtb2RlIHdoaWNoIGlzIG5ldmVyIGZ1bi4gTG9vcHMgb3ZlciBleGVjRWRpdExlbmd0aCB1bnRpbCBhIHZhbHVlXG4gICAgLy8gaXMgcHJvZHVjZWQsIG9yIHVudGlsIHRoZSBlZGl0IGxlbmd0aCBleGNlZWRzIG9wdGlvbnMubWF4RWRpdExlbmd0aCAoaWYgZ2l2ZW4pLFxuICAgIC8vIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gdW5kZWZpbmVkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICBsZXQgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIGxldCBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0ICYmIGxhc3QuYWRkZWQgPT09IGFkZGVkICYmIGxhc3QucmVtb3ZlZCA9PT0gcmVtb3ZlZCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSBoZXJlIGFzIHRoZSBjb21wb25lbnQgY2xvbmUgb3BlcmF0aW9uIGlzIGp1c3RcbiAgICAgIC8vIGFzIHNoYWxsb3cgYXJyYXkgY2xvbmVcbiAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXSA9IHtjb3VudDogbGFzdC5jb3VudCArIDEsIGFkZGVkOiBhZGRlZCwgcmVtb3ZlZDogcmVtb3ZlZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnRzLnB1c2goe2NvdW50OiAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuXG4gICAgICAgIGNvbW1vbkNvdW50ID0gMDtcbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe2NvdW50OiBjb21tb25Db3VudH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuXG4gIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0XG4gICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSAmJiBsZWZ0LnRvTG93ZXJDYXNlKCkgPT09IHJpZ2h0LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlRW1wdHkoYXJyYXkpIHtcbiAgICBsZXQgcmV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycmF5W2ldKSB7XG4gICAgICAgIHJldC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgbGV0IGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICBpZiAoIWNvbXBvbmVudC5yZW1vdmVkKSB7XG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCAmJiB1c2VMb25nZXN0VG9rZW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZnVuY3Rpb24odmFsdWUsIGkpIHtcbiAgICAgICAgICBsZXQgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbih2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4obmV3U3RyaW5nLnNsaWNlKG5ld1BvcywgbmV3UG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICB9XG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuXG4gICAgICAvLyBDb21tb24gY2FzZVxuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQpIHtcbiAgICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG9sZFN0cmluZy5zbGljZShvbGRQb3MsIG9sZFBvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgb2xkUG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gUmV2ZXJzZSBhZGQgYW5kIHJlbW92ZSBzbyByZW1vdmVzIGFyZSBvdXRwdXQgZmlyc3QgdG8gbWF0Y2ggY29tbW9uIGNvbnZlbnRpb25cbiAgICAgIC8vIFRoZSBkaWZmaW5nIGFsZ29yaXRobSBpcyB0aWVkIHRvIGFkZCB0aGVuIHJlbW92ZSBvdXRwdXQgYW5kIHRoaXMgaXMgdGhlIHNpbXBsZXN0XG4gICAgICAvLyByb3V0ZSB0byBnZXQgdGhlIGRlc2lyZWQgb3V0cHV0IHdpdGggbWluaW1hbCBvdmVyaGVhZC5cbiAgICAgIGlmIChjb21wb25lbnRQb3MgJiYgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXS5hZGRlZCkge1xuICAgICAgICBsZXQgdG1wID0gY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3MgLSAxXSA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcbiAgICAgICAgY29tcG9uZW50c1tjb21wb25lbnRQb3NdID0gdG1wO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWNpYWwgY2FzZSBoYW5kbGUgZm9yIHdoZW4gb25lIHRlcm1pbmFsIGlzIGlnbm9yZWQgKGkuZS4gd2hpdGVzcGFjZSkuXG4gIC8vIEZvciB0aGlzIGNhc2Ugd2UgbWVyZ2UgdGhlIHRlcm1pbmFsIGludG8gdGhlIHByaW9yIHN0cmluZyBhbmQgZHJvcCB0aGUgY2hhbmdlLlxuICAvLyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBzdHJpbmcgbW9kZS5cbiAgbGV0IGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuICBpZiAoY29tcG9uZW50TGVuID4gMVxuICAgICAgJiYgdHlwZW9mIGxhc3RDb21wb25lbnQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpXG4gICAgICAmJiBkaWZmLmVxdWFscygnJywgbGFzdENvbXBvbmVudC52YWx1ZSkpIHtcbiAgICBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDJdLnZhbHVlICs9IGxhc3RDb21wb25lbnQudmFsdWU7XG4gICAgY29tcG9uZW50cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnRzO1xufVxuXG5mdW5jdGlvbiBjbG9uZVBhdGgocGF0aCkge1xuICByZXR1cm4geyBuZXdQb3M6IHBhdGgubmV3UG9zLCBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMCkgfTtcbn1cbiJdfQ==\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.diffChars = diffChars;\nexports.characterDiff = void 0;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./base\"))\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\nvar characterDiff = new\n/*istanbul ignore start*/\n_base\n/*istanbul ignore end*/\n[\n/*istanbul ignore start*/\n\"default\"\n/*istanbul ignore end*/\n]();\n\n/*istanbul ignore start*/\nexports.characterDiff = characterDiff;\n\n/*istanbul ignore end*/\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2NoYXJhY3Rlci5qcyJdLCJuYW1lcyI6WyJjaGFyYWN0ZXJEaWZmIiwiRGlmZiIsImRpZmZDaGFycyIsIm9sZFN0ciIsIm5ld1N0ciIsIm9wdGlvbnMiLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxhQUFhLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUF0Qjs7Ozs7O0FBQ0EsU0FBU0MsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxPQUFuQyxFQUE0QztBQUFFLFNBQU9MLGFBQWEsQ0FBQ00sSUFBZCxDQUFtQkgsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxPQUFuQyxDQUFQO0FBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykgeyByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTsgfVxuIl19\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.diffCss = diffCss;\nexports.cssDiff = void 0;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./base\"))\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\nvar cssDiff = new\n/*istanbul ignore start*/\n_base\n/*istanbul ignore end*/\n[\n/*istanbul ignore start*/\n\"default\"\n/*istanbul ignore end*/\n]();\n\n/*istanbul ignore start*/\nexports.cssDiff = cssDiff;\n\n/*istanbul ignore end*/\ncssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\n\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Nzcy5qcyJdLCJuYW1lcyI6WyJjc3NEaWZmIiwiRGlmZiIsInRva2VuaXplIiwidmFsdWUiLCJzcGxpdCIsImRpZmZDc3MiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7OztBQUVPLElBQU1BLE9BQU8sR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxDQUFKLEVBQWhCOzs7Ozs7QUFDUEQsT0FBTyxDQUFDRSxRQUFSLEdBQW1CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDakMsU0FBT0EsS0FBSyxDQUFDQyxLQUFOLENBQVksZUFBWixDQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTQyxPQUFULENBQWlCQyxNQUFqQixFQUF5QkMsTUFBekIsRUFBaUNDLFFBQWpDLEVBQTJDO0FBQUUsU0FBT1IsT0FBTyxDQUFDUyxJQUFSLENBQWFILE1BQWIsRUFBcUJDLE1BQXJCLEVBQTZCQyxRQUE3QixDQUFQO0FBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNzc0RpZmYgPSBuZXcgRGlmZigpO1xuY3NzRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvKFt7fTo7LF18XFxzKykvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ3NzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gY3NzRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.diffJson = diffJson;\nexports.canonicalize = canonicalize;\nexports.jsonDiff = void 0;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./base\"))\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_line = require(\"./line\")\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*istanbul ignore end*/\nvar objectPrototypeToString = Object.prototype.toString;\nvar jsonDiff = new\n/*istanbul ignore start*/\n_base\n/*istanbul ignore end*/\n[\n/*istanbul ignore start*/\n\"default\"\n/*istanbul ignore end*/\n](); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n\n/*istanbul ignore start*/\nexports.jsonDiff = jsonDiff;\n\n/*istanbul ignore end*/\njsonDiff.useLongestToken = true;\njsonDiff.tokenize =\n/*istanbul ignore start*/\n_line\n/*istanbul ignore end*/\n.\n/*istanbul ignore start*/\nlineDiff\n/*istanbul ignore end*/\n.tokenize;\n\njsonDiff.castInput = function (value) {\n /*istanbul ignore start*/\n var _this$options =\n /*istanbul ignore end*/\n this.options,\n undefinedReplacement = _this$options.undefinedReplacement,\n _this$options$stringi = _this$options.stringifyReplacer,\n stringifyReplacer = _this$options$stringi === void 0 ? function (k, v)\n /*istanbul ignore start*/\n {\n return (\n /*istanbul ignore end*/\n typeof v === 'undefined' ? undefinedReplacement : v\n );\n } : _this$options$stringi;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n};\n\njsonDiff.equals = function (left, right) {\n return (\n /*istanbul ignore start*/\n _base\n /*istanbul ignore end*/\n [\n /*istanbul ignore start*/\n \"default\"\n /*istanbul ignore end*/\n ].prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'))\n );\n};\n\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n} // This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\n\n\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n\n if (replacer) {\n obj = replacer(key, obj);\n }\n\n var i;\n\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n\n var canonicalizedObj;\n\n if ('[object Array]' === objectPrototypeToString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n\n if (\n /*istanbul ignore start*/\n _typeof(\n /*istanbul ignore end*/\n obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n\n var sortedKeys = [],\n _key;\n\n for (_key in obj) {\n /* istanbul ignore else */\n if (obj.hasOwnProperty(_key)) {\n sortedKeys.push(_key);\n }\n }\n\n sortedKeys.sort();\n\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n\n return canonicalizedObj;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOlsib2JqZWN0UHJvdG90eXBlVG9TdHJpbmciLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImpzb25EaWZmIiwiRGlmZiIsInVzZUxvbmdlc3RUb2tlbiIsInRva2VuaXplIiwibGluZURpZmYiLCJjYXN0SW5wdXQiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJ1bmRlZmluZWRSZXBsYWNlbWVudCIsInN0cmluZ2lmeVJlcGxhY2VyIiwiayIsInYiLCJKU09OIiwic3RyaW5naWZ5IiwiY2Fub25pY2FsaXplIiwiZXF1YWxzIiwibGVmdCIsInJpZ2h0IiwiY2FsbCIsInJlcGxhY2UiLCJkaWZmSnNvbiIsIm9sZE9iaiIsIm5ld09iaiIsImRpZmYiLCJvYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImkiLCJsZW5ndGgiLCJjYW5vbmljYWxpemVkT2JqIiwicHVzaCIsIkFycmF5IiwicG9wIiwidG9KU09OIiwic29ydGVkS2V5cyIsImhhc093blByb3BlcnR5Iiwic29ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7QUFFQSxJQUFNQSx1QkFBdUIsR0FBR0MsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxRQUFqRDtBQUdPLElBQU1DLFFBQVEsR0FBRztBQUFJQztBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQTtBQUFBQSxDQUFKLEVBQWpCLEMsQ0FDUDtBQUNBOzs7Ozs7QUFDQUQsUUFBUSxDQUFDRSxlQUFULEdBQTJCLElBQTNCO0FBRUFGLFFBQVEsQ0FBQ0csUUFBVDtBQUFvQkM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLENBQVNELFFBQTdCOztBQUNBSCxRQUFRLENBQUNLLFNBQVQsR0FBcUIsVUFBU0MsS0FB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Z0IsR0FBR1AsR0FBbkI7QUFDRDs7QUFDRCxTQUFPTyxnQkFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7bGluZURpZmZ9IGZyb20gJy4vbGluZSc7XG5cbmNvbnN0IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuXG5leHBvcnQgY29uc3QganNvbkRpZmYgPSBuZXcgRGlmZigpO1xuLy8gRGlzY3JpbWluYXRlIGJldHdlZW4gdHdvIGxpbmVzIG9mIHByZXR0eS1wcmludGVkLCBzZXJpYWxpemVkIEpTT04gd2hlcmUgb25lIG9mIHRoZW0gaGFzIGFcbi8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuanNvbkRpZmYudXNlTG9uZ2VzdFRva2VuID0gdHJ1ZTtcblxuanNvbkRpZmYudG9rZW5pemUgPSBsaW5lRGlmZi50b2tlbml6ZTtcbmpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IHt1bmRlZmluZWRSZXBsYWNlbWVudCwgc3RyaW5naWZ5UmVwbGFjZXIgPSAoaywgdikgPT4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2fSA9IHRoaXMub3B0aW9ucztcblxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlLCBudWxsLCBudWxsLCBzdHJpbmdpZnlSZXBsYWNlciksIHN0cmluZ2lmeVJlcGxhY2VyLCAnICAnKTtcbn07XG5qc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICByZXR1cm4gRGlmZi5wcm90b3R5cGUuZXF1YWxzLmNhbGwoanNvbkRpZmYsIGxlZnQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJyksIHJpZ2h0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykgeyByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7IH1cblxuLy8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG4vLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLiBBY2NlcHRzIGFuIG9wdGlvbmFsIHJlcGxhY2VyXG5leHBvcnQgZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgc3RhY2sgPSBzdGFjayB8fCBbXTtcbiAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cbiAgaWYgKHJlcGxhY2VyKSB7XG4gICAgb2JqID0gcmVwbGFjZXIoa2V5LCBvYmopO1xuICB9XG5cbiAgbGV0IGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjYW5vbmljYWxpemVkT2JqO1xuXG4gIGlmICgnW29iamVjdCBBcnJheV0nID09PSBvYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iaikpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG5ldyBBcnJheShvYmoubGVuZ3RoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG4gICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY2Fub25pY2FsaXplZE9ialtpXSA9IGNhbm9uaWNhbGl6ZShvYmpbaV0sIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrLCByZXBsYWNlciwga2V5KTtcbiAgICB9XG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgfVxuXG4gIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcbiAgICBsZXQgc29ydGVkS2V5cyA9IFtdLFxuICAgICAgICBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHNvcnRlZEtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc29ydGVkS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAga2V5ID0gc29ydGVkS2V5c1tpXTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpba2V5XSA9IGNhbm9uaWNhbGl6ZShvYmpba2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpO1xuICAgIH1cbiAgICBzdGFjay5wb3AoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG59XG4iXX0=\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.diffLines = diffLines;\nexports.diffTrimmedLines = diffTrimmedLines;\nexports.lineDiff = void 0;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./base\"))\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_params = require(\"../util/params\")\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\nvar lineDiff = new\n/*istanbul ignore start*/\n_base\n/*istanbul ignore end*/\n[\n/*istanbul ignore start*/\n\"default\"\n/*istanbul ignore end*/\n]();\n\n/*istanbul ignore start*/\nexports.lineDiff = lineDiff;\n\n/*istanbul ignore end*/\nlineDiff.tokenize = function (value) {\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/); // Ignore the final empty token that occurs if the string ends with a new line\n\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n } // Merge the content and line separators into single tokens\n\n\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n\n if (i % 2 && !this.options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n if (this.options.ignoreWhitespace) {\n line = line.trim();\n }\n\n retLines.push(line);\n }\n }\n\n return retLines;\n};\n\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\n\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options =\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _params\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n generateOptions)\n /*istanbul ignore end*/\n (callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOlsibGluZURpZmYiLCJEaWZmIiwidG9rZW5pemUiLCJ2YWx1ZSIsInJldExpbmVzIiwibGluZXNBbmROZXdsaW5lcyIsInNwbGl0IiwibGVuZ3RoIiwicG9wIiwiaSIsImxpbmUiLCJvcHRpb25zIiwibmV3bGluZUlzVG9rZW4iLCJpZ25vcmVXaGl0ZXNwYWNlIiwidHJpbSIsInB1c2giLCJkaWZmTGluZXMiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiLCJkaWZmVHJpbW1lZExpbmVzIiwiZ2VuZXJhdGVPcHRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxJQUFNQSxRQUFRLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFqQjs7Ozs7O0FBQ1BELFFBQVEsQ0FBQ0UsUUFBVCxHQUFvQixVQUFTQyxLQUFULEVBQWdCO0FBQ2xDLE1BQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsTUFDSUMsZ0JBQWdCLEdBQUdGLEtBQUssQ0FBQ0csS0FBTixDQUFZLFdBQVosQ0FEdkIsQ0FEa0MsQ0FJbEM7O0FBQ0EsTUFBSSxDQUFDRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUNFLE1BQWpCLEdBQTBCLENBQTNCLENBQXJCLEVBQW9EO0FBQ2xERixJQUFBQSxnQkFBZ0IsQ0FBQ0csR0FBakI7QUFDRCxHQVBpQyxDQVNsQzs7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSixnQkFBZ0IsQ0FBQ0UsTUFBckMsRUFBNkNFLENBQUMsRUFBOUMsRUFBa0Q7QUFDaEQsUUFBSUMsSUFBSSxHQUFHTCxnQkFBZ0IsQ0FBQ0ksQ0FBRCxDQUEzQjs7QUFFQSxRQUFJQSxDQUFDLEdBQUcsQ0FBSixJQUFTLENBQUMsS0FBS0UsT0FBTCxDQUFhQyxjQUEzQixFQUEyQztBQUN6Q1IsTUFBQUEsUUFBUSxDQUFDQSxRQUFRLENBQUNHLE1BQVQsR0FBa0IsQ0FBbkIsQ0FBUixJQUFpQ0csSUFBakM7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJLEtBQUtDLE9BQUwsQ0FBYUUsZ0JBQWpCLEVBQW1DO0FBQ2pDSCxRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ0ksSUFBTCxFQUFQO0FBQ0Q7O0FBQ0RWLE1BQUFBLFFBQVEsQ0FBQ1csSUFBVCxDQUFjTCxJQUFkO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPTixRQUFQO0FBQ0QsQ0F4QkQ7O0FBMEJPLFNBQVNZLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ0MsUUFBbkMsRUFBNkM7QUFBRSxTQUFPbkIsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QkMsUUFBOUIsQ0FBUDtBQUFpRDs7QUFDaEcsU0FBU0UsZ0JBQVQsQ0FBMEJKLE1BQTFCLEVBQWtDQyxNQUFsQyxFQUEwQ0MsUUFBMUMsRUFBb0Q7QUFDekQsTUFBSVIsT0FBTztBQUFHO0FBQUE7QUFBQTs7QUFBQVc7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQTtBQUFBLEdBQWdCSCxRQUFoQixFQUEwQjtBQUFDTixJQUFBQSxnQkFBZ0IsRUFBRTtBQUFuQixHQUExQixDQUFkO0FBQ0EsU0FBT2IsUUFBUSxDQUFDb0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QlAsT0FBOUIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbmV4cG9ydCBjb25zdCBsaW5lRGlmZiA9IG5ldyBEaWZmKCk7XG5saW5lRGlmZi50b2tlbml6ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGxldCByZXRMaW5lcyA9IFtdLFxuICAgICAgbGluZXNBbmROZXdsaW5lcyA9IHZhbHVlLnNwbGl0KC8oXFxufFxcclxcbikvKTtcblxuICAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcbiAgaWYgKCFsaW5lc0FuZE5ld2xpbmVzW2xpbmVzQW5kTmV3bGluZXMubGVuZ3RoIC0gMV0pIHtcbiAgICBsaW5lc0FuZE5ld2xpbmVzLnBvcCgpO1xuICB9XG5cbiAgLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGxpbmUgPSBsaW5lc0FuZE5ld2xpbmVzW2ldO1xuXG4gICAgaWYgKGkgJSAyICYmICF0aGlzLm9wdGlvbnMubmV3bGluZUlzVG9rZW4pIHtcbiAgICAgIHJldExpbmVzW3JldExpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSkge1xuICAgICAgICBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICB9XG4gICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRMaW5lcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7IHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmVHJpbW1lZExpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykge1xuICBsZXQgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhjYWxsYmFjaywge2lnbm9yZVdoaXRlc3BhY2U6IHRydWV9KTtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuIl19\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.diffSentences = diffSentences;\nexports.sentenceDiff = void 0;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./base\"))\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\nvar sentenceDiff = new\n/*istanbul ignore start*/\n_base\n/*istanbul ignore end*/\n[\n/*istanbul ignore start*/\n\"default\"\n/*istanbul ignore end*/\n]();\n\n/*istanbul ignore start*/\nexports.sentenceDiff = sentenceDiff;\n\n/*istanbul ignore end*/\nsentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\n\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3NlbnRlbmNlLmpzIl0sIm5hbWVzIjpbInNlbnRlbmNlRGlmZiIsIkRpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic3BsaXQiLCJkaWZmU2VudGVuY2VzIiwib2xkU3RyIiwibmV3U3RyIiwiY2FsbGJhY2siLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFHTyxJQUFNQSxZQUFZLEdBQUc7QUFBSUM7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUE7QUFBQUEsQ0FBSixFQUFyQjs7Ozs7O0FBQ1BELFlBQVksQ0FBQ0UsUUFBYixHQUF3QixVQUFTQyxLQUFULEVBQWdCO0FBQ3RDLFNBQU9BLEtBQUssQ0FBQ0MsS0FBTixDQUFZLHVCQUFaLENBQVA7QUFDRCxDQUZEOztBQUlPLFNBQVNDLGFBQVQsQ0FBdUJDLE1BQXZCLEVBQStCQyxNQUEvQixFQUF1Q0MsUUFBdkMsRUFBaUQ7QUFBRSxTQUFPUixZQUFZLENBQUNTLElBQWIsQ0FBa0JILE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ0MsUUFBbEMsQ0FBUDtBQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cblxuZXhwb3J0IGNvbnN0IHNlbnRlbmNlRGlmZiA9IG5ldyBEaWZmKCk7XG5zZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.diffWords = diffWords;\nexports.diffWordsWithSpace = diffWordsWithSpace;\nexports.wordDiff = void 0;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./base\"))\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_params = require(\"../util/params\")\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ ˇ Caron\n// - U+02D8 ˘ ˘ Breve\n// - U+02D9 ˙ ˙ Dot Above\n// - U+02DA ˚ ˚ Ring Above\n// - U+02DB ˛ ˛ Ogonek\n// - U+02DC ˜ ˜ Small Tilde\n// - U+02DD ˝ ˝ Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\nvar extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\nvar reWhitespace = /\\S/;\nvar wordDiff = new\n/*istanbul ignore start*/\n_base\n/*istanbul ignore end*/\n[\n/*istanbul ignore start*/\n\"default\"\n/*istanbul ignore end*/\n]();\n\n/*istanbul ignore start*/\nexports.wordDiff = wordDiff;\n\n/*istanbul ignore end*/\nwordDiff.equals = function (left, right) {\n if (this.options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n\n return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n};\n\nwordDiff.tokenize = function (value) {\n // All whitespace symbols except newline group into one token, each newline - in separate token\n var tokens = value.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n\n for (var i = 0; i < tokens.length - 1; i++) {\n // If we have an empty string in the next field and we have only word chars before and after, merge\n if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n tokens[i] += tokens[i + 2];\n tokens.splice(i + 1, 2);\n i--;\n }\n }\n\n return tokens;\n};\n\nfunction diffWords(oldStr, newStr, options) {\n options =\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _params\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n generateOptions)\n /*istanbul ignore end*/\n (options, {\n ignoreWhitespace: true\n });\n return wordDiff.diff(oldStr, newStr, options);\n}\n\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordDiff.diff(oldStr, newStr, options);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3dvcmQuanMiXSwibmFtZXMiOlsiZXh0ZW5kZWRXb3JkQ2hhcnMiLCJyZVdoaXRlc3BhY2UiLCJ3b3JkRGlmZiIsIkRpZmYiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJvcHRpb25zIiwiaWdub3JlQ2FzZSIsInRvTG93ZXJDYXNlIiwiaWdub3JlV2hpdGVzcGFjZSIsInRlc3QiLCJ0b2tlbml6ZSIsInZhbHVlIiwidG9rZW5zIiwic3BsaXQiLCJpIiwibGVuZ3RoIiwic3BsaWNlIiwiZGlmZldvcmRzIiwib2xkU3RyIiwibmV3U3RyIiwiZ2VuZXJhdGVPcHRpb25zIiwiZGlmZiIsImRpZmZXb3Jkc1dpdGhTcGFjZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsaUJBQWlCLEdBQUcsK0RBQTFCO0FBRUEsSUFBTUMsWUFBWSxHQUFHLElBQXJCO0FBRU8sSUFBTUMsUUFBUSxHQUFHO0FBQUlDO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBLENBQUosRUFBakI7Ozs7OztBQUNQRCxRQUFRLENBQUNFLE1BQVQsR0FBa0IsVUFBU0MsSUFBVCxFQUFlQyxLQUFmLEVBQXNCO0FBQ3RDLE1BQUksS0FBS0MsT0FBTCxDQUFhQyxVQUFqQixFQUE2QjtBQUMzQkgsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNJLFdBQUwsRUFBUDtBQUNBSCxJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0csV0FBTixFQUFSO0FBQ0Q7O0FBQ0QsU0FBT0osSUFBSSxLQUFLQyxLQUFULElBQW1CLEtBQUtDLE9BQUwsQ0FBYUcsZ0JBQWIsSUFBaUMsQ0FBQ1QsWUFBWSxDQUFDVSxJQUFiLENBQWtCTixJQUFsQixDQUFsQyxJQUE2RCxDQUFDSixZQUFZLENBQUNVLElBQWIsQ0FBa0JMLEtBQWxCLENBQXhGO0FBQ0QsQ0FORDs7QUFPQUosUUFBUSxDQUFDVSxRQUFULEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDbEM7QUFDQSxNQUFJQyxNQUFNLEdBQUdELEtBQUssQ0FBQ0UsS0FBTixDQUFZLGlDQUFaLENBQWIsQ0FGa0MsQ0FJbEM7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRixNQUFNLENBQUNHLE1BQVAsR0FBZ0IsQ0FBcEMsRUFBdUNELENBQUMsRUFBeEMsRUFBNEM7QUFDMUM7QUFDQSxRQUFJLENBQUNGLE1BQU0sQ0FBQ0UsQ0FBQyxHQUFHLENBQUwsQ0FBUCxJQUFrQkYsTUFBTSxDQUFDRSxDQUFDLEdBQUcsQ0FBTCxDQUF4QixJQUNLaEIsaUJBQWlCLENBQUNXLElBQWxCLENBQXVCRyxNQUFNLENBQUNFLENBQUQsQ0FBN0IsQ0FETCxJQUVLaEIsaUJBQWlCLENBQUNXLElBQWxCLENBQXVCRyxNQUFNLENBQUNFLENBQUMsR0FBRyxDQUFMLENBQTdCLENBRlQsRUFFZ0Q7QUFDOUNGLE1BQUFBLE1BQU0sQ0FBQ0UsQ0FBRCxDQUFOLElBQWFGLE1BQU0sQ0FBQ0UsQ0FBQyxHQUFHLENBQUwsQ0FBbkI7QUFDQUYsTUFBQUEsTUFBTSxDQUFDSSxNQUFQLENBQWNGLENBQUMsR0FBRyxDQUFsQixFQUFxQixDQUFyQjtBQUNBQSxNQUFBQSxDQUFDO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPRixNQUFQO0FBQ0QsQ0FqQkQ7O0FBbUJPLFNBQVNLLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ2QsT0FBbkMsRUFBNEM7QUFDakRBLEVBQUFBLE9BQU87QUFBRztBQUFBO0FBQUE7O0FBQUFlO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUFBO0FBQUE7QUFBQSxHQUFnQmYsT0FBaEIsRUFBeUI7QUFBQ0csSUFBQUEsZ0JBQWdCLEVBQUU7QUFBbkIsR0FBekIsQ0FBVjtBQUNBLFNBQU9SLFFBQVEsQ0FBQ3FCLElBQVQsQ0FBY0gsTUFBZCxFQUFzQkMsTUFBdEIsRUFBOEJkLE9BQTlCLENBQVA7QUFDRDs7QUFFTSxTQUFTaUIsa0JBQVQsQ0FBNEJKLE1BQTVCLEVBQW9DQyxNQUFwQyxFQUE0Q2QsT0FBNUMsRUFBcUQ7QUFDMUQsU0FBT0wsUUFBUSxDQUFDcUIsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmQsT0FBOUIsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7Z2VuZXJhdGVPcHRpb25zfSBmcm9tICcuLi91dGlsL3BhcmFtcyc7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX3NjcmlwdF9pbl9Vbmljb2RlXG4vL1xuLy8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuLy8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuLy8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG4vLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cbi8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG4vLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuLy8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG4vLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG4vLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cbi8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuLy8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuLy8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcbi8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcbi8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuLy8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcbi8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5jb25zdCBleHRlbmRlZFdvcmRDaGFycyA9IC9eW2EtekEtWlxcdXtDMH0tXFx1e0ZGfVxcdXtEOH0tXFx1e0Y2fVxcdXtGOH0tXFx1ezJDNn1cXHV7MkM4fS1cXHV7MkQ3fVxcdXsyREV9LVxcdXsyRkZ9XFx1ezFFMDB9LVxcdXsxRUZGfV0rJC91O1xuXG5jb25zdCByZVdoaXRlc3BhY2UgPSAvXFxTLztcblxuZXhwb3J0IGNvbnN0IHdvcmREaWZmID0gbmV3IERpZmYoKTtcbndvcmREaWZmLmVxdWFscyA9IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSkge1xuICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmlnaHQgPSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHJldHVybiBsZWZ0ID09PSByaWdodCB8fCAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KGxlZnQpICYmICFyZVdoaXRlc3BhY2UudGVzdChyaWdodCkpO1xufTtcbndvcmREaWZmLnRva2VuaXplID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgLy8gQWxsIHdoaXRlc3BhY2Ugc3ltYm9scyBleGNlcHQgbmV3bGluZSBncm91cCBpbnRvIG9uZSB0b2tlbiwgZWFjaCBuZXdsaW5lIC0gaW4gc2VwYXJhdGUgdG9rZW5cbiAgbGV0IHRva2VucyA9IHZhbHVlLnNwbGl0KC8oW15cXFNcXHJcXG5dK3xbKClbXFxde30nXCJcXHJcXG5dfFxcYikvKTtcblxuICAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaV0pXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaSArIDJdKSkge1xuICAgICAgdG9rZW5zW2ldICs9IHRva2Vuc1tpICsgMl07XG4gICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAyKTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3Jkc1dpdGhTcGFjZShvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG4iXX0=\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"Diff\", {\n enumerable: true,\n get: function get() {\n return _base[\"default\"];\n }\n});\nObject.defineProperty(exports, \"diffChars\", {\n enumerable: true,\n get: function get() {\n return _character.diffChars;\n }\n});\nObject.defineProperty(exports, \"diffWords\", {\n enumerable: true,\n get: function get() {\n return _word.diffWords;\n }\n});\nObject.defineProperty(exports, \"diffWordsWithSpace\", {\n enumerable: true,\n get: function get() {\n return _word.diffWordsWithSpace;\n }\n});\nObject.defineProperty(exports, \"diffLines\", {\n enumerable: true,\n get: function get() {\n return _line.diffLines;\n }\n});\nObject.defineProperty(exports, \"diffTrimmedLines\", {\n enumerable: true,\n get: function get() {\n return _line.diffTrimmedLines;\n }\n});\nObject.defineProperty(exports, \"diffSentences\", {\n enumerable: true,\n get: function get() {\n return _sentence.diffSentences;\n }\n});\nObject.defineProperty(exports, \"diffCss\", {\n enumerable: true,\n get: function get() {\n return _css.diffCss;\n }\n});\nObject.defineProperty(exports, \"diffJson\", {\n enumerable: true,\n get: function get() {\n return _json.diffJson;\n }\n});\nObject.defineProperty(exports, \"canonicalize\", {\n enumerable: true,\n get: function get() {\n return _json.canonicalize;\n }\n});\nObject.defineProperty(exports, \"diffArrays\", {\n enumerable: true,\n get: function get() {\n return _array.diffArrays;\n }\n});\nObject.defineProperty(exports, \"applyPatch\", {\n enumerable: true,\n get: function get() {\n return _apply.applyPatch;\n }\n});\nObject.defineProperty(exports, \"applyPatches\", {\n enumerable: true,\n get: function get() {\n return _apply.applyPatches;\n }\n});\nObject.defineProperty(exports, \"parsePatch\", {\n enumerable: true,\n get: function get() {\n return _parse.parsePatch;\n }\n});\nObject.defineProperty(exports, \"merge\", {\n enumerable: true,\n get: function get() {\n return _merge.merge;\n }\n});\nObject.defineProperty(exports, \"structuredPatch\", {\n enumerable: true,\n get: function get() {\n return _create.structuredPatch;\n }\n});\nObject.defineProperty(exports, \"createTwoFilesPatch\", {\n enumerable: true,\n get: function get() {\n return _create.createTwoFilesPatch;\n }\n});\nObject.defineProperty(exports, \"createPatch\", {\n enumerable: true,\n get: function get() {\n return _create.createPatch;\n }\n});\nObject.defineProperty(exports, \"convertChangesToDMP\", {\n enumerable: true,\n get: function get() {\n return _dmp.convertChangesToDMP;\n }\n});\nObject.defineProperty(exports, \"convertChangesToXML\", {\n enumerable: true,\n get: function get() {\n return _xml.convertChangesToXML;\n }\n});\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_base = _interopRequireDefault(require(\"./diff/base\"))\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_character = require(\"./diff/character\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_word = require(\"./diff/word\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_line = require(\"./diff/line\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_sentence = require(\"./diff/sentence\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_css = require(\"./diff/css\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_json = require(\"./diff/json\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_array = require(\"./diff/array\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_apply = require(\"./patch/apply\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_parse = require(\"./patch/parse\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_merge = require(\"./patch/merge\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_create = require(\"./patch/create\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_dmp = require(\"./convert/dmp\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_xml = require(\"./convert/xml\")\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBTZWUgTElDRU5TRSBmaWxlIGZvciB0ZXJtcyBvZiB1c2UgKi9cblxuLypcbiAqIFRleHQgZGlmZiBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBBUElTOlxuICogSnNEaWZmLmRpZmZDaGFyczogQ2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBkaWZmXG4gKiBKc0RpZmYuZGlmZldvcmRzOiBXb3JkIChhcyBkZWZpbmVkIGJ5IFxcYiByZWdleCkgZGlmZiB3aGljaCBpZ25vcmVzIHdoaXRlc3BhY2VcbiAqIEpzRGlmZi5kaWZmTGluZXM6IExpbmUgYmFzZWQgZGlmZlxuICpcbiAqIEpzRGlmZi5kaWZmQ3NzOiBEaWZmIHRhcmdldGVkIGF0IENTUyBjb250ZW50XG4gKlxuICogVGhlc2UgbWV0aG9kcyBhcmUgYmFzZWQgb24gdGhlIGltcGxlbWVudGF0aW9uIHByb3Bvc2VkIGluXG4gKiBcIkFuIE8oTkQpIERpZmZlcmVuY2UgQWxnb3JpdGhtIGFuZCBpdHMgVmFyaWF0aW9uc1wiIChNeWVycywgMTk4NikuXG4gKiBodHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2Mvc3VtbWFyeT9kb2k9MTAuMS4xLjQuNjkyN1xuICovXG5pbXBvcnQgRGlmZiBmcm9tICcuL2RpZmYvYmFzZSc7XG5pbXBvcnQge2RpZmZDaGFyc30gZnJvbSAnLi9kaWZmL2NoYXJhY3Rlcic7XG5pbXBvcnQge2RpZmZXb3JkcywgZGlmZldvcmRzV2l0aFNwYWNlfSBmcm9tICcuL2RpZmYvd29yZCc7XG5pbXBvcnQge2RpZmZMaW5lcywgZGlmZlRyaW1tZWRMaW5lc30gZnJvbSAnLi9kaWZmL2xpbmUnO1xuaW1wb3J0IHtkaWZmU2VudGVuY2VzfSBmcm9tICcuL2RpZmYvc2VudGVuY2UnO1xuXG5pbXBvcnQge2RpZmZDc3N9IGZyb20gJy4vZGlmZi9jc3MnO1xuaW1wb3J0IHtkaWZmSnNvbiwgY2Fub25pY2FsaXplfSBmcm9tICcuL2RpZmYvanNvbic7XG5cbmltcG9ydCB7ZGlmZkFycmF5c30gZnJvbSAnLi9kaWZmL2FycmF5JztcblxuaW1wb3J0IHthcHBseVBhdGNoLCBhcHBseVBhdGNoZXN9IGZyb20gJy4vcGF0Y2gvYXBwbHknO1xuaW1wb3J0IHtwYXJzZVBhdGNofSBmcm9tICcuL3BhdGNoL3BhcnNlJztcbmltcG9ydCB7bWVyZ2V9IGZyb20gJy4vcGF0Y2gvbWVyZ2UnO1xuaW1wb3J0IHtzdHJ1Y3R1cmVkUGF0Y2gsIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gsIGNyZWF0ZVBhdGNofSBmcm9tICcuL3BhdGNoL2NyZWF0ZSc7XG5cbmltcG9ydCB7Y29udmVydENoYW5nZXNUb0RNUH0gZnJvbSAnLi9jb252ZXJ0L2RtcCc7XG5pbXBvcnQge2NvbnZlcnRDaGFuZ2VzVG9YTUx9IGZyb20gJy4vY29udmVydC94bWwnO1xuXG5leHBvcnQge1xuICBEaWZmLFxuXG4gIGRpZmZDaGFycyxcbiAgZGlmZldvcmRzLFxuICBkaWZmV29yZHNXaXRoU3BhY2UsXG4gIGRpZmZMaW5lcyxcbiAgZGlmZlRyaW1tZWRMaW5lcyxcbiAgZGlmZlNlbnRlbmNlcyxcblxuICBkaWZmQ3NzLFxuICBkaWZmSnNvbixcblxuICBkaWZmQXJyYXlzLFxuXG4gIHN0cnVjdHVyZWRQYXRjaCxcbiAgY3JlYXRlVHdvRmlsZXNQYXRjaCxcbiAgY3JlYXRlUGF0Y2gsXG4gIGFwcGx5UGF0Y2gsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgcGFyc2VQYXRjaCxcbiAgbWVyZ2UsXG4gIGNvbnZlcnRDaGFuZ2VzVG9ETVAsXG4gIGNvbnZlcnRDaGFuZ2VzVG9YTUwsXG4gIGNhbm9uaWNhbGl6ZVxufTtcbiJdfQ==\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.applyPatch = applyPatch;\nexports.applyPatches = applyPatches;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_parse = require(\"./parse\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_distanceIterator = _interopRequireDefault(require(\"../util/distance-iterator\"))\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/*istanbul ignore end*/\nfunction applyPatch(source, uniDiff) {\n /*istanbul ignore start*/\n var\n /*istanbul ignore end*/\n options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof uniDiff === 'string') {\n uniDiff =\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _parse\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n parsePatch)\n /*istanbul ignore end*/\n (uniDiff);\n }\n\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n\n uniDiff = uniDiff[0];\n } // Apply the diff to the input\n\n\n var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent)\n /*istanbul ignore start*/\n {\n return (\n /*istanbul ignore end*/\n line === patchContent\n );\n },\n errorCount = 0,\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0,\n offset = 0,\n removeEOFNL,\n addEOFNL;\n /**\n * Checks if the hunk exactly fits on the provided location\n */\n\n\n function hunkFits(hunk, toPos) {\n for (var j = 0; j < hunk.lines.length; j++) {\n var line = hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line;\n\n if (operation === ' ' || operation === '-') {\n // Context sanity check\n if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n errorCount++;\n\n if (errorCount > fuzzFactor) {\n return false;\n }\n }\n\n toPos++;\n }\n }\n\n return true;\n } // Search best fit offsets for each hunk based on the previous ones\n\n\n for (var i = 0; i < hunks.length; i++) {\n var hunk = hunks[i],\n maxLine = lines.length - hunk.oldLines,\n localOffset = 0,\n toPos = offset + hunk.oldStart - 1;\n var iterator =\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _distanceIterator\n /*istanbul ignore end*/\n [\n /*istanbul ignore start*/\n \"default\"\n /*istanbul ignore end*/\n ])(toPos, minLine, maxLine);\n\n for (; localOffset !== undefined; localOffset = iterator()) {\n if (hunkFits(hunk, toPos + localOffset)) {\n hunk.offset = offset += localOffset;\n break;\n }\n }\n\n if (localOffset === undefined) {\n return false;\n } // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n\n\n minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n } // Apply patch hunks\n\n\n var diffOffset = 0;\n\n for (var _i = 0; _i < hunks.length; _i++) {\n var _hunk = hunks[_i],\n _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;\n\n diffOffset += _hunk.newLines - _hunk.oldLines;\n\n for (var j = 0; j < _hunk.lines.length; j++) {\n var line = _hunk.lines[j],\n operation = line.length > 0 ? line[0] : ' ',\n content = line.length > 0 ? line.substr(1) : line,\n delimiter = _hunk.linedelimiters[j];\n\n if (operation === ' ') {\n _toPos++;\n } else if (operation === '-') {\n lines.splice(_toPos, 1);\n delimiters.splice(_toPos, 1);\n /* istanbul ignore else */\n } else if (operation === '+') {\n lines.splice(_toPos, 0, content);\n delimiters.splice(_toPos, 0, delimiter);\n _toPos++;\n } else if (operation === '\\\\') {\n var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n\n if (previousOperation === '+') {\n removeEOFNL = true;\n } else if (previousOperation === '-') {\n addEOFNL = true;\n }\n }\n }\n } // Handle EOFNL insertion/removal\n\n\n if (removeEOFNL) {\n while (!lines[lines.length - 1]) {\n lines.pop();\n delimiters.pop();\n }\n } else if (addEOFNL) {\n lines.push('');\n delimiters.push('\\n');\n }\n\n for (var _k = 0; _k < lines.length - 1; _k++) {\n lines[_k] = lines[_k] + delimiters[_k];\n }\n\n return lines.join('');\n} // Wrapper that supports multiple file patches via callbacks.\n\n\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff =\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _parse\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n parsePatch)\n /*istanbul ignore end*/\n (uniDiff);\n }\n\n var currentIndex = 0;\n\n function processIndex() {\n var index = uniDiff[currentIndex++];\n\n if (!index) {\n return options.complete();\n }\n\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n\n processIndex();\n });\n });\n }\n\n processIndex();\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6WyJhcHBseVBhdGNoIiwic291cmNlIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJwYXJzZVBhdGNoIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiRXJyb3IiLCJsaW5lcyIsInNwbGl0IiwiZGVsaW1pdGVycyIsIm1hdGNoIiwiaHVua3MiLCJjb21wYXJlTGluZSIsImxpbmVOdW1iZXIiLCJsaW5lIiwib3BlcmF0aW9uIiwicGF0Y2hDb250ZW50IiwiZXJyb3JDb3VudCIsImZ1enpGYWN0b3IiLCJtaW5MaW5lIiwib2Zmc2V0IiwicmVtb3ZlRU9GTkwiLCJhZGRFT0ZOTCIsImh1bmtGaXRzIiwiaHVuayIsInRvUG9zIiwiaiIsImNvbnRlbnQiLCJzdWJzdHIiLCJpIiwibWF4TGluZSIsIm9sZExpbmVzIiwibG9jYWxPZmZzZXQiLCJvbGRTdGFydCIsIml0ZXJhdG9yIiwiZGlzdGFuY2VJdGVyYXRvciIsInVuZGVmaW5lZCIsImRpZmZPZmZzZXQiLCJuZXdMaW5lcyIsImRlbGltaXRlciIsImxpbmVkZWxpbWl0ZXJzIiwic3BsaWNlIiwicHJldmlvdXNPcGVyYXRpb24iLCJwb3AiLCJwdXNoIiwiX2siLCJqb2luIiwiYXBwbHlQYXRjaGVzIiwiY3VycmVudEluZGV4IiwicHJvY2Vzc0luZGV4IiwiaW5kZXgiLCJjb21wbGV0ZSIsImxvYWRGaWxlIiwiZXJyIiwiZGF0YSIsInVwZGF0ZWRDb250ZW50IiwicGF0Y2hlZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFFTyxTQUFTQSxVQUFULENBQW9CQyxNQUFwQixFQUE0QkMsT0FBNUIsRUFBbUQ7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJOztBQUN4RCxNQUFJLE9BQU9ELE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7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QUNEOztBQUVELE1BQUlnRCxZQUFZLEdBQUcsQ0FBbkI7O0FBQ0EsV0FBU0MsWUFBVCxHQUF3QjtBQUN0QixRQUFJQyxLQUFLLEdBQUdsRCxPQUFPLENBQUNnRCxZQUFZLEVBQWIsQ0FBbkI7O0FBQ0EsUUFBSSxDQUFDRSxLQUFMLEVBQVk7QUFDVixhQUFPakQsT0FBTyxDQUFDa0QsUUFBUixFQUFQO0FBQ0Q7O0FBRURsRCxJQUFBQSxPQUFPLENBQUNtRCxRQUFSLENBQWlCRixLQUFqQixFQUF3QixVQUFTRyxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDMUMsVUFBSUQsR0FBSixFQUFTO0FBQ1AsZUFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFRCxVQUFJRSxjQUFjLEdBQUd6RCxVQUFVLENBQUN3RCxJQUFELEVBQU9KLEtBQVAsRUFBY2pELE9BQWQsQ0FBL0I7QUFDQUEsTUFBQUEsT0FBTyxDQUFDdUQsT0FBUixDQUFnQk4sS0FBaEIsRUFBdUJLLGNBQXZCLEVBQXVDLFVBQVNGLEdBQVQsRUFBYztBQUNuRCxZQUFJQSxHQUFKLEVBQVM7QUFDUCxpQkFBT3BELE9BQU8sQ0FBQ2tELFFBQVIsQ0FBaUJFLEdBQWpCLENBQVA7QUFDRDs7QUFFREosUUFBQUEsWUFBWTtBQUNiLE9BTkQ7QUFPRCxLQWJEO0FBY0Q7O0FBQ0RBLEVBQUFBLFlBQVk7QUFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5pbXBvcnQgZGlzdGFuY2VJdGVyYXRvciBmcm9tICcuLi91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIGlucHV0XG4gIGxldCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgKChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgPT4gbGluZSA9PT0gcGF0Y2hDb250ZW50KSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuXG4gICAgICByZW1vdmVFT0ZOTCxcbiAgICAgIGFkZEVPRk5MO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSAobGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyksXG4gICAgICAgICAgY29udGVudCA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUpO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcbiAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b1BvcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcblxuICAgIGxldCBpdGVyYXRvciA9IGRpc3RhbmNlSXRlcmF0b3IodG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuXG4gICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG4gICAgICAgIGh1bmsub2Zmc2V0ID0gb2Zmc2V0ICs9IGxvY2FsT2Zmc2V0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcbiAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIC8vIEFwcGx5IHBhdGNoIGh1bmtzXG4gIGxldCBkaWZmT2Zmc2V0ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIHRvUG9zID0gaHVuay5vbGRTdGFydCArIGh1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG4gICAgZGlmZk9mZnNldCArPSBodW5rLm5ld0xpbmVzIC0gaHVuay5vbGRMaW5lcztcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnKSxcbiAgICAgICAgICBjb250ZW50ID0gKGxpbmUubGVuZ3RoID4gMCA/IGxpbmUuc3Vic3RyKDEpIDogbGluZSksXG4gICAgICAgICAgZGVsaW1pdGVyID0gaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAxKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMCwgY29udGVudCk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBsZXQgcHJldmlvdXNPcGVyYXRpb24gPSBodW5rLmxpbmVzW2ogLSAxXSA/IGh1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcbiAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuICBmb3IgKGxldCBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbn1cblxuLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByb2Nlc3NJbmRleCgpO1xufVxuIl19\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.structuredPatch = structuredPatch;\nexports.formatPatch = formatPatch;\nexports.createTwoFilesPatch = createTwoFilesPatch;\nexports.createPatch = createPatch;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_line = require(\"../diff/line\")\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*istanbul ignore end*/\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n\n var diff =\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _line\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n diffLines)\n /*istanbul ignore end*/\n (oldStr, newStr, options);\n\n if (!diff) {\n return;\n }\n\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n\n /*istanbul ignore start*/\n var _loop = function _loop(\n /*istanbul ignore end*/\n i) {\n var current = diff[i],\n lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n current.lines = lines;\n\n if (current.added || current.removed) {\n /*istanbul ignore start*/\n var _curRange;\n\n /*istanbul ignore end*/\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n } // Output our changes\n\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_curRange =\n /*istanbul ignore end*/\n curRange).push.apply(\n /*istanbul ignore start*/\n _curRange\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n }))); // Track the updated file position\n\n\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n /*istanbul ignore start*/\n var _curRange2;\n\n /*istanbul ignore end*/\n // Overlapping\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_curRange2 =\n /*istanbul ignore end*/\n curRange).push.apply(\n /*istanbul ignore start*/\n _curRange2\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n contextLines(lines)));\n } else {\n /*istanbul ignore start*/\n var _curRange3;\n\n /*istanbul ignore end*/\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_curRange3 =\n /*istanbul ignore end*/\n curRange).push.apply(\n /*istanbul ignore start*/\n _curRange3\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n contextLines(lines.slice(0, contextSize))));\n\n var hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n\n if (i >= diff.length - 2 && lines.length <= options.context) {\n // EOF is inside this hunk\n var oldEOFNewline = /\\n$/.test(oldStr);\n var newEOFNewline = /\\n$/.test(newStr);\n var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;\n\n if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {\n // special case: old has no eol and no trailing context; no-nl can end up before adds\n // however, if the old file is empty, do not output the no-nl line\n curRange.splice(hunk.oldLines, 0, '\\\\ No newline at end of file');\n }\n\n if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {\n curRange.push('\\\\ No newline at end of file');\n }\n }\n\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n\n for (var i = 0; i < diff.length; i++) {\n /*istanbul ignore start*/\n _loop(\n /*istanbul ignore end*/\n i);\n }\n\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n}\n\nfunction formatPatch(diff) {\n var ret = [];\n\n if (diff.oldFileName == diff.newFileName) {\n ret.push('Index: ' + diff.oldFileName);\n }\n\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n\n return ret.join('\\n') + '\\n';\n}\n\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));\n}\n\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsInJldCIsImFwcGx5Iiwiam9pbiIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtBQTJCLFdBQS9CLEVBQTRDO0FB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IHtkaWZmTGluZXN9IGZyb20gJy4uL2RpZmYvbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgaWYoIWRpZmYpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkaWZmLnB1c2goe3ZhbHVlOiAnJywgbGluZXM6IFtdfSk7IC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkgeyByZXR1cm4gJyAnICsgZW50cnk7IH0pO1xuICB9XG5cbiAgbGV0IGh1bmtzID0gW107XG4gIGxldCBvbGRSYW5nZVN0YXJ0ID0gMCwgbmV3UmFuZ2VTdGFydCA9IDAsIGN1clJhbmdlID0gW10sXG4gICAgICBvbGRMaW5lID0gMSwgbmV3TGluZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gZGlmZltpIC0gMV07XG4gICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgY3VyUmFuZ2UucHVzaCguLi4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIGxldCBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSk7XG5cbiAgICAgICAgICBsZXQgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IChvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgbmV3TGluZXM6IChuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG4gICAgICAgICAgICBsZXQgb2xkRU9GTmV3bGluZSA9ICgoL1xcbiQvKS50ZXN0KG9sZFN0cikpO1xuICAgICAgICAgICAgbGV0IG5ld0VPRk5ld2xpbmUgPSAoKC9cXG4kLykudGVzdChuZXdTdHIpKTtcbiAgICAgICAgICAgIGxldCBub05sQmVmb3JlQWRkcyA9IGxpbmVzLmxlbmd0aCA9PSAwICYmIGN1clJhbmdlLmxlbmd0aCA+IGh1bmsub2xkTGluZXM7XG4gICAgICAgICAgICBpZiAoIW9sZEVPRk5ld2xpbmUgJiYgbm9ObEJlZm9yZUFkZHMgJiYgb2xkU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBvbGQgaGFzIG5vIGVvbCBhbmQgbm8gdHJhaWxpbmcgY29udGV4dDsgbm8tbmwgY2FuIGVuZCB1cCBiZWZvcmUgYWRkc1xuICAgICAgICAgICAgICAvLyBob3dldmVyLCBpZiB0aGUgb2xkIGZpbGUgaXMgZW1wdHksIGRvIG5vdCBvdXRwdXQgdGhlIG5vLW5sIGxpbmVcbiAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoIW9sZEVPRk5ld2xpbmUgJiYgIW5vTmxCZWZvcmVBZGRzKSB8fCAhbmV3RU9GTmV3bGluZSkge1xuICAgICAgICAgICAgICBjdXJSYW5nZS5wdXNoKCdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaHVua3MucHVzaChodW5rKTtcblxuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgPSAwO1xuICAgICAgICAgIGN1clJhbmdlID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lOiBuZXdGaWxlTmFtZSxcbiAgICBvbGRIZWFkZXI6IG9sZEhlYWRlciwgbmV3SGVhZGVyOiBuZXdIZWFkZXIsXG4gICAgaHVua3M6IGh1bmtzXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRjaChkaWZmKSB7XG4gIGNvbnN0IHJldCA9IFtdO1xuICBpZiAoZGlmZi5vbGRGaWxlTmFtZSA9PSBkaWZmLm5ld0ZpbGVOYW1lKSB7XG4gICAgcmV0LnB1c2goJ0luZGV4OiAnICsgZGlmZi5vbGRGaWxlTmFtZSk7XG4gIH1cbiAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG4gIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGh1bmsgPSBkaWZmLmh1bmtzW2ldO1xuICAgIC8vIFVuaWZpZWQgRGlmZiBGb3JtYXQgcXVpcms6IElmIHRoZSBjaHVuayBzaXplIGlzIDAsXG4gICAgLy8gdGhlIGZpcnN0IG51bWJlciBpcyBvbmUgbG93ZXIgdGhhbiBvbmUgd291bGQgZXhwZWN0LlxuICAgIC8vIGh0dHBzOi8vd3d3LmFydGltYS5jb20vd2VibG9ncy92aWV3cG9zdC5qc3A/dGhyZWFkPTE2NDI5M1xuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0IC09IDE7XG4gICAgfVxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuICAgIHJldC5wdXNoKFxuICAgICAgJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXNcbiAgICAgICsgJyArJyArIGh1bmsubmV3U3RhcnQgKyAnLCcgKyBodW5rLm5ld0xpbmVzXG4gICAgICArICcgQEAnXG4gICAgKTtcbiAgICByZXQucHVzaC5hcHBseShyZXQsIGh1bmsubGluZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJldC5qb2luKCdcXG4nKSArICdcXG4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0UGF0Y2goc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRjaChmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVUd29GaWxlc1BhdGNoKGZpbGVOYW1lLCBmaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcbn1cbiJdfQ==\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.calcLineCount = calcLineCount;\nexports.merge = merge;\n\n/*istanbul ignore end*/\nvar\n/*istanbul ignore start*/\n_create = require(\"./create\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_parse = require(\"./parse\")\n/*istanbul ignore end*/\n;\n\nvar\n/*istanbul ignore start*/\n_array = require(\"../util/array\")\n/*istanbul ignore end*/\n;\n\n/*istanbul ignore start*/ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*istanbul ignore end*/\nfunction calcLineCount(hunk) {\n /*istanbul ignore start*/\n var _calcOldNewLineCount =\n /*istanbul ignore end*/\n calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\n\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n\n return ret;\n}\n\nfunction loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return (\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _parse\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n parsePatch)\n /*istanbul ignore end*/\n (param)[0]\n );\n }\n\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n\n return (\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _create\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n structuredPatch)\n /*istanbul ignore end*/\n (undefined, undefined, base, param)\n );\n }\n\n return param;\n}\n\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\n\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\n\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\n\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\n\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n }; // Handle any leading content\n\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.\n\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n /*istanbul ignore start*/\n var _hunk$lines;\n\n /*istanbul ignore end*/\n // Mine inserted\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_hunk$lines =\n /*istanbul ignore end*/\n hunk.lines).push.apply(\n /*istanbul ignore start*/\n _hunk$lines\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n /*istanbul ignore start*/\n var _hunk$lines2;\n\n /*istanbul ignore end*/\n // Theirs inserted\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_hunk$lines2 =\n /*istanbul ignore end*/\n hunk.lines).push.apply(\n /*istanbul ignore start*/\n _hunk$lines2\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n } // Now push anything that may be remaining\n\n\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\n\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _array\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n arrayStartsWith)\n /*istanbul ignore end*/\n (myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n /*istanbul ignore start*/\n var _hunk$lines3;\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_hunk$lines3 =\n /*istanbul ignore end*/\n hunk.lines).push.apply(\n /*istanbul ignore start*/\n _hunk$lines3\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n myChanges));\n\n return;\n } else if (\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _array\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n arrayStartsWith)\n /*istanbul ignore end*/\n (theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n /*istanbul ignore start*/\n var _hunk$lines4;\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_hunk$lines4 =\n /*istanbul ignore end*/\n hunk.lines).push.apply(\n /*istanbul ignore start*/\n _hunk$lines4\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n theirChanges));\n\n return;\n }\n } else if (\n /*istanbul ignore start*/\n (0,\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n _array\n /*istanbul ignore end*/\n .\n /*istanbul ignore start*/\n arrayEqual)\n /*istanbul ignore end*/\n (myChanges, theirChanges)) {\n /*istanbul ignore start*/\n var _hunk$lines5;\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_hunk$lines5 =\n /*istanbul ignore end*/\n hunk.lines).push.apply(\n /*istanbul ignore start*/\n _hunk$lines5\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n myChanges));\n\n return;\n }\n\n conflict(hunk, myChanges, theirChanges);\n}\n\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n\n if (theirChanges.merged) {\n /*istanbul ignore start*/\n var _hunk$lines6;\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n\n /*istanbul ignore end*/\n\n /*istanbul ignore start*/\n (_hunk$lines6 =\n /*istanbul ignore end*/\n hunk.lines).push.apply(\n /*istanbul ignore start*/\n _hunk$lines6\n /*istanbul ignore end*/\n ,\n /*istanbul ignore start*/\n _toConsumableArray(\n /*istanbul ignore end*/\n theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\n\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\n\nfunction insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\n\nfunction insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\n\nfunction collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n\n while (state.index < state.lines.length) {\n var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n\n return ret;\n}\n\nfunction collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex]; // Once we've hit our add, then we are done\n\n if (match[0] === '+') {\n break;\n }\n\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++; // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n\n if (change[0] === '+') {\n conflicted = true;\n\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n\n if (conflicted) {\n return changes;\n }\n\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n\n return {\n merged: merged,\n changes: changes\n };\n}\n\nfunction allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n}\n\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n\n state.index += delta;\n return true;\n}\n\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9tZXJnZS5qcyJdLCJuYW1lcyI6WyJjYWxjTGluZUNvdW50IiwiaHVuayIsImNhbGNPbGROZXdMaW5lQ291bnQiLCJsaW5lcyIsIm9sZExpbmVzIiwibmV3TGluZXMiLCJ1bmRlZmluZWQiLCJtZXJnZSIsIm1pbmUiLCJ0aGVpcnMiLCJiYXNlIiwibG9hZFBhdGNoIiwicmV0IiwiaW5kZXgiLCJuZXdGaWxlTmFtZSIsImZpbGVOYW1lQ2hhbmdlZCIsIm9sZEZpbGVOYW1lIiwib2xkSGVhZGVyIiwibmV3SGVhZGVyIiwic2VsZWN0RmllbGQiLCJodW5rcyIsIm1pbmVJbmRleCIsInRoZWlyc0luZGV4IiwibWluZU9mZnNldCIsInRoZWlyc09mZnNldCIsImxlbmd0aCIsIm1pbmVDdXJyZW50Iiwib2xkU3RhcnQiLCJJbmZpbml0eSIsInRoZWlyc0N1cnJlbnQiLCJodW5rQmVmb3JlIiwicHVzaCIsImNsb25lSHVuayIsIm1lcmdlZEh1bmsiLCJNYXRoIiwibWluIiwibmV3U3RhcnQiLCJtZXJnZUxpbmVzIiwicGFyYW0iLCJ0ZXN0IiwicGFyc2VQYXRjaCIsIkVycm9yIiwic3RydWN0dXJlZFBhdGNoIiwicGF0Y2giLCJjb25mbGljdCIsImNoZWNrIiwib2Zmc2V0IiwibWluZUxpbmVzIiwidGhlaXJPZmZzZXQiLCJ0aGVpckxpbmVzIiwidGhlaXIiLCJpbnNlcnRMZWFkaW5nIiwidGhlaXJDdXJyZW50IiwibXV0dWFsQ2hhbmdlIiwiY29sbGVjdENoYW5nZSIsInJlbW92YWwiLCJpbnNlcnRUcmFpbGluZyIsIm15Q2hhbmdlcyIsInRoZWlyQ2hhbmdlcyIsImFsbFJlbW92ZXMiLCJhcnJheVN0YXJ0c1dpdGgiLCJza2lwUmVtb3ZlU3VwZXJzZXQiLCJhcnJheUVxdWFsIiwic3dhcCIsImNvbGxlY3RDb250ZXh0IiwibWVyZ2VkIiwiaW5zZXJ0IiwibGluZSIsInN0YXRlIiwib3BlcmF0aW9uIiwibWF0Y2hDaGFuZ2VzIiwiY2hhbmdlcyIsIm1hdGNoSW5kZXgiLCJjb250ZXh0Q2hhbmdlcyIsImNvbmZsaWN0ZWQiLCJjaGFuZ2UiLCJtYXRjaCIsInN1YnN0ciIsInJlZHVjZSIsInByZXYiLCJyZW1vdmVDaGFuZ2VzIiwiZGVsdGEiLCJpIiwiY2hhbmdlQ29udGVudCIsImZvckVhY2giLCJteUNvdW50IiwidGhlaXJDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxhQUFULENBQXVCQyxJQUF2QixFQUE2QjtBQUFBO0FBQUE7QUFBQTtBQUNMQyxFQUFBQSxtQkFBbUIsQ0FBQ0QsSUFBSSxDQUFDRSxLQUFOLENBRGQ7QUFBQSxNQUMzQkMsUUFEMkIsd0JBQzNCQSxRQUQyQjtBQUFBLE1BQ2pCQyxRQURpQix3QkFDakJBLFFBRGlCOztBQUdsQyxNQUFJRCxRQUFRLEtBQUtFLFNBQWpCLEVBQTRCO0FBQzFCTCxJQUFBQSxJQUFJLENBQUNHLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0QsR0FGRCxNQUVPO0FBQ0wsV0FBT0gsSUFBSSxDQUFDRyxRQUFaO0FBQ0Q7O0FBRUQsTUFBSUMsUUFBUSxLQUFLQyxTQUFqQixFQUE0QjtBQUMxQkwsSUFBQUEsSUFBSSxDQUFDSSxRQUFMLEdBQWdCQSxRQUFoQjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9KLElBQUksQ0FBQ0ksUUFBWjtBQUNEO0FBQ0Y7O0FBRU0sU0FBU0UsS0FBVCxDQUFlQyxJQUFmLEVBQXFCQyxNQUFyQixFQUE2QkMsSUFBN0IsRUFBbUM7QUFDeENGLEVBQUFBLElBQUksR0FBR0csU0FBUyxDQUFDSCxJQUFELEVBQU9FLElBQVAsQ0FBaEI7QUFDQUQsRUFBQUEsTUFBTSxHQUFHRSxTQUFTLENBQUNGLE1BQUQsRUFBU0MsSUFBVCxDQUFsQjtBQUVBLE1BQUlFLEdBQUcsR0FBRyxFQUFWLENBSndD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QUFKLEVBQW9FO0FBQ2xFL0QsUUFBQUEsUUFBUTtBQUNUO0FBQ0Y7QUFDRixHQTVCRDtBQThCQSxTQUFPO0FBQUNBLElBQUFBLFFBQVEsRUFBUkEsUUFBRDtBQUFXQyxJQUFBQSxRQUFRLEVBQVJBO0FBQVgsR0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtzdHJ1Y3R1cmVkUGF0Y2h9IGZyb20gJy4vY3JlYXRlJztcbmltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5cbmltcG9ydCB7YXJyYXlFcXVhbCwgYXJyYXlTdGFydHNXaXRofSBmcm9tICcuLi91dGlsL2FycmF5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGNMaW5lQ291bnQoaHVuaykge1xuICBjb25zdCB7b2xkTGluZXMsIG5ld0xpbmVzfSA9IGNhbGNPbGROZXdMaW5lQ291bnQoaHVuay5saW5lcyk7XG5cbiAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBodW5rLm9sZExpbmVzID0gb2xkTGluZXM7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gIH1cblxuICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5uZXdMaW5lcztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG4gIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuXG4gIGxldCByZXQgPSB7fTtcblxuICAvLyBGb3IgaW5kZXggd2UganVzdCBsZXQgaXQgcGFzcyB0aHJvdWdoIGFzIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgbmVjZXNzYXJ5IG1lYW5pbmcuXG4gIC8vIExlYXZpbmcgc2FuaXR5IGNoZWNrcyBvbiB0aGlzIHRvIHRoZSBBUEkgY29uc3VtZXIgdGhhdCBtYXkga25vdyBtb3JlIGFib3V0IHRoZVxuICAvLyBtZWFuaW5nIGluIHRoZWlyIG93biBjb250ZXh0LlxuICBpZiAobWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXgpIHtcbiAgICByZXQuaW5kZXggPSBtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleDtcbiAgfVxuXG4gIGlmIChtaW5lLm5ld0ZpbGVOYW1lIHx8IHRoZWlycy5uZXdGaWxlTmFtZSkge1xuICAgIGlmICghZmlsZU5hbWVDaGFuZ2VkKG1pbmUpKSB7XG4gICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIG91cnMsIHVzZSB0aGVpcnMgKGFuZCBvdXJzIGlmIHRoZWlycyBkb2VzIG5vdCBleGlzdClcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHRoZWlycy5vbGRGaWxlTmFtZSB8fCBtaW5lLm9sZEZpbGVOYW1lO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gdGhlaXJzLm5ld0ZpbGVOYW1lIHx8IG1pbmUubmV3RmlsZU5hbWU7XG4gICAgICByZXQub2xkSGVhZGVyID0gdGhlaXJzLm9sZEhlYWRlciB8fCBtaW5lLm9sZEhlYWRlcjtcbiAgICAgIHJldC5uZXdIZWFkZXIgPSB0aGVpcnMubmV3SGVhZGVyIHx8IG1pbmUubmV3SGVhZGVyO1xuICAgIH0gZWxzZSBpZiAoIWZpbGVOYW1lQ2hhbmdlZCh0aGVpcnMpKSB7XG4gICAgICAvLyBObyBoZWFkZXIgb3Igbm8gY2hhbmdlIGluIHRoZWlycywgdXNlIG91cnNcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSBtaW5lLm5ld0ZpbGVOYW1lO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IG1pbmUub2xkSGVhZGVyO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IG1pbmUubmV3SGVhZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCb3RoIGNoYW5nZWQuLi4gZmlndXJlIGl0IG91dFxuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEZpbGVOYW1lLCB0aGVpcnMub2xkRmlsZU5hbWUpO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0ZpbGVOYW1lLCB0aGVpcnMubmV3RmlsZU5hbWUpO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRIZWFkZXIsIHRoZWlycy5vbGRIZWFkZXIpO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdIZWFkZXIsIHRoZWlycy5uZXdIZWFkZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldC5odW5rcyA9IFtdO1xuXG4gIGxldCBtaW5lSW5kZXggPSAwLFxuICAgICAgdGhlaXJzSW5kZXggPSAwLFxuICAgICAgbWluZU9mZnNldCA9IDAsXG4gICAgICB0aGVpcnNPZmZzZXQgPSAwO1xuXG4gIHdoaWxlIChtaW5lSW5kZXggPCBtaW5lLmh1bmtzLmxlbmd0aCB8fCB0aGVpcnNJbmRleCA8IHRoZWlycy5odW5rcy5sZW5ndGgpIHtcbiAgICBsZXQgbWluZUN1cnJlbnQgPSBtaW5lLmh1bmtzW21pbmVJbmRleF0gfHwge29sZFN0YXJ0OiBJbmZpbml0eX0sXG4gICAgICAgIHRoZWlyc0N1cnJlbnQgPSB0aGVpcnMuaHVua3NbdGhlaXJzSW5kZXhdIHx8IHtvbGRTdGFydDogSW5maW5pdHl9O1xuXG4gICAgaWYgKGh1bmtCZWZvcmUobWluZUN1cnJlbnQsIHRoZWlyc0N1cnJlbnQpKSB7XG4gICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKG1pbmVDdXJyZW50LCBtaW5lT2Zmc2V0KSk7XG4gICAgICBtaW5lSW5kZXgrKztcbiAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuICAgIH0gZWxzZSBpZiAoaHVua0JlZm9yZSh0aGVpcnNDdXJyZW50LCBtaW5lQ3VycmVudCkpIHtcbiAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG4gICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZU9mZnNldCArPSB0aGVpcnNDdXJyZW50Lm5ld0xpbmVzIC0gdGhlaXJzQ3VycmVudC5vbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3ZlcmxhcCwgbWVyZ2UgYXMgYmVzdCB3ZSBjYW5cbiAgICAgIGxldCBtZXJnZWRIdW5rID0ge1xuICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuICAgICAgICBvbGRMaW5lczogMCxcbiAgICAgICAgbmV3U3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm5ld1N0YXJ0ICsgbWluZU9mZnNldCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCArIHRoZWlyc09mZnNldCksXG4gICAgICAgIG5ld0xpbmVzOiAwLFxuICAgICAgICBsaW5lczogW11cbiAgICAgIH07XG4gICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZUluZGV4Kys7XG5cbiAgICAgIHJldC5odW5rcy5wdXNoKG1lcmdlZEh1bmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGxvYWRQYXRjaChwYXJhbSwgYmFzZSkge1xuICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgIGlmICgoL15AQC9tKS50ZXN0KHBhcmFtKSB8fCAoKC9eSW5kZXg6L20pLnRlc3QocGFyYW0pKSkge1xuICAgICAgcmV0dXJuIHBhcnNlUGF0Y2gocGFyYW0pWzBdO1xuICAgIH1cblxuICAgIGlmICghYmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBiYXNlIHJlZmVyZW5jZSBvciBwYXNzIGluIGEgcGF0Y2gnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRQYXRjaCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZSwgcGFyYW0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtO1xufVxuXG5mdW5jdGlvbiBmaWxlTmFtZUNoYW5nZWQocGF0Y2gpIHtcbiAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RmllbGQoaW5kZXgsIG1pbmUsIHRoZWlycykge1xuICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG4gICAgcmV0dXJuIG1pbmU7XG4gIH0gZWxzZSB7XG4gICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuICAgIHJldHVybiB7bWluZSwgdGhlaXJzfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBodW5rQmVmb3JlKHRlc3QsIGNoZWNrKSB7XG4gIHJldHVybiB0ZXN0Lm9sZFN0YXJ0IDwgY2hlY2sub2xkU3RhcnRcbiAgICAmJiAodGVzdC5vbGRTdGFydCArIHRlc3Qub2xkTGluZXMpIDwgY2hlY2sub2xkU3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGNsb25lSHVuayhodW5rLCBvZmZzZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBvbGRTdGFydDogaHVuay5vbGRTdGFydCwgb2xkTGluZXM6IGh1bmsub2xkTGluZXMsXG4gICAgbmV3U3RhcnQ6IGh1bmsubmV3U3RhcnQgKyBvZmZzZXQsIG5ld0xpbmVzOiBodW5rLm5ld0xpbmVzLFxuICAgIGxpbmVzOiBodW5rLmxpbmVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlTGluZXMoaHVuaywgbWluZU9mZnNldCwgbWluZUxpbmVzLCB0aGVpck9mZnNldCwgdGhlaXJMaW5lcykge1xuICAvLyBUaGlzIHdpbGwgZ2VuZXJhbGx5IHJlc3VsdCBpbiBhIGNvbmZsaWN0ZWQgaHVuaywgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgY29udGV4dFxuICAvLyBpcyB0aGUgb25seSBvdmVybGFwIHdoZXJlIHdlIGNhbiBzdWNjZXNzZnVsbHkgbWVyZ2UgdGhlIGNvbnRlbnQgaGVyZS5cbiAgbGV0IG1pbmUgPSB7b2Zmc2V0OiBtaW5lT2Zmc2V0LCBsaW5lczogbWluZUxpbmVzLCBpbmRleDogMH0sXG4gICAgICB0aGVpciA9IHtvZmZzZXQ6IHRoZWlyT2Zmc2V0LCBsaW5lczogdGhlaXJMaW5lcywgaW5kZXg6IDB9O1xuXG4gIC8vIEhhbmRsZSBhbnkgbGVhZGluZyBjb250ZW50XG4gIGluc2VydExlYWRpbmcoaHVuaywgbWluZSwgdGhlaXIpO1xuICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTtcblxuICAvLyBOb3cgaW4gdGhlIG92ZXJsYXAgY29udGVudC4gU2NhbiB0aHJvdWdoIGFuZCBzZWxlY3QgdGhlIGJlc3QgY2hhbmdlcyBmcm9tIGVhY2guXG4gIHdoaWxlIChtaW5lLmluZGV4IDwgbWluZS5saW5lcy5sZW5ndGggJiYgdGhlaXIuaW5kZXggPCB0aGVpci5saW5lcy5sZW5ndGgpIHtcbiAgICBsZXQgbWluZUN1cnJlbnQgPSBtaW5lLmxpbmVzW21pbmUuaW5kZXhdLFxuICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cbiAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJylcbiAgICAgICAgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuICAgICAgLy8gQm90aCBtb2RpZmllZCAuLi5cbiAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBNaW5lIGluc2VydGVkXG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIGNvbGxlY3RDaGFuZ2UobWluZSkpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnKycgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gVGhlaXJzIGluc2VydGVkXG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50WzBdID09PSAnLScgJiYgdGhlaXJDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIE1pbmUgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIpO1xuICAgIH0gZWxzZSBpZiAodGhlaXJDdXJyZW50WzBdID09PSAnLScgJiYgbWluZUN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gVGhlaXIgcmVtb3ZlZCBvciBlZGl0ZWRcbiAgICAgIHJlbW92YWwoaHVuaywgdGhlaXIsIG1pbmUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnQgPT09IHRoZWlyQ3VycmVudCkge1xuICAgICAgLy8gQ29udGV4dCBpZGVudGl0eVxuICAgICAgaHVuay5saW5lcy5wdXNoKG1pbmVDdXJyZW50KTtcbiAgICAgIG1pbmUuaW5kZXgrKztcbiAgICAgIHRoZWlyLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnRleHQgbWlzbWF0Y2hcbiAgICAgIGNvbmZsaWN0KGh1bmssIGNvbGxlY3RDaGFuZ2UobWluZSksIGNvbGxlY3RDaGFuZ2UodGhlaXIpKTtcbiAgICB9XG4gIH1cblxuICAvLyBOb3cgcHVzaCBhbnl0aGluZyB0aGF0IG1heSBiZSByZW1haW5pbmdcbiAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG4gIGluc2VydFRyYWlsaW5nKGh1bmssIHRoZWlyKTtcblxuICBjYWxjTGluZUNvdW50KGh1bmspO1xufVxuXG5mdW5jdGlvbiBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgbGV0IG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG4gICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKHRoZWlyKTtcblxuICBpZiAoYWxsUmVtb3ZlcyhteUNoYW5nZXMpICYmIGFsbFJlbW92ZXModGhlaXJDaGFuZ2VzKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgcmVtb3ZlIGNoYW5nZXMgdGhhdCBhcmUgc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyXG4gICAgaWYgKGFycmF5U3RhcnRzV2l0aChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcylcbiAgICAgICAgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KHRoZWlyLCBteUNoYW5nZXMsIG15Q2hhbmdlcy5sZW5ndGggLSB0aGVpckNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgaHVuay5saW5lcy5wdXNoKC4uLiBteUNoYW5nZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoYXJyYXlTdGFydHNXaXRoKHRoZWlyQ2hhbmdlcywgbXlDaGFuZ2VzKVxuICAgICAgICAmJiBza2lwUmVtb3ZlU3VwZXJzZXQobWluZSwgdGhlaXJDaGFuZ2VzLCB0aGVpckNoYW5nZXMubGVuZ3RoIC0gbXlDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIGh1bmsubGluZXMucHVzaCguLi4gdGhlaXJDaGFuZ2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJyYXlFcXVhbChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykpIHtcbiAgICBodW5rLmxpbmVzLnB1c2goLi4uIG15Q2hhbmdlcyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uZmxpY3QoaHVuaywgbXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpO1xufVxuXG5mdW5jdGlvbiByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyLCBzd2FwKSB7XG4gIGxldCBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENvbnRleHQodGhlaXIsIG15Q2hhbmdlcyk7XG4gIGlmICh0aGVpckNoYW5nZXMubWVyZ2VkKSB7XG4gICAgaHVuay5saW5lcy5wdXNoKC4uLiB0aGVpckNoYW5nZXMubWVyZ2VkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25mbGljdChodW5rLCBzd2FwID8gdGhlaXJDaGFuZ2VzIDogbXlDaGFuZ2VzLCBzd2FwID8gbXlDaGFuZ2VzIDogdGhlaXJDaGFuZ2VzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25mbGljdChodW5rLCBtaW5lLCB0aGVpcikge1xuICBodW5rLmNvbmZsaWN0ID0gdHJ1ZTtcbiAgaHVuay5saW5lcy5wdXNoKHtcbiAgICBjb25mbGljdDogdHJ1ZSxcbiAgICBtaW5lOiBtaW5lLFxuICAgIHRoZWlyczogdGhlaXJcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydExlYWRpbmcoaHVuaywgaW5zZXJ0LCB0aGVpcikge1xuICB3aGlsZSAoaW5zZXJ0Lm9mZnNldCA8IHRoZWlyLm9mZnNldCAmJiBpbnNlcnQuaW5kZXggPCBpbnNlcnQubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IGxpbmUgPSBpbnNlcnQubGluZXNbaW5zZXJ0LmluZGV4KytdO1xuICAgIGh1bmsubGluZXMucHVzaChsaW5lKTtcbiAgICBpbnNlcnQub2Zmc2V0Kys7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuICB3aGlsZSAoaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICBsZXQgcmV0ID0gW10sXG4gICAgICBvcGVyYXRpb24gPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF1bMF07XG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdO1xuXG4gICAgLy8gR3JvdXAgYWRkaXRpb25zIHRoYXQgYXJlIGltbWVkaWF0ZWx5IGFmdGVyIHN1YnRyYWN0aW9ucyBhbmQgdHJlYXQgdGhlbSBhcyBvbmUgXCJhdG9taWNcIiBtb2RpZnkgY2hhbmdlLlxuICAgIGlmIChvcGVyYXRpb24gPT09ICctJyAmJiBsaW5lWzBdID09PSAnKycpIHtcbiAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBsaW5lWzBdKSB7XG4gICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5mdW5jdGlvbiBjb2xsZWN0Q29udGV4dChzdGF0ZSwgbWF0Y2hDaGFuZ2VzKSB7XG4gIGxldCBjaGFuZ2VzID0gW10sXG4gICAgICBtZXJnZWQgPSBbXSxcbiAgICAgIG1hdGNoSW5kZXggPSAwLFxuICAgICAgY29udGV4dENoYW5nZXMgPSBmYWxzZSxcbiAgICAgIGNvbmZsaWN0ZWQgPSBmYWxzZTtcbiAgd2hpbGUgKG1hdGNoSW5kZXggPCBtYXRjaENoYW5nZXMubGVuZ3RoXG4gICAgICAgICYmIHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IGNoYW5nZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XSxcbiAgICAgICAgbWF0Y2ggPSBtYXRjaENoYW5nZXNbbWF0Y2hJbmRleF07XG5cbiAgICAvLyBPbmNlIHdlJ3ZlIGhpdCBvdXIgYWRkLCB0aGVuIHdlIGFyZSBkb25lXG4gICAgaWYgKG1hdGNoWzBdID09PSAnKycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnRleHRDaGFuZ2VzID0gY29udGV4dENoYW5nZXMgfHwgY2hhbmdlWzBdICE9PSAnICc7XG5cbiAgICBtZXJnZWQucHVzaChtYXRjaCk7XG4gICAgbWF0Y2hJbmRleCsrO1xuXG4gICAgLy8gQ29uc3VtZSBhbnkgYWRkaXRpb25zIGluIHRoZSBvdGhlciBibG9jayBhcyBhIGNvbmZsaWN0IHRvIGF0dGVtcHRcbiAgICAvLyB0byBwdWxsIGluIHRoZSByZW1haW5pbmcgY29udGV4dCBhZnRlciB0aGlzXG4gICAgaWYgKGNoYW5nZVswXSA9PT0gJysnKSB7XG4gICAgICBjb25mbGljdGVkID0gdHJ1ZTtcblxuICAgICAgd2hpbGUgKGNoYW5nZVswXSA9PT0gJysnKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaChjaGFuZ2UpO1xuICAgICAgICBjaGFuZ2UgPSBzdGF0ZS5saW5lc1srK3N0YXRlLmluZGV4XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2guc3Vic3RyKDEpID09PSBjaGFuZ2Uuc3Vic3RyKDEpKSB7XG4gICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICgobWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdIHx8ICcnKVswXSA9PT0gJysnXG4gICAgICAmJiBjb250ZXh0Q2hhbmdlcykge1xuICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbmZsaWN0ZWQpIHtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCkge1xuICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVyZ2VkLFxuICAgIGNoYW5nZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWxsUmVtb3ZlcyhjaGFuZ2VzKSB7XG4gIHJldHVybiBjaGFuZ2VzLnJlZHVjZShmdW5jdGlvbihwcmV2LCBjaGFuZ2UpIHtcbiAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcbiAgfSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBza2lwUmVtb3ZlU3VwZXJzZXQoc3RhdGUsIHJlbW92ZUNoYW5nZXMsIGRlbHRhKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykge1xuICAgIGxldCBjaGFuZ2VDb250ZW50ID0gcmVtb3ZlQ2hhbmdlc1tyZW1vdmVDaGFuZ2VzLmxlbmd0aCAtIGRlbHRhICsgaV0uc3Vic3RyKDEpO1xuICAgIGlmIChzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleCArIGldICE9PSAnICcgKyBjaGFuZ2VDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUuaW5kZXggKz0gZGVsdGE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmVzKSB7XG4gIGxldCBvbGRMaW5lcyA9IDA7XG4gIGxldCBuZXdMaW5lcyA9IDA7XG5cbiAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG4gICAgICBsZXQgdGhlaXJDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS50aGVpcnMpO1xuXG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgIG9sZExpbmVzICs9IG15Q291bnQub2xkTGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG15Q291bnQubmV3TGluZXMgPT09IHRoZWlyQ291bnQubmV3TGluZXMpIHtcbiAgICAgICAgICBuZXdMaW5lcyArPSBteUNvdW50Lm5ld0xpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnKycgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBuZXdMaW5lcysrO1xuICAgICAgfVxuICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQgJiYgKGxpbmVbMF0gPT09ICctJyB8fCBsaW5lWzBdID09PSAnICcpKSB7XG4gICAgICAgIG9sZExpbmVzKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge29sZExpbmVzLCBuZXdMaW5lc307XG59XG4iXX0=\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parsePatch = parsePatch;\n\n/*istanbul ignore end*/\nfunction parsePatch(uniDiff) {\n /*istanbul ignore start*/\n var\n /*istanbul ignore end*/\n options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n list = [],\n i = 0;\n\n function parseIndex() {\n var index = {};\n list.push(index); // Parse diff metadata\n\n while (i < diffstr.length) {\n var line = diffstr[i]; // File header found, end parsing diff metadata\n\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n } // Diff index\n\n\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n\n if (header) {\n index.index = header[1];\n }\n\n i++;\n } // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n\n\n parseFileHeader(index);\n parseFileHeader(index); // Parse hunks\n\n index.hunks = [];\n\n while (i < diffstr.length) {\n var _line = diffstr[i];\n\n if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line && options.strict) {\n // Ignore unexpected content unless in strict mode\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n } // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n\n\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)$/.exec(diffstr[i]);\n\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n } // Parses a hunk\n // This assumes that we are at the start of a hunk.\n\n\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: [],\n linedelimiters: []\n }; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n\n var addCount = 0,\n removeCount = 0;\n\n for (; i < diffstr.length; i++) {\n // Lines starting with '---' could be mistaken for the \"remove line\" operation\n // But they could be the header for the next file. Therefore prune such cases out.\n if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {\n break;\n }\n\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n hunk.linedelimiters.push(delimiters[i] || '\\n');\n\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n break;\n }\n } // Handle the empty block count case\n\n\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n } // Perform optional sanity checking\n\n\n if (options.strict) {\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n }\n\n return hunk;\n }\n\n while (i < diffstr.length) {\n parseIndex();\n }\n\n return list;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9wYXJzZS5qcyJdLCJuYW1lcyI6WyJwYXJzZVBhdGNoIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJkaWZmc3RyIiwic3BsaXQiLCJkZWxpbWl0ZXJzIiwibWF0Y2giLCJsaXN0IiwiaSIsInBhcnNlSW5kZXgiLCJpbmRleCIsInB1c2giLCJsZW5ndGgiLCJsaW5lIiwidGVzdCIsImhlYWRlciIsImV4ZWMiLCJwYXJzZUZpbGVIZWFkZXIiLCJodW5rcyIsInBhcnNlSHVuayIsInN0cmljdCIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpbGVIZWFkZXIiLCJrZXlQcmVmaXgiLCJkYXRhIiwiZmlsZU5hbWUiLCJyZXBsYWNlIiwic3Vic3RyIiwidHJpbSIsImNodW5rSGVhZGVySW5kZXgiLCJjaHVua0hlYWRlckxpbmUiLCJjaHVua0hlYWRlciIsImh1bmsiLCJvbGRTdGFydCIsIm9sZExpbmVzIiwibmV3U3RhcnQiLCJuZXdMaW5lcyIsImxpbmVzIiwibGluZWRlbGltaXRlcnMiLCJhZGRDb3VudCIsInJlbW92ZUNvdW50IiwiaW5kZXhPZiIsIm9wZXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsVUFBVCxDQUFvQkMsT0FBcEIsRUFBMkM7QUFBQTtBQUFBO0FBQUE7QUFBZEMsRUFBQUEsT0FBYyx1RUFBSixFQUFJO0FBQ2hELE1BQUlDLE9BQU8sR0FBR0YsT0FBTyxDQUFDRyxLQUFSLENBQWMscUJBQWQsQ0FBZDtBQUFBLE1BQ0lDLFVBQVUsR0FBR0osT0FBTyxDQUFDSyxLQUFSLENBQWMsc0JBQWQsS0FBeUMsRUFEMUQ7QUFBQSxNQUVJQyxJQUFJLEdBQUcsRUFGWDtBQUFBLE1BR0lDLENBQUMsR0FBRyxDQUhSOztBQUtBLFdBQVNDLFVBQVQsR0FBc0I7QUFDcEIsUUFBSUMsS0FBSyxHQUFHLEVBQVo7QUFDQUgsSUFBQUEsSUFBSSxDQUFDSSxJQUFMLENBQVVELEtBQVYsRUFGb0IsQ0FJcEI7O0FB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QUwsS0FBa0IsQ0FBbkMsRUFBc0M7QUFDcENKLE1BQUFBLElBQUksQ0FBQ0ksUUFBTCxHQUFnQixDQUFoQjtBQUNEOztBQUNELFFBQUksQ0FBQ0ksV0FBRCxJQUFnQlIsSUFBSSxDQUFDRSxRQUFMLEtBQWtCLENBQXRDLEVBQXlDO0FBQ3ZDRixNQUFBQSxJQUFJLENBQUNFLFFBQUwsR0FBZ0IsQ0FBaEI7QUFDRCxLQTVEa0IsQ0E4RG5COzs7QUFDQSxRQUFJbEMsT0FBTyxDQUFDa0IsTUFBWixFQUFvQjtBQUNsQixVQUFJcUIsUUFBUSxLQUFLUCxJQUFJLENBQUNJLFFBQXRCLEVBQWdDO0FBQzlCLGNBQU0sSUFBSWpCLEtBQUosQ0FBVSxzREFBc0RVLGdCQUFnQixHQUFHLENBQXpFLENBQVYsQ0FBTjtBQUNEOztBQUNELFVBQUlXLFdBQVcsS0FBS1IsSUFBSSxDQUFDRSxRQUF6QixFQUFtQztBQUNqQyxjQUFNLElBQUlmLEtBQUosQ0FBVSx3REFBd0RVLGdCQUFnQixHQUFHLENBQTNFLENBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsV0FBT0csSUFBUDtBQUNEOztBQUVELFNBQU8xQixDQUFDLEdBQUdMLE9BQU8sQ0FBQ1MsTUFBbkIsRUFBMkI7QUFDekJILElBQUFBLFVBQVU7QUFDWDs7QUFFRCxTQUFPRixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRjaCh1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGRpZmZzdHIgPSB1bmlEaWZmLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgbGlzdCA9IFtdLFxuICAgICAgaSA9IDA7XG5cbiAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICBsZXQgaW5kZXggPSB7fTtcbiAgICBsaXN0LnB1c2goaW5kZXgpO1xuXG4gICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcbiAgICAgIGlmICgoL14oXFwtXFwtXFwtfFxcK1xcK1xcK3xAQClcXHMvKS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBEaWZmIGluZGV4XG4gICAgICBsZXQgaGVhZGVyID0gKC9eKD86SW5kZXg6fGRpZmYoPzogLXIgXFx3KykrKVxccysoLis/KVxccyokLykuZXhlYyhsaW5lKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaW5kZXguaW5kZXggPSBoZWFkZXJbMV07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBmaWxlIGhlYWRlcnMgaWYgdGhleSBhcmUgZGVmaW5lZC4gVW5pZmllZCBkaWZmIHJlcXVpcmVzIHRoZW0sIGJ1dFxuICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIGlzc3VlcyB0byBoYXZlIGFuIGlzb2xhdGVkIGh1bmsgd2l0aG91dCBmaWxlIGhlYWRlclxuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTtcblxuICAgIC8vIFBhcnNlIGh1bmtzXG4gICAgaW5kZXguaHVua3MgPSBbXTtcblxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgaWYgKCgvXihJbmRleDp8ZGlmZnxcXC1cXC1cXC18XFwrXFwrXFwrKVxccy8pLnRlc3QobGluZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKCgvXkBALykudGVzdChsaW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAobGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuICAgICAgICAvLyBJZ25vcmUgdW5leHBlY3RlZCBjb250ZW50IHVubGVzcyBpbiBzdHJpY3QgbW9kZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGluZSAnICsgKGkgKyAxKSArICcgJyArIEpTT04uc3RyaW5naWZ5KGxpbmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuICAvLyBhcmUgY29uc3VtZWQuXG4gIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuICAgIGNvbnN0IGZpbGVIZWFkZXIgPSAoL14oLS0tfFxcK1xcK1xcKylcXHMrKC4qKSQvKS5leGVjKGRpZmZzdHJbaV0pO1xuICAgIGlmIChmaWxlSGVhZGVyKSB7XG4gICAgICBsZXQga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuICAgICAgY29uc3QgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuICAgICAgaWYgKCgvXlwiLipcIiQvKS50ZXN0KGZpbGVOYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigxLCBmaWxlTmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIH1cbiAgICAgIGluZGV4W2tleVByZWZpeCArICdGaWxlTmFtZSddID0gZmlsZU5hbWU7XG4gICAgICBpbmRleFtrZXlQcmVmaXggKyAnSGVhZGVyJ10gPSAoZGF0YVsxXSB8fCAnJykudHJpbSgpO1xuXG4gICAgICBpKys7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFyc2VzIGEgaHVua1xuICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgaHVuay5cbiAgZnVuY3Rpb24gcGFyc2VIdW5rKCkge1xuICAgIGxldCBjaHVua0hlYWRlckluZGV4ID0gaSxcbiAgICAgICAgY2h1bmtIZWFkZXJMaW5lID0gZGlmZnN0cltpKytdLFxuICAgICAgICBjaHVua0hlYWRlciA9IGNodW5rSGVhZGVyTGluZS5zcGxpdCgvQEAgLShcXGQrKSg/OiwoXFxkKykpPyBcXCsoXFxkKykoPzosKFxcZCspKT8gQEAvKTtcblxuICAgIGxldCBodW5rID0ge1xuICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcbiAgICAgIG9sZExpbmVzOiB0eXBlb2YgY2h1bmtIZWFkZXJbMl0gPT09ICd1bmRlZmluZWQnID8gMSA6ICtjaHVua0hlYWRlclsyXSxcbiAgICAgIG5ld1N0YXJ0OiArY2h1bmtIZWFkZXJbM10sXG4gICAgICBuZXdMaW5lczogdHlwZW9mIGNodW5rSGVhZGVyWzRdID09PSAndW5kZWZpbmVkJyA/IDEgOiArY2h1bmtIZWFkZXJbNF0sXG4gICAgICBsaW5lczogW10sXG4gICAgICBsaW5lZGVsaW1pdGVyczogW11cbiAgICB9O1xuXG4gICAgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG4gICAgaWYgKGh1bmsub2xkTGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsub2xkU3RhcnQgKz0gMTtcbiAgICB9XG4gICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsubmV3U3RhcnQgKz0gMTtcbiAgICB9XG5cbiAgICBsZXQgYWRkQ291bnQgPSAwLFxuICAgICAgICByZW1vdmVDb3VudCA9IDA7XG4gICAgZm9yICg7IGkgPCBkaWZmc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBMaW5lcyBzdGFydGluZyB3aXRoICctLS0nIGNvdWxkIGJlIG1pc3Rha2VuIGZvciB0aGUgXCJyZW1vdmUgbGluZVwiIG9wZXJhdGlvblxuICAgICAgLy8gQnV0IHRoZXkgY291bGQgYmUgdGhlIGhlYWRlciBmb3IgdGhlIG5leHQgZmlsZS4gVGhlcmVmb3JlIHBydW5lIHN1Y2ggY2FzZXMgb3V0LlxuICAgICAgaWYgKGRpZmZzdHJbaV0uaW5kZXhPZignLS0tICcpID09PSAwXG4gICAgICAgICAgICAmJiAoaSArIDIgPCBkaWZmc3RyLmxlbmd0aClcbiAgICAgICAgICAgICYmIGRpZmZzdHJbaSArIDFdLmluZGV4T2YoJysrKyAnKSA9PT0gMFxuICAgICAgICAgICAgJiYgZGlmZnN0cltpICsgMl0uaW5kZXhPZignQEAnKSA9PT0gMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbGV0IG9wZXJhdGlvbiA9IChkaWZmc3RyW2ldLmxlbmd0aCA9PSAwICYmIGkgIT0gKGRpZmZzdHIubGVuZ3RoIC0gMSkpID8gJyAnIDogZGlmZnN0cltpXVswXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnIHx8IG9wZXJhdGlvbiA9PT0gJy0nIHx8IG9wZXJhdGlvbiA9PT0gJyAnIHx8IG9wZXJhdGlvbiA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIGh1bmsubGluZXMucHVzaChkaWZmc3RyW2ldKTtcbiAgICAgICAgaHVuay5saW5lZGVsaW1pdGVycy5wdXNoKGRlbGltaXRlcnNbaV0gfHwgJ1xcbicpO1xuXG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICcrJykge1xuICAgICAgICAgIGFkZENvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgICByZW1vdmVDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIGVtcHR5IGJsb2NrIGNvdW50IGNhc2VcbiAgICBpZiAoIWFkZENvdW50ICYmIGh1bmsubmV3TGluZXMgPT09IDEpIHtcbiAgICAgIGh1bmsubmV3TGluZXMgPSAwO1xuICAgIH1cbiAgICBpZiAoIXJlbW92ZUNvdW50ICYmIGh1bmsub2xkTGluZXMgPT09IDEpIHtcbiAgICAgIGh1bmsub2xkTGluZXMgPSAwO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gb3B0aW9uYWwgc2FuaXR5IGNoZWNraW5nXG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBpZiAoYWRkQ291bnQgIT09IGh1bmsubmV3TGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBZGRlZCBsaW5lIGNvdW50IGRpZCBub3QgbWF0Y2ggZm9yIGh1bmsgYXQgbGluZSAnICsgKGNodW5rSGVhZGVySW5kZXggKyAxKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaHVuaztcbiAgfVxuXG4gIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICBwYXJzZUluZGV4KCk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiJdfQ==\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.arrayEqual = arrayEqual;\nexports.arrayStartsWith = arrayStartsWith;\n\n/*istanbul ignore end*/\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n\n return arrayStartsWith(a, b);\n}\n\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n\n return true;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RXF1YWwiLCJhIiwiYiIsImxlbmd0aCIsImFycmF5U3RhcnRzV2l0aCIsImFycmF5Iiwic3RhcnQiLCJpIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQU8sU0FBU0EsVUFBVCxDQUFvQkMsQ0FBcEIsRUFBdUJDLENBQXZCLEVBQTBCO0FBQy9CLE1BQUlELENBQUMsQ0FBQ0UsTUFBRixLQUFhRCxDQUFDLENBQUNDLE1BQW5CLEVBQTJCO0FBQ3pCLFdBQU8sS0FBUDtBQUNEOztBQUVELFNBQU9DLGVBQWUsQ0FBQ0gsQ0FBRCxFQUFJQyxDQUFKLENBQXRCO0FBQ0Q7O0FBRU0sU0FBU0UsZUFBVCxDQUF5QkMsS0FBekIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUlBLEtBQUssQ0FBQ0gsTUFBTixHQUFlRSxLQUFLLENBQUNGLE1BQXpCLEVBQWlDO0FBQy9CLFdBQU8sS0FBUDtBQUNEOztBQUVELE9BQUssSUFBSUksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0QsS0FBSyxDQUFDSCxNQUExQixFQUFrQ0ksQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxRQUFJRCxLQUFLLENBQUNDLENBQUQsQ0FBTCxLQUFhRixLQUFLLENBQUNFLENBQUQsQ0FBdEIsRUFBMkI7QUFDekIsYUFBTyxLQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBhcnJheUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBhcnJheVN0YXJ0c1dpdGgoYSwgYik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheVN0YXJ0c1dpdGgoYXJyYXksIHN0YXJ0KSB7XG4gIGlmIChzdGFydC5sZW5ndGggPiBhcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBhcnJheVtpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = _default;\n\n/*istanbul ignore end*/\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction\n/*istanbul ignore start*/\n_default\n/*istanbul ignore end*/\n(start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n } // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n\n\n if (start + localOffset <= maxLine) {\n return localOffset;\n }\n\n forwardExhausted = true;\n }\n\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n } // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n\n\n if (minLine <= start - localOffset) {\n return -localOffset++;\n }\n\n backwardExhausted = true;\n return iterator();\n } // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbInN0YXJ0IiwibWluTGluZSIsIm1heExpbmUiLCJ3YW50Rm9yd2FyZCIsImJhY2t3YXJkRXhoYXVzdGVkIiwiZm9yd2FyZEV4aGF1c3RlZCIsImxvY2FsT2Zmc2V0IiwiaXRlcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNlO0FBQUE7QUFBQTtBQUFBO0FBQUEsQ0FBU0EsS0FBVCxFQUFnQkMsT0FBaEIsRUFBeUJDLE9BQXpCLEVBQWtDO0FBQy9DLE1BQUlDLFdBQVcsR0FBRyxJQUFsQjtBQUFBLE1BQ0lDLGlCQUFpQixHQUFHLEtBRHhCO0FBQUEsTUFFSUMsZ0JBQWdCLEdBQUcsS0FGdkI7QUFBQSxNQUdJQyxXQUFXLEdBQUcsQ0FIbEI7QUFLQSxTQUFPLFNBQVNDLFFBQVQsR0FBb0I7QUFDekIsUUFBSUosV0FBVyxJQUFJLENBQUNFLGdCQUFwQixFQUFzQztBQUNwQyxVQUFJRCxpQkFBSixFQUF1QjtBQUNyQkUsUUFBQUEsV0FBVztBQUNaLE9BRkQsTUFFTztBQUNMSCxRQUFBQSxXQUFXLEdBQUcsS0FBZDtBQUNELE9BTG1DLENBT3BDO0FBQ0E7OztBQUNBLFVBQUlILEtBQUssR0FBR00sV0FBUixJQUF1QkosT0FBM0IsRUFBb0M7QUFDbEMsZUFBT0ksV0FBUDtBQUNEOztBQUVERCxNQUFBQSxnQkFBZ0IsR0FBRyxJQUFuQjtBQUNEOztBQUVELFFBQUksQ0FBQ0QsaUJBQUwsRUFBd0I7QUFDdEIsVUFBSSxDQUFDQyxnQkFBTCxFQUF1QjtBQUNyQkYsUUFBQUEsV0FBVyxHQUFHLElBQWQ7QUFDRCxPQUhxQixDQUt0QjtBQUNBOzs7QUFDQSxVQUFJRixPQUFPLElBQUlELEtBQUssR0FBR00sV0FBdkIsRUFBb0M7QUFDbEMsZUFBTyxDQUFDQSxXQUFXLEVBQW5CO0FBQ0Q7O0FBRURGLE1BQUFBLGlCQUFpQixHQUFHLElBQXBCO0FBQ0EsYUFBT0csUUFBUSxFQUFmO0FBQ0QsS0E5QndCLENBZ0N6QjtBQUNBOztBQUNELEdBbENEO0FBbUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIGxldCB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICBpZiAod2FudEZvcndhcmQgJiYgIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBsb2NhbE9mZnNldCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAoc3RhcnQgKyBsb2NhbE9mZnNldCA8PSBtYXhMaW5lKSB7XG4gICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcbiAgICAgIH1cblxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGJlZm9yZSBvZmZzZXQgbG9jYXRpb25cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG4gIH07XG59XG4iXX0=\n","/*istanbul ignore start*/\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.generateOptions = generateOptions;\n\n/*istanbul ignore end*/\nfunction generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n\n return defaults;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BhcmFtcy5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZU9wdGlvbnMiLCJvcHRpb25zIiwiZGVmYXVsdHMiLCJjYWxsYmFjayIsIm5hbWUiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQU8sU0FBU0EsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0NDLFFBQWxDLEVBQTRDO0FBQ2pELE1BQUksT0FBT0QsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ0MsSUFBQUEsUUFBUSxDQUFDQyxRQUFULEdBQW9CRixPQUFwQjtBQUNELEdBRkQsTUFFTyxJQUFJQSxPQUFKLEVBQWE7QUFDbEIsU0FBSyxJQUFJRyxJQUFULElBQWlCSCxPQUFqQixFQUEwQjtBQUN4QjtBQUNBLFVBQUlBLE9BQU8sQ0FBQ0ksY0FBUixDQUF1QkQsSUFBdkIsQ0FBSixFQUFrQztBQUNoQ0YsUUFBQUEsUUFBUSxDQUFDRSxJQUFELENBQVIsR0FBaUJILE9BQU8sQ0FBQ0csSUFBRCxDQUF4QjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxTQUFPRixRQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlZmF1bHRzLmNhbGxiYWNrID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmYXVsdHM7XG59XG4iXX0=\n","var Module=void 0!==Module?Module:{},TreeSitter=function(){var initPromise,document=\"object\"==typeof window?{currentScript:window.document.currentScript}:null;class Parser{constructor(){this.initialize()}initialize(){throw new Error(\"cannot construct a Parser before calling `init()`\")}static init(moduleOptions){return initPromise||(Module=Object.assign({},Module,moduleOptions),initPromise=new Promise((resolveInitPromise=>{var moduleOverrides=Object.assign({},Module),arguments_=[],thisProgram=\"./this.program\",quit_=(e,t)=>{throw t},ENVIRONMENT_IS_WEB=\"object\"==typeof window,ENVIRONMENT_IS_WORKER=\"function\"==typeof importScripts,ENVIRONMENT_IS_NODE=\"object\"==typeof process&&\"object\"==typeof process.versions&&\"string\"==typeof process.versions.node,scriptDirectory=\"\",read_,readAsync,readBinary,setWindowTitle;function locateFile(e){return Module.locateFile?Module.locateFile(e,scriptDirectory):scriptDirectory+e}function logExceptionOnExit(e){if(e instanceof ExitStatus)return;err(\"exiting due to exception: \"+e)}if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\"),nodePath=require(\"path\");scriptDirectory=ENVIRONMENT_IS_WORKER?nodePath.dirname(scriptDirectory)+\"/\":__dirname+\"/\",read_=(e,t)=>(e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFileSync(e,t?void 0:\"utf8\")),readBinary=e=>{var t=read_(e,!0);return t.buffer||(t=new Uint8Array(t)),t},readAsync=(e,t,r)=>{e=isFileURI(e)?new URL(e):nodePath.normalize(e),fs.readFile(e,(function(e,_){e?r(e):t(_.buffer)}))},process.argv.length>1&&(thisProgram=process.argv[1].replace(/\\\\/g,\"/\")),arguments_=process.argv.slice(2),\"undefined\"!=typeof module&&(module.exports=Module),quit_=(e,t)=>{if(keepRuntimeAlive())throw process.exitCode=e,t;logExceptionOnExit(t),process.exit(e)},Module.inspect=function(){return\"[Emscripten Module object]\"}}else(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&(ENVIRONMENT_IS_WORKER?scriptDirectory=self.location.href:void 0!==document&&document.currentScript&&(scriptDirectory=document.currentScript.src),scriptDirectory=0!==scriptDirectory.indexOf(\"blob:\")?scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):\"\",read_=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.send(null),t.responseText},ENVIRONMENT_IS_WORKER&&(readBinary=e=>{var t=new XMLHttpRequest;return t.open(\"GET\",e,!1),t.responseType=\"arraybuffer\",t.send(null),new Uint8Array(t.response)}),readAsync=(e,t,r)=>{var _=new XMLHttpRequest;_.open(\"GET\",e,!0),_.responseType=\"arraybuffer\",_.onload=()=>{200==_.status||0==_.status&&_.response?t(_.response):r()},_.onerror=r,_.send(null)},setWindowTitle=e=>document.title=e);var out=Module.print||console.log.bind(console),err=Module.printErr||console.warn.bind(console);Object.assign(Module,moduleOverrides),moduleOverrides=null,Module.arguments&&(arguments_=Module.arguments),Module.thisProgram&&(thisProgram=Module.thisProgram),Module.quit&&(quit_=Module.quit);var STACK_ALIGN=16,dynamicLibraries=Module.dynamicLibraries||[],wasmBinary;Module.wasmBinary&&(wasmBinary=Module.wasmBinary);var noExitRuntime=Module.noExitRuntime||!0,wasmMemory;\"object\"!=typeof WebAssembly&&abort(\"no native wasm support detected\");var ABORT=!1,EXITSTATUS,UTF8Decoder=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf8\"):void 0,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function UTF8ArrayToString(e,t,r){for(var _=t+r,n=t;e[n]&&!(n>=_);)++n;if(n-t>16&&e.buffer&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(t,n));for(var s=\"\";t>10,56320|1023&l)}}else s+=String.fromCharCode((31&a)<<6|o)}else s+=String.fromCharCode(a)}return s}function UTF8ToString(e,t){return e?UTF8ArrayToString(HEAPU8,e,t):\"\"}function stringToUTF8Array(e,t,r,_){if(!(_>0))return 0;for(var n=r,s=r+_-1,a=0;a=55296&&o<=57343)o=65536+((1023&o)<<10)|1023&e.charCodeAt(++a);if(o<=127){if(r>=s)break;t[r++]=o}else if(o<=2047){if(r+1>=s)break;t[r++]=192|o>>6,t[r++]=128|63&o}else if(o<=65535){if(r+2>=s)break;t[r++]=224|o>>12,t[r++]=128|o>>6&63,t[r++]=128|63&o}else{if(r+3>=s)break;t[r++]=240|o>>18,t[r++]=128|o>>12&63,t[r++]=128|o>>6&63,t[r++]=128|63&o}}return t[r]=0,r-n}function stringToUTF8(e,t,r){return stringToUTF8Array(e,HEAPU8,t,r)}function lengthBytesUTF8(e){for(var t=0,r=0;r=55296&&_<=57343?(t+=4,++r):t+=3}return t}function updateGlobalBufferAndViews(e){buffer=e,Module.HEAP8=HEAP8=new Int8Array(e),Module.HEAP16=HEAP16=new Int16Array(e),Module.HEAP32=HEAP32=new Int32Array(e),Module.HEAPU8=HEAPU8=new Uint8Array(e),Module.HEAPU16=HEAPU16=new Uint16Array(e),Module.HEAPU32=HEAPU32=new Uint32Array(e),Module.HEAPF32=HEAPF32=new Float32Array(e),Module.HEAPF64=HEAPF64=new Float64Array(e)}var INITIAL_MEMORY=Module.INITIAL_MEMORY||33554432;wasmMemory=Module.wasmMemory?Module.wasmMemory:new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:32768}),wasmMemory&&(buffer=wasmMemory.buffer),INITIAL_MEMORY=buffer.byteLength,updateGlobalBufferAndViews(buffer);var wasmTable=new WebAssembly.Table({initial:20,element:\"anyfunc\"}),__ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATPOSTRUN__=[],__RELOC_FUNCS__=[],runtimeInitialized=!1;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module.preRun)for(\"function\"==typeof Module.preRun&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=!0,callRuntimeCallbacks(__RELOC_FUNCS__),callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module.postRun)for(\"function\"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}var runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var t=dependenciesFulfilled;dependenciesFulfilled=null,t()}}function abort(e){throw Module.onAbort&&Module.onAbort(e),err(e=\"Aborted(\"+e+\")\"),ABORT=!0,EXITSTATUS=1,e+=\". Build with -sASSERTIONS for more info.\",new WebAssembly.RuntimeError(e)}var dataURIPrefix=\"data:application/octet-stream;base64,\",wasmBinaryFile,tempDouble,tempI64;function isDataURI(e){return e.startsWith(dataURIPrefix)}function isFileURI(e){return e.startsWith(\"file://\")}function getBinary(e){try{if(e==wasmBinaryFile&&wasmBinary)return new Uint8Array(wasmBinary);if(readBinary)return readBinary(e);throw\"both async and sync fetching of the wasm failed\"}catch(e){abort(e)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(\"function\"==typeof fetch&&!isFileURI(wasmBinaryFile))return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then((function(e){if(!e.ok)throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\";return e.arrayBuffer()})).catch((function(){return getBinary(wasmBinaryFile)}));if(readAsync)return new Promise((function(e,t){readAsync(wasmBinaryFile,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return getBinary(wasmBinaryFile)}))}function createWasm(){var e={env:asmLibraryArg,wasi_snapshot_preview1:asmLibraryArg,\"GOT.mem\":new Proxy(asmLibraryArg,GOTHandler),\"GOT.func\":new Proxy(asmLibraryArg,GOTHandler)};function t(e,t){var r=e.exports;r=relocateExports(r,1024);var _=getDylinkMetadata(t);_.neededDynlibs&&(dynamicLibraries=_.neededDynlibs.concat(dynamicLibraries)),mergeLibSymbols(r,\"main\"),Module.asm=r,addOnInit(Module.asm.__wasm_call_ctors),__RELOC_FUNCS__.push(Module.asm.__wasm_apply_data_relocs),removeRunDependency(\"wasm-instantiate\")}function r(e){t(e.instance,e.module)}function _(t){return getBinaryPromise().then((function(t){return WebAssembly.instantiate(t,e)})).then((function(e){return e})).then(t,(function(e){err(\"failed to asynchronously prepare wasm: \"+e),abort(e)}))}if(addRunDependency(\"wasm-instantiate\"),Module.instantiateWasm)try{return Module.instantiateWasm(e,t)}catch(e){return err(\"Module.instantiateWasm callback failed with error: \"+e),!1}return wasmBinary||\"function\"!=typeof WebAssembly.instantiateStreaming||isDataURI(wasmBinaryFile)||isFileURI(wasmBinaryFile)||ENVIRONMENT_IS_NODE||\"function\"!=typeof fetch?_(r):fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(r,(function(e){return err(\"wasm streaming compile failed: \"+e),err(\"falling back to ArrayBuffer instantiation\"),_(r)}))})),{}}wasmBinaryFile=\"tree-sitter.wasm\",isDataURI(wasmBinaryFile)||(wasmBinaryFile=locateFile(wasmBinaryFile));var ASM_CONSTS={};function ExitStatus(e){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+e+\")\",this.status=e}var GOT={},CurrentModuleWeakSymbols=new Set([]),GOTHandler={get:function(e,t){var r=GOT[t];return r||(r=GOT[t]=new WebAssembly.Global({value:\"i32\",mutable:!0})),CurrentModuleWeakSymbols.has(t)||(r.required=!0),r}};function callRuntimeCallbacks(e){for(;e.length>0;)e.shift()(Module)}function getDylinkMetadata(e){var t=0,r=0;function _(){for(var r=0,_=1;;){var n=e[t++];if(r+=(127&n)*_,_*=128,!(128&n))break}return r}function n(){var r=_();return UTF8ArrayToString(e,(t+=r)-r,r)}function s(e,t){if(e)throw new Error(t)}var a=\"dylink.0\";if(e instanceof WebAssembly.Module){var o=WebAssembly.Module.customSections(e,a);0===o.length&&(a=\"dylink\",o=WebAssembly.Module.customSections(e,a)),s(0===o.length,\"need dylink section\"),r=(e=new Uint8Array(o[0])).length}else{s(!(1836278016==new Uint32Array(new Uint8Array(e.subarray(0,24)).buffer)[0]),\"need to see wasm magic number\"),s(0!==e[8],\"need the dylink section to be first\"),t=9;var i=_();r=t+i,a=n()}var l={neededDynlibs:[],tlsExports:new Set,weakImports:new Set};if(\"dylink\"==a){l.memorySize=_(),l.memoryAlign=_(),l.tableSize=_(),l.tableAlign=_();for(var u=_(),d=0;d>0];case\"i16\":return HEAP16[e>>1];case\"i32\":case\"i64\":return HEAP32[e>>2];case\"float\":return HEAPF32[e>>2];case\"double\":return HEAPF64[e>>3];case\"*\":return HEAPU32[e>>2];default:abort(\"invalid type for getValue: \"+t)}return null}function asmjsMangle(e){return 0==e.indexOf(\"dynCall_\")||[\"stackAlloc\",\"stackSave\",\"stackRestore\",\"getTempRet0\",\"setTempRet0\"].includes(e)?e:\"_\"+e}function mergeLibSymbols(e,t){for(var r in e)if(e.hasOwnProperty(r)){asmLibraryArg.hasOwnProperty(r)||(asmLibraryArg[r]=e[r]);var _=asmjsMangle(r);Module.hasOwnProperty(_)||(Module[_]=e[r]),\"__main_argc_argv\"==r&&(Module._main=e[r])}}var LDSO={loadedLibsByName:{},loadedLibsByHandle:{}};function dynCallLegacy(e,t,r){var _=Module[\"dynCall_\"+e];return r&&r.length?_.apply(null,[t].concat(r)):_.call(null,t)}var wasmTableMirror=[];function getWasmTableEntry(e){var t=wasmTableMirror[e];return t||(e>=wasmTableMirror.length&&(wasmTableMirror.length=e+1),wasmTableMirror[e]=t=wasmTable.get(e)),t}function dynCall(e,t,r){return e.includes(\"j\")?dynCallLegacy(e,t,r):getWasmTableEntry(t).apply(null,r)}function createInvokeFunction(e){return function(){var t=stackSave();try{return dynCall(e,arguments[0],Array.prototype.slice.call(arguments,1))}catch(e){if(stackRestore(t),e!==e+0)throw e;_setThrew(1,0)}}}var ___heap_base=78144;function zeroMemory(e,t){return HEAPU8.fill(0,e,e+t),e}function getMemory(e){if(runtimeInitialized)return zeroMemory(_malloc(e),e);var t=___heap_base,r=t+e+15&-16;return ___heap_base=r,GOT.__heap_base.value=r,t}function isInternalSym(e){return[\"__cpp_exception\",\"__c_longjmp\",\"__wasm_apply_data_relocs\",\"__dso_handle\",\"__tls_size\",\"__tls_align\",\"__set_stack_limits\",\"_emscripten_tls_init\",\"__wasm_init_tls\",\"__wasm_call_ctors\",\"__start_em_asm\",\"__stop_em_asm\"].includes(e)}function uleb128Encode(e,t){e<128?t.push(e):t.push(e%128|128,e>>7)}function sigToWasmTypes(e){for(var t={i:\"i32\",j:\"i32\",f:\"f32\",d:\"f64\",p:\"i32\"},r={parameters:[],results:\"v\"==e[0]?[]:[t[e[0]]]},_=1;_>0];if(firstLoad){var memAlign=Math.pow(2,metadata.memoryAlign);memAlign=Math.max(memAlign,STACK_ALIGN);var memoryBase=metadata.memorySize?alignMemory(getMemory(metadata.memorySize+memAlign),memAlign):0,tableBase=metadata.tableSize?wasmTable.length:0;handle&&(HEAP8[handle+12>>0]=1,HEAPU32[handle+16>>2]=memoryBase,HEAP32[handle+20>>2]=metadata.memorySize,HEAPU32[handle+24>>2]=tableBase,HEAP32[handle+28>>2]=metadata.tableSize)}else memoryBase=HEAPU32[handle+16>>2],tableBase=HEAPU32[handle+24>>2];var tableGrowthNeeded=tableBase+metadata.tableSize-wasmTable.length,moduleExports;function resolveSymbol(e){var t=resolveGlobalSymbol(e,!1);return t||(t=moduleExports[e]),t}tableGrowthNeeded>0&&wasmTable.grow(tableGrowthNeeded);var proxyHandler={get:function(e,t){switch(t){case\"__memory_base\":return memoryBase;case\"__table_base\":return tableBase}if(t in asmLibraryArg)return asmLibraryArg[t];var r;t in e||(e[t]=function(){return r||(r=resolveSymbol(t)),r.apply(null,arguments)});return e[t]}},proxy=new Proxy({},proxyHandler),info={\"GOT.mem\":new Proxy({},GOTHandler),\"GOT.func\":new Proxy({},GOTHandler),env:proxy,wasi_snapshot_preview1:proxy};function postInstantiation(instance){function addEmAsm(addr,body){for(var args=[],arity=0;arity<16&&-1!=body.indexOf(\"$\"+arity);arity++)args.push(\"$\"+arity);args=args.join(\",\");var func=\"(\"+args+\" ) => { \"+body+\"};\";ASM_CONSTS[start]=eval(func)}if(updateTableMap(tableBase,metadata.tableSize),moduleExports=relocateExports(instance.exports,memoryBase),flags.allowUndefined||reportUndefinedSymbols(),\"__start_em_asm\"in moduleExports)for(var start=moduleExports.__start_em_asm,stop=moduleExports.__stop_em_asm;startt(new Uint8Array(e))),r)}));if(!readBinary)throw new Error(e+\": file not found, and synchronous loading of external files is not available\");return readBinary(e)}function s(){if(\"undefined\"!=typeof preloadedWasm&&preloadedWasm[e]){var _=preloadedWasm[e];return t.loadAsync?Promise.resolve(_):_}return t.loadAsync?n(e).then((function(e){return loadWebAssemblyModule(e,t,r)})):loadWebAssemblyModule(n(e),t,r)}function a(t){_.global&&mergeLibSymbols(t,e),_.module=t}return _={refcount:t.nodelete?1/0:1,name:e,module:\"loading\",global:t.global},LDSO.loadedLibsByName[e]=_,r&&(LDSO.loadedLibsByHandle[r]=_),t.loadAsync?s().then((function(e){return a(e),!0})):(a(s()),!0)}function reportUndefinedSymbols(){for(var e in GOT)if(0==GOT[e].value){var t=resolveGlobalSymbol(e,!0);if(!t&&!GOT[e].required)continue;if(\"function\"==typeof t)GOT[e].value=addFunction(t,t.sig);else{if(\"number\"!=typeof t)throw new Error(\"bad export type for `\"+e+\"`: \"+typeof t);GOT[e].value=t}}}function preloadDylibs(){dynamicLibraries.length?(addRunDependency(\"preloadDylibs\"),dynamicLibraries.reduce((function(e,t){return e.then((function(){return loadDynamicLibrary(t,{loadAsync:!0,global:!0,nodelete:!0,allowUndefined:!0})}))}),Promise.resolve()).then((function(){reportUndefinedSymbols(),removeRunDependency(\"preloadDylibs\")}))):reportUndefinedSymbols()}function setValue(e,t,r=\"i8\"){switch(r.endsWith(\"*\")&&(r=\"*\"),r){case\"i1\":case\"i8\":HEAP8[e>>0]=t;break;case\"i16\":HEAP16[e>>1]=t;break;case\"i32\":HEAP32[e>>2]=t;break;case\"i64\":tempI64=[t>>>0,(tempDouble=t,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case\"float\":HEAPF32[e>>2]=t;break;case\"double\":HEAPF64[e>>3]=t;break;case\"*\":HEAPU32[e>>2]=t;break;default:abort(\"invalid type for setValue: \"+r)}}var ___memory_base=new WebAssembly.Global({value:\"i32\",mutable:!1},1024),___stack_pointer=new WebAssembly.Global({value:\"i32\",mutable:!0},78144),___table_base=new WebAssembly.Global({value:\"i32\",mutable:!1},1),nowIsMonotonic=!0,_emscripten_get_now;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function _abort(){abort(\"\")}function _emscripten_date_now(){return Date.now()}function _emscripten_memcpy_big(e,t,r){HEAPU8.copyWithin(e,t,t+r)}function getHeapMax(){return 2147483648}function emscripten_realloc_buffer(e){try{return wasmMemory.grow(e-buffer.byteLength+65535>>>16),updateGlobalBufferAndViews(wasmMemory.buffer),1}catch(e){}}function _emscripten_resize_heap(e){var t=HEAPU8.length;e>>>=0;var r=getHeapMax();if(e>r)return!1;for(var _=1;_<=4;_*=2){var n=t*(1+.2/_);if(n=Math.min(n,e+100663296),emscripten_realloc_buffer(Math.min(r,(s=Math.max(e,n))+((a=65536)-s%a)%a)))return!0}var s,a;return!1}__emscripten_get_now_is_monotonic.sig=\"i\",Module._abort=_abort,_abort.sig=\"v\",_emscripten_date_now.sig=\"d\",_emscripten_get_now=ENVIRONMENT_IS_NODE?()=>{var e=process.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.now(),_emscripten_get_now.sig=\"d\",_emscripten_memcpy_big.sig=\"vppp\",_emscripten_resize_heap.sig=\"ip\";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(e,t,r){if(PATH.isAbs(t))return t;var _;-100===e?_=FS.cwd():_=SYSCALLS.getStreamFromFD(e).path;if(0==t.length){if(!r)throw new FS.ErrnoError(44);return _}return PATH.join2(_,t)},doStat:function(e,t,r){try{var _=e(t)}catch(e){if(e&&e.node&&PATH.normalize(t)!==PATH.normalize(FS.getPath(e.node)))return-54;throw e}HEAP32[r>>2]=_.dev,HEAP32[r+8>>2]=_.ino,HEAP32[r+12>>2]=_.mode,HEAPU32[r+16>>2]=_.nlink,HEAP32[r+20>>2]=_.uid,HEAP32[r+24>>2]=_.gid,HEAP32[r+28>>2]=_.rdev,tempI64=[_.size>>>0,(tempDouble=_.size,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+40>>2]=tempI64[0],HEAP32[r+44>>2]=tempI64[1],HEAP32[r+48>>2]=4096,HEAP32[r+52>>2]=_.blocks;var n=_.atime.getTime(),s=_.mtime.getTime(),a=_.ctime.getTime();return tempI64=[Math.floor(n/1e3)>>>0,(tempDouble=Math.floor(n/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+56>>2]=tempI64[0],HEAP32[r+60>>2]=tempI64[1],HEAPU32[r+64>>2]=n%1e3*1e3,tempI64=[Math.floor(s/1e3)>>>0,(tempDouble=Math.floor(s/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+72>>2]=tempI64[0],HEAP32[r+76>>2]=tempI64[1],HEAPU32[r+80>>2]=s%1e3*1e3,tempI64=[Math.floor(a/1e3)>>>0,(tempDouble=Math.floor(a/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+88>>2]=tempI64[0],HEAP32[r+92>>2]=tempI64[1],HEAPU32[r+96>>2]=a%1e3*1e3,tempI64=[_.ino>>>0,(tempDouble=_.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[r+104>>2]=tempI64[0],HEAP32[r+108>>2]=tempI64[1],0},doMsync:function(e,t,r,_,n){if(!FS.isFile(t.node.mode))throw new FS.ErrnoError(43);if(2&_)return 0;var s=HEAPU8.slice(e,e+r);FS.msync(t,s,n,r,_)},varargs:void 0,get:function(){return SYSCALLS.varargs+=4,HEAP32[SYSCALLS.varargs-4>>2]},getStr:function(e){return UTF8ToString(e)},getStreamFromFD:function(e){var t=FS.getStream(e);if(!t)throw new FS.ErrnoError(8);return t}};function _proc_exit(e){EXITSTATUS=e,keepRuntimeAlive()||(Module.onExit&&Module.onExit(e),ABORT=!0),quit_(e,new ExitStatus(e))}function exitJS(e,t){EXITSTATUS=e,_proc_exit(e)}_proc_exit.sig=\"vi\";var _exit=exitJS;function _fd_close(e){try{var t=SYSCALLS.getStreamFromFD(e);return FS.close(t),0}catch(e){if(\"undefined\"==typeof FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function convertI32PairToI53Checked(e,t){return t+2097152>>>0<4194305-!!e?(e>>>0)+4294967296*t:NaN}function _fd_seek(e,t,r,_,n){try{var s=convertI32PairToI53Checked(t,r);if(isNaN(s))return 61;var a=SYSCALLS.getStreamFromFD(e);return FS.llseek(a,s,_),tempI64=[a.position>>>0,(tempDouble=a.position,+Math.abs(tempDouble)>=1?tempDouble>0?(0|Math.min(+Math.floor(tempDouble/4294967296),4294967295))>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[n>>2]=tempI64[0],HEAP32[n+4>>2]=tempI64[1],a.getdents&&0===s&&0===_&&(a.getdents=null),0}catch(e){if(\"undefined\"==typeof FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(e,t,r,_){for(var n=0,s=0;s>2],o=HEAPU32[t+4>>2];t+=8;var i=FS.write(e,HEAP8,a,o,_);if(i<0)return-1;n+=i,void 0!==_&&(_+=i)}return n}function _fd_write(e,t,r,_){try{var n=doWritev(SYSCALLS.getStreamFromFD(e),t,r);return HEAPU32[_>>2]=n,0}catch(e){if(\"undefined\"==typeof FS||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _tree_sitter_log_callback(e,t){if(currentLogCallback){const r=UTF8ToString(t);currentLogCallback(r,0!==e)}}function _tree_sitter_parse_callback(e,t,r,_,n){var s=currentParseCallback(t,{row:r,column:_});\"string\"==typeof s?(setValue(n,s.length,\"i32\"),stringToUTF16(s,e,10240)):setValue(n,0,\"i32\")}function handleException(e){if(e instanceof ExitStatus||\"unwind\"==e)return EXITSTATUS;quit_(1,e)}function allocateUTF8OnStack(e){var t=lengthBytesUTF8(e)+1,r=stackAlloc(t);return stringToUTF8Array(e,HEAP8,r,t),r}function stringToUTF16(e,t,r){if(void 0===r&&(r=2147483647),r<2)return 0;for(var _=t,n=(r-=2)<2*e.length?r/2:e.length,s=0;s>1]=a,t+=2}return HEAP16[t>>1]=0,t-_}function AsciiToString(e){for(var t=\"\";;){var r=HEAPU8[e++>>0];if(!r)return t;t+=String.fromCharCode(r)}}_exit.sig=\"vi\",_fd_close.sig=\"ii\",_fd_seek.sig=\"iijip\",_fd_write.sig=\"iippp\";var asmLibraryArg={__heap_base:___heap_base,__indirect_function_table:wasmTable,__memory_base:___memory_base,__stack_pointer:___stack_pointer,__table_base:___table_base,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,abort:_abort,emscripten_get_now:_emscripten_get_now,emscripten_memcpy_big:_emscripten_memcpy_big,emscripten_resize_heap:_emscripten_resize_heap,exit:_exit,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write,memory:wasmMemory,tree_sitter_log_callback:_tree_sitter_log_callback,tree_sitter_parse_callback:_tree_sitter_parse_callback},asm=createWasm(),___wasm_call_ctors=Module.___wasm_call_ctors=function(){return(___wasm_call_ctors=Module.___wasm_call_ctors=Module.asm.__wasm_call_ctors).apply(null,arguments)},___wasm_apply_data_relocs=Module.___wasm_apply_data_relocs=function(){return(___wasm_apply_data_relocs=Module.___wasm_apply_data_relocs=Module.asm.__wasm_apply_data_relocs).apply(null,arguments)},_malloc=Module._malloc=function(){return(_malloc=Module._malloc=Module.asm.malloc).apply(null,arguments)},_calloc=Module._calloc=function(){return(_calloc=Module._calloc=Module.asm.calloc).apply(null,arguments)},_realloc=Module._realloc=function(){return(_realloc=Module._realloc=Module.asm.realloc).apply(null,arguments)},_free=Module._free=function(){return(_free=Module._free=Module.asm.free).apply(null,arguments)},_ts_language_symbol_count=Module._ts_language_symbol_count=function(){return(_ts_language_symbol_count=Module._ts_language_symbol_count=Module.asm.ts_language_symbol_count).apply(null,arguments)},_ts_language_version=Module._ts_language_version=function(){return(_ts_language_version=Module._ts_language_version=Module.asm.ts_language_version).apply(null,arguments)},_ts_language_field_count=Module._ts_language_field_count=function(){return(_ts_language_field_count=Module._ts_language_field_count=Module.asm.ts_language_field_count).apply(null,arguments)},_ts_language_symbol_name=Module._ts_language_symbol_name=function(){return(_ts_language_symbol_name=Module._ts_language_symbol_name=Module.asm.ts_language_symbol_name).apply(null,arguments)},_ts_language_symbol_for_name=Module._ts_language_symbol_for_name=function(){return(_ts_language_symbol_for_name=Module._ts_language_symbol_for_name=Module.asm.ts_language_symbol_for_name).apply(null,arguments)},_ts_language_symbol_type=Module._ts_language_symbol_type=function(){return(_ts_language_symbol_type=Module._ts_language_symbol_type=Module.asm.ts_language_symbol_type).apply(null,arguments)},_ts_language_field_name_for_id=Module._ts_language_field_name_for_id=function(){return(_ts_language_field_name_for_id=Module._ts_language_field_name_for_id=Module.asm.ts_language_field_name_for_id).apply(null,arguments)},_memset=Module._memset=function(){return(_memset=Module._memset=Module.asm.memset).apply(null,arguments)},_memcpy=Module._memcpy=function(){return(_memcpy=Module._memcpy=Module.asm.memcpy).apply(null,arguments)},_ts_parser_delete=Module._ts_parser_delete=function(){return(_ts_parser_delete=Module._ts_parser_delete=Module.asm.ts_parser_delete).apply(null,arguments)},_ts_parser_reset=Module._ts_parser_reset=function(){return(_ts_parser_reset=Module._ts_parser_reset=Module.asm.ts_parser_reset).apply(null,arguments)},_ts_parser_set_language=Module._ts_parser_set_language=function(){return(_ts_parser_set_language=Module._ts_parser_set_language=Module.asm.ts_parser_set_language).apply(null,arguments)},_ts_parser_timeout_micros=Module._ts_parser_timeout_micros=function(){return(_ts_parser_timeout_micros=Module._ts_parser_timeout_micros=Module.asm.ts_parser_timeout_micros).apply(null,arguments)},_ts_parser_set_timeout_micros=Module._ts_parser_set_timeout_micros=function(){return(_ts_parser_set_timeout_micros=Module._ts_parser_set_timeout_micros=Module.asm.ts_parser_set_timeout_micros).apply(null,arguments)},_memmove=Module._memmove=function(){return(_memmove=Module._memmove=Module.asm.memmove).apply(null,arguments)},_memcmp=Module._memcmp=function(){return(_memcmp=Module._memcmp=Module.asm.memcmp).apply(null,arguments)},_ts_query_new=Module._ts_query_new=function(){return(_ts_query_new=Module._ts_query_new=Module.asm.ts_query_new).apply(null,arguments)},_ts_query_delete=Module._ts_query_delete=function(){return(_ts_query_delete=Module._ts_query_delete=Module.asm.ts_query_delete).apply(null,arguments)},_iswspace=Module._iswspace=function(){return(_iswspace=Module._iswspace=Module.asm.iswspace).apply(null,arguments)},_iswalnum=Module._iswalnum=function(){return(_iswalnum=Module._iswalnum=Module.asm.iswalnum).apply(null,arguments)},_ts_query_pattern_count=Module._ts_query_pattern_count=function(){return(_ts_query_pattern_count=Module._ts_query_pattern_count=Module.asm.ts_query_pattern_count).apply(null,arguments)},_ts_query_capture_count=Module._ts_query_capture_count=function(){return(_ts_query_capture_count=Module._ts_query_capture_count=Module.asm.ts_query_capture_count).apply(null,arguments)},_ts_query_string_count=Module._ts_query_string_count=function(){return(_ts_query_string_count=Module._ts_query_string_count=Module.asm.ts_query_string_count).apply(null,arguments)},_ts_query_capture_name_for_id=Module._ts_query_capture_name_for_id=function(){return(_ts_query_capture_name_for_id=Module._ts_query_capture_name_for_id=Module.asm.ts_query_capture_name_for_id).apply(null,arguments)},_ts_query_string_value_for_id=Module._ts_query_string_value_for_id=function(){return(_ts_query_string_value_for_id=Module._ts_query_string_value_for_id=Module.asm.ts_query_string_value_for_id).apply(null,arguments)},_ts_query_predicates_for_pattern=Module._ts_query_predicates_for_pattern=function(){return(_ts_query_predicates_for_pattern=Module._ts_query_predicates_for_pattern=Module.asm.ts_query_predicates_for_pattern).apply(null,arguments)},_ts_tree_copy=Module._ts_tree_copy=function(){return(_ts_tree_copy=Module._ts_tree_copy=Module.asm.ts_tree_copy).apply(null,arguments)},_ts_tree_delete=Module._ts_tree_delete=function(){return(_ts_tree_delete=Module._ts_tree_delete=Module.asm.ts_tree_delete).apply(null,arguments)},_ts_init=Module._ts_init=function(){return(_ts_init=Module._ts_init=Module.asm.ts_init).apply(null,arguments)},_ts_parser_new_wasm=Module._ts_parser_new_wasm=function(){return(_ts_parser_new_wasm=Module._ts_parser_new_wasm=Module.asm.ts_parser_new_wasm).apply(null,arguments)},_ts_parser_enable_logger_wasm=Module._ts_parser_enable_logger_wasm=function(){return(_ts_parser_enable_logger_wasm=Module._ts_parser_enable_logger_wasm=Module.asm.ts_parser_enable_logger_wasm).apply(null,arguments)},_ts_parser_parse_wasm=Module._ts_parser_parse_wasm=function(){return(_ts_parser_parse_wasm=Module._ts_parser_parse_wasm=Module.asm.ts_parser_parse_wasm).apply(null,arguments)},_ts_language_type_is_named_wasm=Module._ts_language_type_is_named_wasm=function(){return(_ts_language_type_is_named_wasm=Module._ts_language_type_is_named_wasm=Module.asm.ts_language_type_is_named_wasm).apply(null,arguments)},_ts_language_type_is_visible_wasm=Module._ts_language_type_is_visible_wasm=function(){return(_ts_language_type_is_visible_wasm=Module._ts_language_type_is_visible_wasm=Module.asm.ts_language_type_is_visible_wasm).apply(null,arguments)},_ts_tree_root_node_wasm=Module._ts_tree_root_node_wasm=function(){return(_ts_tree_root_node_wasm=Module._ts_tree_root_node_wasm=Module.asm.ts_tree_root_node_wasm).apply(null,arguments)},_ts_tree_edit_wasm=Module._ts_tree_edit_wasm=function(){return(_ts_tree_edit_wasm=Module._ts_tree_edit_wasm=Module.asm.ts_tree_edit_wasm).apply(null,arguments)},_ts_tree_get_changed_ranges_wasm=Module._ts_tree_get_changed_ranges_wasm=function(){return(_ts_tree_get_changed_ranges_wasm=Module._ts_tree_get_changed_ranges_wasm=Module.asm.ts_tree_get_changed_ranges_wasm).apply(null,arguments)},_ts_tree_cursor_new_wasm=Module._ts_tree_cursor_new_wasm=function(){return(_ts_tree_cursor_new_wasm=Module._ts_tree_cursor_new_wasm=Module.asm.ts_tree_cursor_new_wasm).apply(null,arguments)},_ts_tree_cursor_delete_wasm=Module._ts_tree_cursor_delete_wasm=function(){return(_ts_tree_cursor_delete_wasm=Module._ts_tree_cursor_delete_wasm=Module.asm.ts_tree_cursor_delete_wasm).apply(null,arguments)},_ts_tree_cursor_reset_wasm=Module._ts_tree_cursor_reset_wasm=function(){return(_ts_tree_cursor_reset_wasm=Module._ts_tree_cursor_reset_wasm=Module.asm.ts_tree_cursor_reset_wasm).apply(null,arguments)},_ts_tree_cursor_goto_first_child_wasm=Module._ts_tree_cursor_goto_first_child_wasm=function(){return(_ts_tree_cursor_goto_first_child_wasm=Module._ts_tree_cursor_goto_first_child_wasm=Module.asm.ts_tree_cursor_goto_first_child_wasm).apply(null,arguments)},_ts_tree_cursor_goto_next_sibling_wasm=Module._ts_tree_cursor_goto_next_sibling_wasm=function(){return(_ts_tree_cursor_goto_next_sibling_wasm=Module._ts_tree_cursor_goto_next_sibling_wasm=Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply(null,arguments)},_ts_tree_cursor_goto_parent_wasm=Module._ts_tree_cursor_goto_parent_wasm=function(){return(_ts_tree_cursor_goto_parent_wasm=Module._ts_tree_cursor_goto_parent_wasm=Module.asm.ts_tree_cursor_goto_parent_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_type_id_wasm=Module._ts_tree_cursor_current_node_type_id_wasm=function(){return(_ts_tree_cursor_current_node_type_id_wasm=Module._ts_tree_cursor_current_node_type_id_wasm=Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_is_named_wasm=Module._ts_tree_cursor_current_node_is_named_wasm=function(){return(_ts_tree_cursor_current_node_is_named_wasm=Module._ts_tree_cursor_current_node_is_named_wasm=Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_is_missing_wasm=Module._ts_tree_cursor_current_node_is_missing_wasm=function(){return(_ts_tree_cursor_current_node_is_missing_wasm=Module._ts_tree_cursor_current_node_is_missing_wasm=Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_id_wasm=Module._ts_tree_cursor_current_node_id_wasm=function(){return(_ts_tree_cursor_current_node_id_wasm=Module._ts_tree_cursor_current_node_id_wasm=Module.asm.ts_tree_cursor_current_node_id_wasm).apply(null,arguments)},_ts_tree_cursor_start_position_wasm=Module._ts_tree_cursor_start_position_wasm=function(){return(_ts_tree_cursor_start_position_wasm=Module._ts_tree_cursor_start_position_wasm=Module.asm.ts_tree_cursor_start_position_wasm).apply(null,arguments)},_ts_tree_cursor_end_position_wasm=Module._ts_tree_cursor_end_position_wasm=function(){return(_ts_tree_cursor_end_position_wasm=Module._ts_tree_cursor_end_position_wasm=Module.asm.ts_tree_cursor_end_position_wasm).apply(null,arguments)},_ts_tree_cursor_start_index_wasm=Module._ts_tree_cursor_start_index_wasm=function(){return(_ts_tree_cursor_start_index_wasm=Module._ts_tree_cursor_start_index_wasm=Module.asm.ts_tree_cursor_start_index_wasm).apply(null,arguments)},_ts_tree_cursor_end_index_wasm=Module._ts_tree_cursor_end_index_wasm=function(){return(_ts_tree_cursor_end_index_wasm=Module._ts_tree_cursor_end_index_wasm=Module.asm.ts_tree_cursor_end_index_wasm).apply(null,arguments)},_ts_tree_cursor_current_field_id_wasm=Module._ts_tree_cursor_current_field_id_wasm=function(){return(_ts_tree_cursor_current_field_id_wasm=Module._ts_tree_cursor_current_field_id_wasm=Module.asm.ts_tree_cursor_current_field_id_wasm).apply(null,arguments)},_ts_tree_cursor_current_node_wasm=Module._ts_tree_cursor_current_node_wasm=function(){return(_ts_tree_cursor_current_node_wasm=Module._ts_tree_cursor_current_node_wasm=Module.asm.ts_tree_cursor_current_node_wasm).apply(null,arguments)},_ts_node_symbol_wasm=Module._ts_node_symbol_wasm=function(){return(_ts_node_symbol_wasm=Module._ts_node_symbol_wasm=Module.asm.ts_node_symbol_wasm).apply(null,arguments)},_ts_node_child_count_wasm=Module._ts_node_child_count_wasm=function(){return(_ts_node_child_count_wasm=Module._ts_node_child_count_wasm=Module.asm.ts_node_child_count_wasm).apply(null,arguments)},_ts_node_named_child_count_wasm=Module._ts_node_named_child_count_wasm=function(){return(_ts_node_named_child_count_wasm=Module._ts_node_named_child_count_wasm=Module.asm.ts_node_named_child_count_wasm).apply(null,arguments)},_ts_node_child_wasm=Module._ts_node_child_wasm=function(){return(_ts_node_child_wasm=Module._ts_node_child_wasm=Module.asm.ts_node_child_wasm).apply(null,arguments)},_ts_node_named_child_wasm=Module._ts_node_named_child_wasm=function(){return(_ts_node_named_child_wasm=Module._ts_node_named_child_wasm=Module.asm.ts_node_named_child_wasm).apply(null,arguments)},_ts_node_child_by_field_id_wasm=Module._ts_node_child_by_field_id_wasm=function(){return(_ts_node_child_by_field_id_wasm=Module._ts_node_child_by_field_id_wasm=Module.asm.ts_node_child_by_field_id_wasm).apply(null,arguments)},_ts_node_next_sibling_wasm=Module._ts_node_next_sibling_wasm=function(){return(_ts_node_next_sibling_wasm=Module._ts_node_next_sibling_wasm=Module.asm.ts_node_next_sibling_wasm).apply(null,arguments)},_ts_node_prev_sibling_wasm=Module._ts_node_prev_sibling_wasm=function(){return(_ts_node_prev_sibling_wasm=Module._ts_node_prev_sibling_wasm=Module.asm.ts_node_prev_sibling_wasm).apply(null,arguments)},_ts_node_next_named_sibling_wasm=Module._ts_node_next_named_sibling_wasm=function(){return(_ts_node_next_named_sibling_wasm=Module._ts_node_next_named_sibling_wasm=Module.asm.ts_node_next_named_sibling_wasm).apply(null,arguments)},_ts_node_prev_named_sibling_wasm=Module._ts_node_prev_named_sibling_wasm=function(){return(_ts_node_prev_named_sibling_wasm=Module._ts_node_prev_named_sibling_wasm=Module.asm.ts_node_prev_named_sibling_wasm).apply(null,arguments)},_ts_node_parent_wasm=Module._ts_node_parent_wasm=function(){return(_ts_node_parent_wasm=Module._ts_node_parent_wasm=Module.asm.ts_node_parent_wasm).apply(null,arguments)},_ts_node_descendant_for_index_wasm=Module._ts_node_descendant_for_index_wasm=function(){return(_ts_node_descendant_for_index_wasm=Module._ts_node_descendant_for_index_wasm=Module.asm.ts_node_descendant_for_index_wasm).apply(null,arguments)},_ts_node_named_descendant_for_index_wasm=Module._ts_node_named_descendant_for_index_wasm=function(){return(_ts_node_named_descendant_for_index_wasm=Module._ts_node_named_descendant_for_index_wasm=Module.asm.ts_node_named_descendant_for_index_wasm).apply(null,arguments)},_ts_node_descendant_for_position_wasm=Module._ts_node_descendant_for_position_wasm=function(){return(_ts_node_descendant_for_position_wasm=Module._ts_node_descendant_for_position_wasm=Module.asm.ts_node_descendant_for_position_wasm).apply(null,arguments)},_ts_node_named_descendant_for_position_wasm=Module._ts_node_named_descendant_for_position_wasm=function(){return(_ts_node_named_descendant_for_position_wasm=Module._ts_node_named_descendant_for_position_wasm=Module.asm.ts_node_named_descendant_for_position_wasm).apply(null,arguments)},_ts_node_start_point_wasm=Module._ts_node_start_point_wasm=function(){return(_ts_node_start_point_wasm=Module._ts_node_start_point_wasm=Module.asm.ts_node_start_point_wasm).apply(null,arguments)},_ts_node_end_point_wasm=Module._ts_node_end_point_wasm=function(){return(_ts_node_end_point_wasm=Module._ts_node_end_point_wasm=Module.asm.ts_node_end_point_wasm).apply(null,arguments)},_ts_node_start_index_wasm=Module._ts_node_start_index_wasm=function(){return(_ts_node_start_index_wasm=Module._ts_node_start_index_wasm=Module.asm.ts_node_start_index_wasm).apply(null,arguments)},_ts_node_end_index_wasm=Module._ts_node_end_index_wasm=function(){return(_ts_node_end_index_wasm=Module._ts_node_end_index_wasm=Module.asm.ts_node_end_index_wasm).apply(null,arguments)},_ts_node_to_string_wasm=Module._ts_node_to_string_wasm=function(){return(_ts_node_to_string_wasm=Module._ts_node_to_string_wasm=Module.asm.ts_node_to_string_wasm).apply(null,arguments)},_ts_node_children_wasm=Module._ts_node_children_wasm=function(){return(_ts_node_children_wasm=Module._ts_node_children_wasm=Module.asm.ts_node_children_wasm).apply(null,arguments)},_ts_node_named_children_wasm=Module._ts_node_named_children_wasm=function(){return(_ts_node_named_children_wasm=Module._ts_node_named_children_wasm=Module.asm.ts_node_named_children_wasm).apply(null,arguments)},_ts_node_descendants_of_type_wasm=Module._ts_node_descendants_of_type_wasm=function(){return(_ts_node_descendants_of_type_wasm=Module._ts_node_descendants_of_type_wasm=Module.asm.ts_node_descendants_of_type_wasm).apply(null,arguments)},_ts_node_is_named_wasm=Module._ts_node_is_named_wasm=function(){return(_ts_node_is_named_wasm=Module._ts_node_is_named_wasm=Module.asm.ts_node_is_named_wasm).apply(null,arguments)},_ts_node_has_changes_wasm=Module._ts_node_has_changes_wasm=function(){return(_ts_node_has_changes_wasm=Module._ts_node_has_changes_wasm=Module.asm.ts_node_has_changes_wasm).apply(null,arguments)},_ts_node_has_error_wasm=Module._ts_node_has_error_wasm=function(){return(_ts_node_has_error_wasm=Module._ts_node_has_error_wasm=Module.asm.ts_node_has_error_wasm).apply(null,arguments)},_ts_node_is_missing_wasm=Module._ts_node_is_missing_wasm=function(){return(_ts_node_is_missing_wasm=Module._ts_node_is_missing_wasm=Module.asm.ts_node_is_missing_wasm).apply(null,arguments)},_ts_query_matches_wasm=Module._ts_query_matches_wasm=function(){return(_ts_query_matches_wasm=Module._ts_query_matches_wasm=Module.asm.ts_query_matches_wasm).apply(null,arguments)},_ts_query_captures_wasm=Module._ts_query_captures_wasm=function(){return(_ts_query_captures_wasm=Module._ts_query_captures_wasm=Module.asm.ts_query_captures_wasm).apply(null,arguments)},___cxa_atexit=Module.___cxa_atexit=function(){return(___cxa_atexit=Module.___cxa_atexit=Module.asm.__cxa_atexit).apply(null,arguments)},_iswdigit=Module._iswdigit=function(){return(_iswdigit=Module._iswdigit=Module.asm.iswdigit).apply(null,arguments)},_iswalpha=Module._iswalpha=function(){return(_iswalpha=Module._iswalpha=Module.asm.iswalpha).apply(null,arguments)},_iswlower=Module._iswlower=function(){return(_iswlower=Module._iswlower=Module.asm.iswlower).apply(null,arguments)},_memchr=Module._memchr=function(){return(_memchr=Module._memchr=Module.asm.memchr).apply(null,arguments)},_strlen=Module._strlen=function(){return(_strlen=Module._strlen=Module.asm.strlen).apply(null,arguments)},_towupper=Module._towupper=function(){return(_towupper=Module._towupper=Module.asm.towupper).apply(null,arguments)},_setThrew=Module._setThrew=function(){return(_setThrew=Module._setThrew=Module.asm.setThrew).apply(null,arguments)},stackSave=Module.stackSave=function(){return(stackSave=Module.stackSave=Module.asm.stackSave).apply(null,arguments)},stackRestore=Module.stackRestore=function(){return(stackRestore=Module.stackRestore=Module.asm.stackRestore).apply(null,arguments)},stackAlloc=Module.stackAlloc=function(){return(stackAlloc=Module.stackAlloc=Module.asm.stackAlloc).apply(null,arguments)},__Znwm=Module.__Znwm=function(){return(__Znwm=Module.__Znwm=Module.asm._Znwm).apply(null,arguments)},__ZdlPv=Module.__ZdlPv=function(){return(__ZdlPv=Module.__ZdlPv=Module.asm._ZdlPv).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply(null,arguments)},__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=function(){return(__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm=Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply(null,arguments)},__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=function(){return(__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc=Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply(null,arguments)},__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply(null,arguments)},__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply(null,arguments)},__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=function(){return(__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw=Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw).apply(null,arguments)},dynCall_jiji=Module.dynCall_jiji=function(){return(dynCall_jiji=Module.dynCall_jiji=Module.asm.dynCall_jiji).apply(null,arguments)},_orig$ts_parser_timeout_micros=Module._orig$ts_parser_timeout_micros=function(){return(_orig$ts_parser_timeout_micros=Module._orig$ts_parser_timeout_micros=Module.asm.orig$ts_parser_timeout_micros).apply(null,arguments)},_orig$ts_parser_set_timeout_micros=Module._orig$ts_parser_set_timeout_micros=function(){return(_orig$ts_parser_set_timeout_micros=Module._orig$ts_parser_set_timeout_micros=Module.asm.orig$ts_parser_set_timeout_micros).apply(null,arguments)},calledRun;function callMain(e){var t=Module._main;if(t){(e=e||[]).unshift(thisProgram);var r=e.length,_=stackAlloc(4*(r+1)),n=_>>2;e.forEach((e=>{HEAP32[n++]=allocateUTF8OnStack(e)})),HEAP32[n]=0;try{var s=t(r,_);return exitJS(s,!0),s}catch(e){return handleException(e)}}}Module.AsciiToString=AsciiToString,Module.stringToUTF16=stringToUTF16,dependenciesFulfilled=function e(){calledRun||run(),calledRun||(dependenciesFulfilled=e)};var dylibsLoaded=!1;function run(e){function t(){calledRun||(calledRun=!0,Module.calledRun=!0,ABORT||(initRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),shouldRunNow&&callMain(e),postRun()))}e=e||arguments_,runDependencies>0||!dylibsLoaded&&(preloadDylibs(),dylibsLoaded=!0,runDependencies>0)||(preRun(),runDependencies>0||(Module.setStatus?(Module.setStatus(\"Running...\"),setTimeout((function(){setTimeout((function(){Module.setStatus(\"\")}),1),t()}),1)):t()))}if(Module.preInit)for(\"function\"==typeof Module.preInit&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run();const C=Module,INTERNAL={},SIZE_OF_INT=4,SIZE_OF_NODE=5*SIZE_OF_INT,SIZE_OF_POINT=2*SIZE_OF_INT,SIZE_OF_RANGE=2*SIZE_OF_INT+2*SIZE_OF_POINT,ZERO_POINT={row:0,column:0},QUERY_WORD_REGEX=/[\\w-.]*/g,PREDICATE_STEP_TYPE_CAPTURE=1,PREDICATE_STEP_TYPE_STRING=2,LANGUAGE_FUNCTION_REGEX=/^_?tree_sitter_\\w+/;var VERSION,MIN_COMPATIBLE_VERSION,TRANSFER_BUFFER,currentParseCallback,currentLogCallback;class ParserImpl{static init(){TRANSFER_BUFFER=C._ts_init(),VERSION=getValue(TRANSFER_BUFFER,\"i32\"),MIN_COMPATIBLE_VERSION=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\")}initialize(){C._ts_parser_new_wasm(),this[0]=getValue(TRANSFER_BUFFER,\"i32\"),this[1]=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\")}delete(){C._ts_parser_delete(this[0]),C._free(this[1]),this[0]=0,this[1]=0}setLanguage(e){let t;if(e){if(e.constructor!==Language)throw new Error(\"Argument must be a Language\");{t=e[0];const r=C._ts_language_version(t);if(re.slice(t,_);else{if(\"function\"!=typeof e)throw new Error(\"Argument must be a string or a function\");currentParseCallback=e}this.logCallback?(currentLogCallback=this.logCallback,C._ts_parser_enable_logger_wasm(this[0],1)):(currentLogCallback=null,C._ts_parser_enable_logger_wasm(this[0],0));let _=0,n=0;if(r&&r.includedRanges){_=r.includedRanges.length,n=C._calloc(_,SIZE_OF_RANGE);let e=n;for(let t=0;t<_;t++)marshalRange(e,r.includedRanges[t]),e+=SIZE_OF_RANGE}const s=C._ts_parser_parse_wasm(this[0],this[1],t?t[0]:0,n,_);if(!s)throw currentParseCallback=null,currentLogCallback=null,new Error(\"Parsing failed\");const a=new Tree(INTERNAL,s,this.language,currentParseCallback);return currentParseCallback=null,currentLogCallback=null,a}reset(){C._ts_parser_reset(this[0])}setTimeoutMicros(e){C._ts_parser_set_timeout_micros(this[0],e)}getTimeoutMicros(){return C._ts_parser_timeout_micros(this[0])}setLogger(e){if(e){if(\"function\"!=typeof e)throw new Error(\"Logger callback must be a function\")}else e=null;return this.logCallback=e,this}getLogger(){return this.logCallback}}class Tree{constructor(e,t,r,_){assertInternal(e),this[0]=t,this.language=r,this.textCallback=_}copy(){const e=C._ts_tree_copy(this[0]);return new Tree(INTERNAL,e,this.language,this.textCallback)}delete(){C._ts_tree_delete(this[0]),this[0]=0}edit(e){marshalEdit(e),C._ts_tree_edit_wasm(this[0])}get rootNode(){return C._ts_tree_root_node_wasm(this[0]),unmarshalNode(this)}getLanguage(){return this.language}walk(){return this.rootNode.walk()}getChangedRanges(e){if(e.constructor!==Tree)throw new TypeError(\"Argument must be a Tree\");C._ts_tree_get_changed_ranges_wasm(this[0],e[0]);const t=getValue(TRANSFER_BUFFER,\"i32\"),r=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\"),_=new Array(t);if(t>0){let e=r;for(let r=0;r0){let r=t;for(let t=0;t0){let r=t;for(let t=0;t0){let e=o;for(let t=0;t0){if(\"string\"!==n[0].type)throw new Error(\"Predicates must begin with a literal value\");const t=n[0].value;let r=!0;switch(t){case\"not-eq?\":r=!1;case\"eq?\":if(3!==n.length)throw new Error(\"Wrong number of arguments to `#eq?` predicate. Expected 2, got \"+(n.length-1));if(\"capture\"!==n[1].type)throw new Error(`First argument of \\`#eq?\\` predicate must be a capture. Got \"${n[1].value}\"`);if(\"capture\"===n[2].type){const t=n[1].name,_=n[2].name;m[e].push((function(e){let n,s;for(const r of e)r.name===t&&(n=r.node),r.name===_&&(s=r.node);return void 0===n||void 0===s||n.text===s.text===r}))}else{const t=n[1].name,_=n[2].value;m[e].push((function(e){for(const n of e)if(n.name===t)return n.node.text===_===r;return!0}))}break;case\"not-match?\":r=!1;case\"match?\":if(3!==n.length)throw new Error(`Wrong number of arguments to \\`#match?\\` predicate. Expected 2, got ${n.length-1}.`);if(\"capture\"!==n[1].type)throw new Error(`First argument of \\`#match?\\` predicate must be a capture. Got \"${n[1].value}\".`);if(\"string\"!==n[2].type)throw new Error(`Second argument of \\`#match?\\` predicate must be a string. Got @${n[2].value}.`);const _=n[1].name,s=new RegExp(n[2].value);m[e].push((function(e){for(const t of e)if(t.name===_)return s.test(t.node.text)===r;return!0}));break;case\"set!\":if(n.length<2||n.length>3)throw new Error(`Wrong number of arguments to \\`#set!\\` predicate. Expected 1 or 2. Got ${n.length-1}.`);if(n.some((e=>\"string\"!==e.type)))throw new Error('Arguments to `#set!` predicate must be a strings.\".');l[e]||(l[e]={}),l[e][n[1].value]=n[2]?n[2].value:null;break;case\"is?\":case\"is-not?\":if(n.length<2||n.length>3)throw new Error(`Wrong number of arguments to \\`#${t}\\` predicate. Expected 1 or 2. Got ${n.length-1}.`);if(n.some((e=>\"string\"!==e.type)))throw new Error(`Arguments to \\`#${t}\\` predicate must be a strings.\".`);const a=\"is?\"===t?u:d;a[e]||(a[e]={}),a[e][n[1].value]=n[2]?n[2].value:null;break;default:c[e].push({operator:t,operands:n.slice(1)})}n.length=0}}Object.freeze(l[e]),Object.freeze(u[e]),Object.freeze(d[e])}return C._free(r),new Query(INTERNAL,_,o,m,c,Object.freeze(l),Object.freeze(u),Object.freeze(d))}static load(e){let t;if(e instanceof Uint8Array)t=Promise.resolve(e);else{const r=e;if(\"undefined\"!=typeof process&&process.versions&&process.versions.node){const e=require(\"fs\");t=Promise.resolve(e.readFileSync(r))}else t=fetch(r).then((e=>e.arrayBuffer().then((t=>{if(e.ok)return new Uint8Array(t);{const r=new TextDecoder(\"utf-8\").decode(t);throw new Error(`Language.load failed with status ${e.status}.\\n\\n${r}`)}}))))}const r=\"function\"==typeof loadSideModule?loadSideModule:loadWebAssemblyModule;return t.then((e=>r(e,{loadAsync:!0}))).then((e=>{const t=Object.keys(e),r=t.find((e=>LANGUAGE_FUNCTION_REGEX.test(e)&&!e.includes(\"external_scanner_\")));r||console.log(`Couldn't find language function in WASM file. Symbols:\\n${JSON.stringify(t,null,2)}`);const _=e[r]();return new Language(INTERNAL,_)}))}}class Query{constructor(e,t,r,_,n,s,a,o){assertInternal(e),this[0]=t,this.captureNames=r,this.textPredicates=_,this.predicates=n,this.setProperties=s,this.assertedProperties=a,this.refutedProperties=o,this.exceededMatchLimit=!1}delete(){C._ts_query_delete(this[0]),this[0]=0}matches(e,t,r,_){t||(t=ZERO_POINT),r||(r=ZERO_POINT),_||(_={});let n=_.matchLimit;if(void 0===n)n=0;else if(\"number\"!=typeof n)throw new Error(\"Arguments must be numbers\");marshalNode(e),C._ts_query_matches_wasm(this[0],e.tree[0],t.row,t.column,r.row,r.column,n);const s=getValue(TRANSFER_BUFFER,\"i32\"),a=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\"),o=getValue(TRANSFER_BUFFER+2*SIZE_OF_INT,\"i32\"),i=new Array(s);this.exceededMatchLimit=!!o;let l=0,u=a;for(let t=0;te(n)))){i[l++]={pattern:r,captures:n};const e=this.setProperties[r];e&&(i[t].setProperties=e);const _=this.assertedProperties[r];_&&(i[t].assertedProperties=_);const s=this.refutedProperties[r];s&&(i[t].refutedProperties=s)}}return i.length=l,C._free(a),i}captures(e,t,r,_){t||(t=ZERO_POINT),r||(r=ZERO_POINT),_||(_={});let n=_.matchLimit;if(void 0===n)n=0;else if(\"number\"!=typeof n)throw new Error(\"Arguments must be numbers\");marshalNode(e),C._ts_query_captures_wasm(this[0],e.tree[0],t.row,t.column,r.row,r.column,n);const s=getValue(TRANSFER_BUFFER,\"i32\"),a=getValue(TRANSFER_BUFFER+SIZE_OF_INT,\"i32\"),o=getValue(TRANSFER_BUFFER+2*SIZE_OF_INT,\"i32\"),i=[];this.exceededMatchLimit=!!o;const l=[];let u=a;for(let t=0;te(l)))){const e=l[_],r=this.setProperties[t];r&&(e.setProperties=r);const n=this.assertedProperties[t];n&&(e.assertedProperties=n);const s=this.refutedProperties[t];s&&(e.refutedProperties=s),i.push(e)}}return C._free(a),i}predicatesForPattern(e){return this.predicates[e]}didExceedMatchLimit(){return this.exceededMatchLimit}}function getText(e,t,r){const _=r-t;let n=e.textCallback(t,null,r);for(t+=n.length;t0))break;t+=_.length,n+=_}return t>r&&(n=n.slice(0,_)),n}function unmarshalCaptures(e,t,r,_){for(let n=0,s=_.length;n{ParserImpl.init(),resolveInitPromise()}})))}}return Parser}();\"object\"==typeof exports&&(module.exports=TreeSitter);\n","module.exports = require(\"@opentelemetry/instrumentation\");","module.exports = require(\"applicationinsights-native-metrics\");","module.exports = require(\"azure/functions-core\");","module.exports = require(\"azure/opentelemetry-instrumentation-azure-sdk\");","module.exports = require(\"assert\");","module.exports = require(\"async_hooks\");","module.exports = require(\"buffer\");","module.exports = require(\"child_process\");","module.exports = require(\"console\");","module.exports = require(\"constants\");","module.exports = require(\"crypto\");","module.exports = require(\"dns\");","module.exports = require(\"events\");","module.exports = require(\"fs\");","module.exports = require(\"http\");","module.exports = require(\"http2\");","module.exports = require(\"https\");","module.exports = require(\"module\");","module.exports = require(\"net\");","module.exports = require(\"os\");","module.exports = require(\"path\");","module.exports = require(\"process\");","module.exports = require(\"stream\");","module.exports = require(\"string_decoder\");","module.exports = require(\"timers\");","module.exports = require(\"tls\");","module.exports = require(\"tty\");","module.exports = require(\"url\");","module.exports = require(\"util\");","module.exports = require(\"worker_threads\");","module.exports = require(\"zlib\");","export function defaultHash(...args) {\n // JSON.stringify ellides `undefined` and function values by default. We do not want that.\n return JSON.stringify(args, (_, v) => (typeof v === 'object' ? v : String(v)));\n}\nexport default function memoize(fn, opts = {}) {\n const { hash = defaultHash, cache = new Map() } = opts;\n return function (...args) {\n const id = hash.apply(this, args);\n if (cache.has(id))\n return cache.get(id);\n let result = fn.apply(this, args);\n if (result instanceof Promise) {\n // eslint-disable-next-line github/no-then\n result = result.catch(error => {\n cache.delete(id);\n throw error;\n });\n }\n cache.set(id, result);\n return result;\n };\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node:net\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"node:os\");","import net from 'node:net';\nimport os from 'node:os';\n\nclass Locked extends Error {\n\tconstructor(port) {\n\t\tsuper(`${port} is locked`);\n\t}\n}\n\nconst lockedPorts = {\n\told: new Set(),\n\tyoung: new Set(),\n};\n\n// On this interval, the old locked ports are discarded,\n// the young locked ports are moved to old locked ports,\n// and a new young set for locked ports are created.\nconst releaseOldLockedPortsIntervalMs = 1000 * 15;\n\n// Lazily create interval on first use\nlet interval;\n\nconst getLocalHosts = () => {\n\tconst interfaces = os.networkInterfaces();\n\n\t// Add undefined value for createServer function to use default host,\n\t// and default IPv4 host in case createServer defaults to IPv6.\n\tconst results = new Set([undefined, '0.0.0.0']);\n\n\tfor (const _interface of Object.values(interfaces)) {\n\t\tfor (const config of _interface) {\n\t\t\tresults.add(config.address);\n\t\t}\n\t}\n\n\treturn results;\n};\n\nconst checkAvailablePort = options =>\n\tnew Promise((resolve, reject) => {\n\t\tconst server = net.createServer();\n\t\tserver.unref();\n\t\tserver.on('error', reject);\n\n\t\tserver.listen(options, () => {\n\t\t\tconst {port} = server.address();\n\t\t\tserver.close(() => {\n\t\t\t\tresolve(port);\n\t\t\t});\n\t\t});\n\t});\n\nconst getAvailablePort = async (options, hosts) => {\n\tif (options.host || options.port === 0) {\n\t\treturn checkAvailablePort(options);\n\t}\n\n\tfor (const host of hosts) {\n\t\ttry {\n\t\t\tawait checkAvailablePort({port: options.port, host}); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\tif (!['EADDRNOTAVAIL', 'EINVAL'].includes(error.code)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn options.port;\n};\n\nconst portCheckSequence = function * (ports) {\n\tif (ports) {\n\t\tyield * ports;\n\t}\n\n\tyield 0; // Fall back to 0 if anything else failed\n};\n\nexport default async function getPorts(options) {\n\tlet ports;\n\n\tif (options) {\n\t\tports = typeof options.port === 'number' ? [options.port] : options.port;\n\t}\n\n\tif (interval === undefined) {\n\t\tinterval = setInterval(() => {\n\t\t\tlockedPorts.old = lockedPorts.young;\n\t\t\tlockedPorts.young = new Set();\n\t\t}, releaseOldLockedPortsIntervalMs);\n\n\t\t// Does not exist in some environments (Electron, Jest jsdom env, browser, etc).\n\t\tif (interval.unref) {\n\t\t\tinterval.unref();\n\t\t}\n\t}\n\n\tconst hosts = getLocalHosts();\n\n\tfor (const port of portCheckSequence(ports)) {\n\t\ttry {\n\t\t\tlet availablePort = await getAvailablePort({...options, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\twhile (lockedPorts.old.has(availablePort) || lockedPorts.young.has(availablePort)) {\n\t\t\t\tif (port !== 0) {\n\t\t\t\t\tthrow new Locked(port);\n\t\t\t\t}\n\n\t\t\t\tavailablePort = await getAvailablePort({...options, port}, hosts); // eslint-disable-line no-await-in-loop\n\t\t\t}\n\n\t\t\tlockedPorts.young.add(availablePort);\n\n\t\t\treturn availablePort;\n\t\t} catch (error) {\n\t\t\tif (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof Locked)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow new Error('No available ports found');\n}\n\nexport function portNumbers(from, to) {\n\tif (!Number.isInteger(from) || !Number.isInteger(to)) {\n\t\tthrow new TypeError('`from` and `to` must be integer numbers');\n\t}\n\n\tif (from < 1024 || from > 65_535) {\n\t\tthrow new RangeError('`from` must be between 1024 and 65535');\n\t}\n\n\tif (to < 1024 || to > 65_536) {\n\t\tthrow new RangeError('`to` must be between 1024 and 65536');\n\t}\n\n\tif (to < from) {\n\t\tthrow new RangeError('`to` must be greater than or equal to `from`');\n\t}\n\n\tconst generator = function * (from, to) {\n\t\tfor (let port = from; port <= to; port++) {\n\t\t\tyield port;\n\t\t}\n\t};\n\n\treturn generator(from, to);\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(81843);\n"],"names":["Yallist","MAX","Symbol","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","get","self","key","doUse","node","hit","value","isStale","del","now","Date","unshiftNode","maxAge","diff","trim","walker","tail","prev","length","delete","removeNode","Entry","constructor","this","forEachStep","fn","thisp","undefined","call","module","exports","options","max","TypeError","Infinity","lc","stale","dispose","noDisposeOnSet","updateAgeOnGet","reset","mL","allowStale","mA","lengthCalculator","lC","forEach","itemCount","rforEach","head","next","keys","toArray","map","k","values","Map","dump","v","e","filter","h","dumpLru","set","len","has","item","unshift","peek","pop","load","arr","l","expiresAt","prune","ANY","Comparator","comp","parseOptions","loose","split","join","debug","parse","semver","operator","version","r","re","t","COMPARATORLOOSE","COMPARATOR","m","match","SemVer","toString","test","er","cmp","intersects","Range","includePrerelease","startsWith","includes","safeRe","range","raw","format","parseRange","c","first","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","cache","hr","HYPHENRANGELOOSE","HYPHENRANGE","replace","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","parseComparator","replaceGTE0","rangeMap","comparators","size","result","some","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","i","testSet","remainingComparators","slice","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","id","toLowerCase","replaceTilde","TILDELOOSE","TILDE","_","M","p","pr","ret","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","from","fM","fm","fp","fpr","fb","to","tM","tm","tp","tpr","tb","prerelease","allowed","major","minor","patch","MAX_LENGTH","MAX_SAFE_INTEGER","compareIdentifiers","LOOSE","FULL","num","build","compare","other","compareMain","comparePre","a","b","compareBuild","inc","release","identifier","identifierBase","base","Number","Error","push","isNaN","s","eq","neq","gt","gte","lt","lte","op","String","rtl","COERCERTL","exec","index","lastIndex","COERCE","versionA","versionB","version1","version2","v1","v2","comparison","v1Higher","highVersion","lowVersion","highHasPre","prefix","throwErrors","parsed","list","sort","internalRe","constants","identifiers","valid","clean","rcompare","compareLoose","rsort","coerce","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","outside","gtr","ltr","simplifyRange","subset","src","tokens","SEMVER_SPEC_VERSION","RELEASE_TYPES","rcompareIdentifiers","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","process","env","NODE_DEBUG","args","console","error","numeric","anum","bnum","looseOption","Object","freeze","emptyOpts","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","name","isGlobal","safe","token","makeSafeRegex","RegExp","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","LONETILDE","LONECARET","r1","r2","versions","maxSV","rangeObj","min","minSV","minver","setMin","comparator","compver","hilo","gtfn","ltefn","ltfn","ecomp","high","low","ranges","simplified","original","minimumVersionWithPreRelease","minimumVersion","simpleSubset","sub","dom","eqSet","Set","gtltComp","higher","lower","hasDomLT","hasDomGT","higherGT","lowerLT","add","needDomLTPre","needDomGTPre","sawNonNull","OUTER","simpleSub","simpleDom","isSub","defineProperty","ProgressType","ProgressToken","createMessageConnection","NullLogger","ConnectionOptions","ConnectionStrategy","AbstractMessageBuffer","WriteableStreamMessageWriter","AbstractMessageWriter","MessageWriter","ReadableStreamMessageReader","AbstractMessageReader","MessageReader","SharedArrayReceiverStrategy","SharedArraySenderStrategy","CancellationToken","CancellationTokenSource","Emitter","Event","Disposable","LRUCache","Touch","LinkedMap","ParameterStructures","NotificationType9","NotificationType8","NotificationType7","NotificationType6","NotificationType5","NotificationType4","NotificationType3","NotificationType2","NotificationType1","NotificationType0","NotificationType","ErrorCodes","ResponseError","RequestType9","RequestType8","RequestType7","RequestType6","RequestType5","RequestType4","RequestType3","RequestType2","RequestType1","RequestType0","RequestType","Message","RAL","MessageStrategy","CancellationStrategy","CancellationSenderStrategy","CancellationReceiverStrategy","ConnectionError","ConnectionErrors","LogTraceNotification","SetTraceNotification","TraceFormat","TraceValues","Trace","messages_1","enumerable","linkedMap_1","disposable_1","events_1","cancellation_1","sharedArrayCancellation_1","messageReader_1","messageWriter_1","messageBuffer_1","connection_1","ral_1","default","Is","None","isCancellationRequested","onCancellationRequested","Cancelled","is","candidate","boolean","shortcutEvent","callback","context","handle","timer","setTimeout","bind","MutableToken","_isCancelled","cancel","_emitter","fire","event","_token","RequestCancellationReceiverStrategy","IdCancellationReceiverStrategy","CancelNotification","ProgressNotification","StarRequestHandler","ConnectionState","type","func","warn","info","log","Off","Messages","Compact","Verbose","fromString","string","JSON","Text","code","message","super","setPrototypeOf","prototype","cancelUndispatched","kind","createCancellationTokenSource","sendCancellation","conn","sendNotification","cleanup","receiver","sender","handleMessage","cancellationStrategy","connectionStrategy","messageStrategy","messageReader","messageWriter","_logger","logger","sequenceNumber","notificationSequenceNumber","unknownResponseSequenceNumber","starRequestHandler","requestHandlers","starNotificationHandler","notificationHandlers","progressHandlers","tracer","messageQueue","responsePromises","knownCanceledRequests","requestTokens","trace","traceFormat","state","New","errorEmitter","closeEmitter","unhandledNotificationEmitter","unhandledProgressEmitter","disposeEmitter","createRequestQueueKey","_message","isListening","Listening","isClosed","Closed","isDisposed","Disposed","closeHandler","triggerMessageQueue","setImmediate","shift","processMessageQueue","isRequest","requestMessage","reply","resultOrError","method","startTime","jsonrpc","toJson","traceSendingResponse","write","catch","replyError","data","params","stringifyTrace","logLSPMessage","traceReceivedRequest","element","requestHandler","handler","tokenKey","cancellationSource","handlerResult","numberOfParams","InvalidParams","Array","isArray","parameterStructures","byName","byPosition","promise","then","InternalError","replySuccess","MethodNotFound","handleRequest","isNotification","notificationHandler","cancelId","traceReceivedNotification","handleNotification","isResponse","responseMessage","stringify","responsePromise","timerStart","traceReceivedResponse","reject","resolve","handleResponse","number","responseHandler","handleInvalidMessage","onClose","onError","toCancel","strategy","response","cancellationToken","queue","addMessageToQueue","lspMessage","isLSPMessage","timestamp","throwIfClosedOrDisposed","undefinedToNull","param","nullToUndefined","isNamedParam","computeSingleParam","auto","computeMessageParams","connection","messageParams","paramStart","paramEnd","notificationMessage","traceSendingNotification","onNotification","onProgress","_type","sendProgress","onUnhandledProgress","sendRequest","throwIfNotListening","last","disposable","Promise","traceSendingRequest","enableCancellation","async","MessageWriteError","onRequest","hasPendingResponse","_value","_tracer","sendNotificationOrTraceOptions","_sendNotification","_traceFormat","onUnhandledNotification","onDispose","end","PendingResponseRejected","listen","AlreadyListening","throwIfListening","inspect","verbose","create","_disposable","CallbackList","bucket","_callbacks","_contexts","remove","foundCallbackWithDifferentContext","splice","invoke","callbacks","contexts","apply","isEmpty","_options","_event","listener","thisArgs","disposables","onFirstListenerAdd","_noop","onLastListenerRemove","array","stringArray","elem","_a","First","AsOld","Last","AsNew","_map","_head","_tail","_size","_state","clear","touch","previous","addItemLast","addItemFirst","removeItem","callbackfn","thisArg","current","iterator","done","entries","toStringTag","trimOld","newSize","currentSize","toJSON","fromJSON","limit","ratio","_limit","_ratio","Math","checkTrim","round","encoding","_encoding","_chunks","_totalLength","append","chunk","toAppend","byteLength","tryReadHeaders","lowerCaseKeys","chunkIndex","offset","chunkBytesRead","row","buffer","_read","headers","header","indexOf","substr","tryReadBody","numberOfBytes","byteCount","emptyBuffer","asNative","allocNative","resultOffset","chunkPart","semaphore_1","ResolvedMessageReaderOptions","onPartialMessage","partialMessageEmitter","fireError","asError","fireClose","firePartialMessage","fromOptions","charset","contentDecoder","contentDecoders","contentTypeDecoder","contentTypeDecoders","decoder","applicationJson","readable","messageBuffer","_partialMessageTimeout","nextMessageLength","messageToken","readSemaphore","Semaphore","partialMessageTimeout","timeout","partialMessageTimer","onData","contentLength","parseInt","body","setPartialMessageTimer","clearPartialMessageTimer","lock","bytes","decode","waitingTime","ResolvedMessageWriterOptions","count","contentTypeEncoder","encoder","contentEncoder","writable","errorCount","writeSemaphore","msg","encode","doWrite","handleError","AbstractMessageSignature","ParseError","InvalidRequest","jsonrpcReservedErrorRangeStart","serverErrorStart","MessageReadError","ConnectionInactive","ServerNotInitialized","UnknownErrorCode","jsonrpcReservedErrorRangeEnd","serverErrorEnd","static","_parameterStructures","_ral","install","ral","capacity","_capacity","_active","_waiting","thunk","runNext","active","doRunNext","err","CancellationState","Continue","buffers","request","SharedArrayBuffer","Int32Array","$cancellationData","_conn","Atomics","store","SharedArrayBufferCancellationToken","SharedArrayBufferCancellationTokenSource","__createBinding","o","k2","desc","getOwnPropertyDescriptor","__esModule","configurable","__exportStar","hasOwnProperty","createServerSocketTransport","createClientSocketTransport","createServerPipeTransport","createClientPipeTransport","generateRandomPipeName","StreamMessageWriter","StreamMessageReader","SocketMessageWriter","SocketMessageReader","PortMessageWriter","PortMessageReader","IPCMessageWriter","IPCMessageReader","ril_1","path","os","crypto_1","net_1","api_1","eventEmitter","on","off","send","port","postMessage","socket","stream","asReadableStream","asWritableStream","destroy","XDG_RUNTIME_DIR","safeIpcPathLengths","randomSuffix","randomBytes","platform","tmpdir","pipeName","connectResolve","connected","_reject","server","createServer","close","removeListener","onConnected","createConnection","input","output","reader","read","addListener","isReadableStream","writer","isWritableStream","util_1","MessageBuffer","Buffer","TextDecoder","allocUnsafe","ReadableStreamWrapper","onEnd","WritableStreamWrapper","_ril","ms","clearTimeout","clearImmediate","setInterval","clearInterval","RIL","LSPErrorCodes","createProtocolConnection","lspReservedErrorRangeStart","RequestFailed","ServerCancelled","ContentModified","RequestCancelled","lspReservedErrorRangeEnd","vscode_jsonrpc_1","ProtocolNotificationType","ProtocolNotificationType0","ProtocolRequestType","ProtocolRequestType0","RegistrationType","MessageDirection","CallHierarchyOutgoingCallsRequest","CallHierarchyIncomingCallsRequest","CallHierarchyPrepareRequest","messageDirection","clientToServer","ColorPresentationRequest","DocumentColorRequest","ConfigurationRequest","serverToClient","DeclarationRequest","DiagnosticRefreshRequest","WorkspaceDiagnosticRequest","DocumentDiagnosticRequest","DocumentDiagnosticReportKind","DiagnosticServerCancellationData","retriggerRequest","Full","Unchanged","partialResult","WillDeleteFilesRequest","DidDeleteFilesNotification","DidRenameFilesNotification","WillRenameFilesRequest","DidCreateFilesNotification","WillCreateFilesRequest","FileOperationPatternKind","file","folder","FoldingRangeRequest","ImplementationRequest","InlayHintRefreshRequest","InlayHintResolveRequest","InlayHintRequest","InlineValueRefreshRequest","InlineValueRequest","WorkspaceSymbolRequest","CodeActionResolveRequest","CodeActionRequest","DocumentSymbolRequest","DocumentHighlightRequest","ReferencesRequest","DefinitionRequest","SignatureHelpRequest","SignatureHelpTriggerKind","HoverRequest","CompletionResolveRequest","CompletionRequest","CompletionTriggerKind","PublishDiagnosticsNotification","WatchKind","RelativePattern","FileChangeType","DidChangeWatchedFilesNotification","WillSaveTextDocumentWaitUntilRequest","WillSaveTextDocumentNotification","TextDocumentSaveReason","DidSaveTextDocumentNotification","DidCloseTextDocumentNotification","DidChangeTextDocumentNotification","TextDocumentContentChangeEvent","DidOpenTextDocumentNotification","TextDocumentSyncKind","TelemetryEventNotification","LogMessageNotification","ShowMessageRequest","ShowMessageNotification","MessageType","DidChangeConfigurationNotification","ExitNotification","ShutdownRequest","InitializedNotification","InitializeErrorCodes","InitializeRequest","WorkDoneProgressOptions","TextDocumentRegistrationOptions","StaticRegistrationOptions","PositionEncodingKind","FailureHandlingKind","ResourceOperationKind","UnregistrationRequest","RegistrationRequest","DocumentSelector","NotebookCellTextDocumentFilter","NotebookDocumentFilter","TextDocumentFilter","TypeHierarchySubtypesRequest","TypeHierarchyPrepareRequest","MonikerRequest","MonikerKind","UniquenessLevel","LinkedEditingRangeRequest","ShowDocumentRequest","SemanticTokensRegistrationType","SemanticTokensRefreshRequest","SemanticTokensRangeRequest","SemanticTokensDeltaRequest","SemanticTokensRequest","TokenFormat","WorkDoneProgressCancelNotification","WorkDoneProgressCreateRequest","WorkDoneProgress","SelectionRangeRequest","DidChangeWorkspaceFoldersNotification","WorkspaceFoldersRequest","TypeDefinitionRequest","ApplyWorkspaceEditRequest","ExecuteCommandRequest","PrepareRenameRequest","RenameRequest","PrepareSupportDefaultBehavior","DocumentOnTypeFormattingRequest","DocumentRangeFormattingRequest","DocumentFormattingRequest","DocumentLinkResolveRequest","DocumentLinkRequest","CodeLensRefreshRequest","CodeLensResolveRequest","CodeLensRequest","WorkspaceSymbolResolveRequest","DidCloseNotebookDocumentNotification","DidSaveNotebookDocumentNotification","DidChangeNotebookDocumentNotification","NotebookCellArrayChange","DidOpenNotebookDocumentNotification","NotebookDocumentSyncRegistrationType","NotebookDocument","NotebookCell","ExecutionSummary","NotebookCellKind","TypeHierarchySupertypesRequest","vscode_languageserver_types_1","protocol_implementation_1","protocol_typeDefinition_1","protocol_workspaceFolder_1","protocol_configuration_1","protocol_colorProvider_1","protocol_foldingRange_1","protocol_declaration_1","protocol_selectionRange_1","protocol_progress_1","protocol_callHierarchy_1","protocol_semanticTokens_1","protocol_showDocument_1","protocol_linkedEditingRange_1","protocol_fileOperations_1","protocol_moniker_1","protocol_typeHierarchy_1","protocol_inlineValue_1","protocol_inlayHint_1","protocol_diagnostic_1","protocol_notebook_1","language","scheme","pattern","objectLiteral","notebookType","notebook","Create","Rename","Delete","Abort","Transactional","TextOnlyTransactional","Undo","UTF8","UTF16","UTF32","hasId","documentSelector","workDoneProgress","hasWorkDoneProgress","unknownProtocolVersion","Warning","Info","Log","Incremental","isIncremental","text","rangeLength","isFull","Manual","AfterDelay","FocusOut","Created","Changed","Deleted","URI","baseUri","WorkspaceFolder","Change","Invoked","TriggerCharacter","TriggerForIncompleteCompletions","ContentChange","Identifier","document","project","group","global","$import","$export","local","Markup","Code","executionOrder","success","uinteger","equals","one","equalsMetadata","oneArray","otherArray","oneKeys","otherKeys","prop","DocumentUri","metadata","two","executionSummary","uri","cells","integer","typedArray","registrationMethod","start","deleteCount","Relative","check","node_1","TextDocument","__spreadArray","pack","arguments","ar","concat","FullTextDocument","languageId","content","_uri","_languageId","_version","_content","_lineOffsets","getText","offsetAt","substring","update","changes","_i","changes_1","change","getWellformedRange","startOffset","endOffset","startLine","line","endLine","lineOffsets","addedLineOffsets","computeLineOffsets","getLineOffsets","positionAt","character","mid","floor","position","lineOffset","nextLineOffset","mergeSort","left","right","leftIdx","rightIdx","isAtLineStart","textOffset","ch","charCodeAt","getWellformedEdit","textEdit","newText","applyEdits","edits","lastModifiedOffset","spans","sortedEdits_1","Position","Location","LocationLink","Color","ColorInformation","ColorPresentation","FoldingRangeKind","FoldingRange","DiagnosticRelatedInformation","DiagnosticSeverity","DiagnosticTag","CodeDescription","Diagnostic","Command","TextEdit","ChangeAnnotation","ChangeAnnotationIdentifier","AnnotatedTextEdit","TextDocumentEdit","CreateFile","RenameFile","DeleteFile","WorkspaceEdit","MIN_VALUE","MAX_VALUE","three","four","targetUri","targetRange","targetSelectionRange","originSelectionRange","red","green","blue","alpha","numberRange","color","label","additionalTextEdits","Comment","Imports","Region","startCharacter","endCharacter","collapsedText","defined","location","Information","Hint","Unnecessary","Deprecated","href","severity","source","relatedInformation","codeDescription","title","command","insert","needsConfirmation","description","annotation","annotationId","textDocument","OptionalVersionedTextDocumentIdentifier","overwrite","ignoreIfExists","oldUri","newUri","recursive","ignoreIfNotExists","documentChanges","TextDocumentIdentifier","VersionedTextDocumentIdentifier","TextDocumentItem","MarkupKind","MarkupContent","CompletionItemKind","InsertTextFormat","CompletionItemTag","InsertReplaceEdit","InsertTextMode","CompletionItemLabelDetails","CompletionItem","CompletionList","MarkedString","Hover","ParameterInformation","SignatureInformation","DocumentHighlightKind","DocumentHighlight","SymbolKind","SymbolTag","SymbolInformation","WorkspaceSymbol","DocumentSymbol","CodeActionKind","CodeActionTriggerKind","CodeActionContext","CodeAction","CodeLens","FormattingOptions","DocumentLink","SelectionRange","SemanticTokenTypes","SemanticTokenModifiers","SemanticTokens","InlineValueText","InlineValueVariableLookup","InlineValueEvaluatableExpression","InlineValueContext","InlayHintKind","InlayHintLabelPart","InlayHint","TextEditChangeImpl","changeAnnotations","edit","assertChangeAnnotations","manage","all","ChangeAnnotations","annotations","_annotations","_counter","idOrAnnotation","nextId","WorkspaceChange","workspaceEdit","_this","_textEditChanges","_workspaceEdit","_changeAnnotations","textEditChange","initDocumentChanges","getTextEditChange","textDocumentEdit","initChanges","createFile","optionsOrAnnotation","operation","renameFile","deleteFile","PlainText","Markdown","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","File","Reference","Folder","EnumMember","Constant","Struct","Operator","TypeParameter","asIs","adjustIndentation","detail","items","isIncomplete","fromPlainText","plainText","contents","documentation","parameters","Read","Write","Namespace","Package","Boolean","Key","Null","containerName","selectionRange","children","deprecated","tags","Empty","QuickFix","Refactor","RefactorExtract","RefactorInline","RefactorRewrite","Source","SourceOrganizeImports","SourceFixAll","Automatic","diagnostics","only","triggerKind","kindOrCommandOrEdit","checkKind","isPreferred","tabSize","insertSpaces","target","parent","resultId","variableName","caseSensitiveLookup","expression","frameId","stoppedLocation","Type","Parameter","tooltip","textEdits","paddingLeft","paddingRight","EOL","lineCount","sortedEdits","isLineStart","charAt","ProposedFeatures","NotebookDocuments","TextDocuments","SemanticTokensBuilder","semanticTokens_1","textDocuments_1","notebook_1","__brand","CallHierarchyFeature","vscode_languageserver_protocol_1","Base","callHierarchy","onPrepare","attachWorkDoneProgress","onIncomingCalls","attachPartialResultProgress","onOutgoingCalls","ConfigurationFeature","getConfiguration","arg","_getConfiguration","section","DiagnosticFeature","refresh","onWorkspace","FileOperationsFeature","onDidCreateFiles","onDidRenameFiles","onDidDeleteFiles","onWillCreateFiles","onWillRenameFiles","onWillDeleteFiles","InlayHintFeature","inlayHint","InlineValueFeature","inlineValue","LinkedEditingRangeFeature","onLinkedEditingRange","MonikerFeature","moniker","NotebookSyncFeature","synchronization","onDidOpenNotebookDocument","onDidChangeNotebookDocument","onDidSaveNotebookDocument","onDidCloseNotebookDocument","CellTextDocumentConnection","onDidOpenTextDocument","openHandler","openTextDocument","onDidChangeTextDocument","changeHandler","changeTextDocument","onDidCloseTextDocument","closeTextDocument","onWillSaveTextDocument","NULL_DISPOSE","onWillSaveTextDocumentWaitUntil","onDidSaveTextDocument","configurationOrTextDocuments","_cellTextDocuments","notebookDocuments","notebookCellMap","_onDidOpen","_onDidChange","_onDidSave","_onDidClose","cellTextDocuments","getCellTextDocument","cell","getNotebookDocument","getNotebookCell","findNotebookDocumentForCell","onDidOpen","onDidSave","onDidChange","onDidClose","cellTextDocumentConnection","notebooks","notebookDocument","cellTextDocument","updateCellMap","oldMetadata","metadataChanged","opened","closed","changedCells","structure","didOpen","open","didClose","cellUpdates","old","new","textContent","contentChanges","changeEvent","added","removed","changed","attachPartialResult","ProgressFeature","attachWorkDone","uuid_1","WorkDoneProgressReporterImpl","_connection","Instances","begin","percentage","cancellable","report","arg0","arg1","WorkDoneProgressServerReporterImpl","_source","NullProgressReporter","NullProgressServerReporter","ResultProgress","workDoneToken","_progressSupported","initialize","capabilities","window","progress","createWorkDoneProgress","generateUuid","ResultProgressReporterImpl","partialResultToken","SemanticTokensDiff","SemanticTokensFeature","semanticTokens","onDelta","onRange","originalSequence","modifiedSequence","computeDiff","originalLength","modifiedLength","startIndex","originalEndIndex","modifiedEndIndex","newData","_prevData","_id","_prevLine","_prevChar","_data","_dataLen","char","tokenType","tokenModifiers","pushLine","pushChar","previousResult","canBuildEdits","buildEdits","combineFeatures","combineNotebooksFeatures","combineLanguagesFeatures","combineWorkspaceFeatures","combineWindowFeatures","combineClientFeatures","combineTracerFeatures","combineTelemetryFeatures","combineConsoleFeatures","_NotebooksImpl","_LanguagesImpl","BulkUnregistration","BulkRegistration","ErrorMessageTracker","UUID","progress_1","configuration_1","workspaceFolder_1","callHierarchy_1","showDocument_1","fileOperations_1","linkedEditingRange_1","typeHierarchy_1","inlineValue_1","inlayHint_1","diagnostic_1","moniker_1","null2Undefined","_messages","sendErrors","showErrorMessage","RemoteConsoleImpl","rawAttach","_rawConnection","attach","fillServerCapabilities","_capabilities","RemoteWindowImpl","ShowDocumentFeature","actions","showWarningMessage","showInformationMessage","BulkRegistrationImpl","_registrations","_registered","registerOptions","asRegistrationParams","registrations","BulkUnregistrationImpl","unregistrations","_unregistrations","unregistration","isAttached","unregisterations","disposeSingle","_error","RemoteClientImpl","register","typeOrRegistrations","registerOptionsOrType","registerMany","registerSingle1","registerSingle2","_result","unregisterSingle","registration","RemoteWorkspaceImpl","WorkspaceFoldersFeature","applyEdit","paramOrEdit","TracerImpl","_trace","TelemetryImpl","logEvent","LanguagesImpl","TypeHierarchyFeature","NotebooksImpl","combine","telemetry","client","workspace","languages","connectionFactory","watchDog","factories","remoteWindow","allRemotes","asPromise","thenable","resolved","shutdownHandler","initializeHandler","exitHandler","protocolConnection","onInitialize","onInitialized","onShutdown","onExit","onDidChangeConfiguration","onDidChangeWatchedFiles","__textDocumentSync","sendDiagnostics","onHover","onCompletion","onCompletionResolve","onSignatureHelp","onDeclaration","onDefinition","onTypeDefinition","onImplementation","onReferences","onDocumentHighlight","onDocumentSymbol","onWorkspaceSymbol","onWorkspaceSymbolResolve","onCodeAction","onCodeActionResolve","onCodeLens","onCodeLensResolve","onDocumentFormatting","onDocumentRangeFormatting","onDocumentOnTypeFormatting","onRenameRequest","onPrepareRename","onDocumentLinks","onDocumentLinkResolve","onDocumentColor","onColorPresentation","onFoldingRanges","onSelectionRanges","onExecuteCommand","remote","textDocumentSync","shutdownReceived","exit","showDocument","configuration","_configuration","_syncedDocuments","_onDidChangeContent","_onWillSave","onDidChangeContent","onWillSave","onWillSaveWaitUntil","_willSaveWaitUntil","td","toFire","syncedDocument","reason","typeHierarchy","onSupertypes","onSubtypes","isUUID","v4","empty","ValueUUID","asHex","V4UUID","_randomHex","_oneOf","_timeHighBits","random","_chars","_UUIDPattern","_notificationIsAutoRegistered","workspaceCapabilities","workspaceFolders","_onDidChangeWorkspaceFolders","changeNotifications","getWorkspaceFolders","onDidChangeWorkspaceFolders","_unregistration","resolveModulePath","FileSystem","resolveGlobalYarnPath","resolveGlobalNodePath","uriToFilePath","url","fs","child_process_1","isWindows","moduleName","nodePath","cwd","nodePathKey","app","newEnv","existsSync","delimiter","cp","fork","execArgv","pid","npmCommand","shell","stdout","spawnSync","protocol","segments","decodeURIComponent","second","normalize","yarnCommand","results","stderr","lines","yarn","_isCaseSensitive","isCaseSensitive","__filename","toUpperCase","isParent","child","workspaceRoot","isAbsolute","Files","server_1","exitTimer","_shutdownReceived","argName","runTimer","processId","kill","ex","argv","setupExitTimer","arg2","arg3","arg4","stdin","transport","commandLineMessage","inputStream","_createConnection","inserted","Node","pushNode","res","forEachReverse","n","getReverse","mapReverse","reduce","initial","acc","reduceReverse","toArrayReverse","sliceReverse","nodes","reverse","perf","performance","AC","AbortController","signal","AS","abort","dispatchEvent","hasAbortSignal","AbortSignal","hasACAbortSignal","aborted","_listeners","onabort","f","addEventListener","ev","removeEventListener","warned","deprecatedOption","opt","instead","shouldWarn","deprecatedMethod","emitWarning","what","isPosInt","isFinite","getUintArray","pow","Uint8Array","Uint16Array","Uint32Array","ZeroArray","fill","Stack","UintArray","heap","ttl","ttlResolution","ttlAutopurge","updateAgeOnHas","disposeAfter","noUpdateTTL","maxSize","sizeCalculation","fetchMethod","fetchContext","noDeleteOnFetchRejection","noDeleteOnStaleGet","keyMap","keyList","valList","free","initialFill","disposed","initializeSizeTracking","initializeTTLTracking","getRemainingTTL","ttls","starts","setItemTTL","unref","updateItemAge","cachedNow","getNow","calculatedSize","sizes","removeItemSize","requireSize","addItemSize","evict","isValidIndex","indexes","rindexes","find","getOptions","purgeStale","deleted","entry","isBackgroundFetch","__staleWhileFetching","age","newIndex","oldVal","__abortController","moveToTail","val","backgroundFetch","ac","fetchOpts","__returned","forceRefresh","fetching","connect","field","deprecatedProperty","Readable","isBlob","obj","nm","getFooter","boundary","getHeader","isFormData","FormDataSerializer","formData","fd","_length","form","getFormDataLength","contentType","formDataIterator","maxBufferLength","pipeline","PassThrough","promisify","createGunzip","createInflate","createBrotliDecompress","Z_SYNC_FLUSH","asyncPipeline","calcSize","processed","isBuffer","keyFor","calcArraySize","calcObjectSize","curr","names","getOwnPropertySymbols","decodeStream","statusCode","readableStream","canDecode","cb","flush","finishFlush","isPlainObject","getPrototypeOf","proto","sizeof","WeakSet","streamToBuffer","passThroughStream","chunks","RequestAbortedError","http","https","ctx","agent","h1","opts","rejectUnauthorized","httpsAgent","Agent","httpAgent","getAgent","assigned","Proxy","property","inUse","_connectOptions","servername","req","onAbortSignal","once","incomingMessage","statusMessage","httpVersion","httpVersionMajor","httpVersionMinor","statusText","decoded","createResponse","pipe","setupContext","resetContext","NGHTTP2_CANCEL","SESSION_IDLE_TIMEOUT","PUSHED_STREAM_IDLE_TIMEOUT","clientHttp2Stream","hdrs","origin","pathname","search","hash","h2","ctxOpts","sessionCache","idleSessionTimeout","pushPromiseHandler","pushHandler","host","session","destroyed","connectOptions","enablePush","settings","setMaxListeners","errorCode","lastStreamID","opaqueData","flags","pushedStream","requestHeaders","pushedStreamIdleTimeout","responseHeaders","flgs","handlePush","onSessionError","rstCode","ALPN_HTTP2","ALPN_HTTP2C","ALPN_HTTP1_1","ALPN_HTTP1_0","RequestContext","api","setCA","ca","EventEmitter","locked","ee","acquire","tryAcquire","Reflect","deleteProperty","emit","tls","types","isAnyArrayBuffer","LRU","ALPN_CACHE_SIZE","ALPN_CACHE_TTL","ALPN_PROTOCOLS","DEFAULT_USER_AGENT","DEFAULT_OPTIONS","compress","socketIdCounter","connectionLock","connectTLS","hostname","secureConnecting","URL","sanitizeHeaders","userAgent","URLSearchParams","accept","socketFactory","requestOptions","alpns","isSecure","secOpts","ALPNProtocols","secureSocket","alpnProtocol","getProtocolAndSocketFromFactory","alpnProtocols","alpnCache","_rejectUnauthorized","h1Opts","h2Opts","determineProtocol","alpnCacheTTL","alpnCacheSize","SIGNAL_INTERNALS","handlerName","defineProperties","TimeoutSignal","isInteger","timerId","CONTROLLER_INTERNALS","FetchError","FetchBaseError","EMPTY_BUFFER","alloc","INTERNALS","consume","disturbed","Body","bodyUsed","buf","byteOffset","arrayBuffer","json","cloneStream","clonedStream","guessContentType","Headers","Response","CacheableResponse","init","bufferedBody","clone","status","counter","cacheableResponse","systemError","errno","erroredSysCall","syscall","AbortError","validateHeaderName","validateHeaderValue","normalizeName","normalizeValue","plain","fromEntries","Request","CachePolicy","CACHEABLE_METHODS","PUSH_EVENT","fetch","follow","redirect","initBody","coreResp","abortHandler","locationURL","cacheResponse","maxCacheSize","policy","shared","storable","cacheable","timeToLive","createUrl","qs","urlWithQuery","searchParams","timeoutSignal","FetchContext","reqHeaders","noCache","keepAlive","h1NoCache","keepAliveNoCache","onPush","offPush","clearCache","cacheStats","satisfiesWithoutRevalidation","resp","fromCache","cachingFetch","cachedResponse","convertRequest","convertResponse","parsedURL","respBody","ok","redirected","RangeError","ValidPhaseNames","HttpPipeline","policies","_policies","_orderedPolicies","addPolicy","phase","afterPhase","removePolicy","removedPolicies","policyDescriptor","httpClient","getOrderedPolicies","reduceRight","orderPolicies","policyMap","createPhase","hasRun","hasAfterPolicies","serializePhase","noPhase","deserializePhase","retryPhase","signPhase","orderedPhases","getPhase","descriptor","policyName","dependsOn","dependants","afterPolicies","afterPolicyName","afterNode","beforePolicies","beforePolicyName","beforeNode","walkPhase","dependant","walkPhases","iteration","initialResultLength","createEmptyPipeline","debugEnvVariable","DEBUG","enabledString","enabledNamespaces","skippedNamespaces","debuggers","enable","debugObj","assign","namespace","createDebugger","enabled","disable","namespaces","wildcard","namespaceList","ns","instance","endsWith","skipped","enabledNamespace","newDebugger","extend","registeredLoggers","logLevelFromEnv","AZURE_LOG_LEVEL","azureLogLevel","AzureLogger","AZURE_LOG_LEVELS","isAzureLogLevel","level","shouldEnable","setLogLevel","levelMap","warning","createClientLogger","clientRootLogger","patchLogMethod","createLogger","logLevel","isObject","RedactedString","defaultAllowedHeaderNames","defaultAllowedQueryParameters","Sanitizer","additionalAllowedHeaderNames","allowedHeaderNames","additionalAllowedQueryParameters","allowedQueryParameters","sanitize","seen","sanitizeUrl","sanitizeQuery","sanitized","logPolicyName","logPolicy","sanitizer","redirectPolicyName","allowedRedirect","redirectPolicy","maxRetries","handleRedirect","currentRetries","locationHeader","SDK_VERSION","getUserAgentValue","runtimeInfo","defaultAgent","telemetryInfo","parts","getUserAgentString","UserAgentHeaderName","userAgentPolicyName","userAgentPolicy","userAgentValue","userAgentPrefix","decompressResponsePolicyName","decompressResponsePolicy","listenersMap","WeakMap","abortedMap","none","listeners","abortSignal","parentSignals","_signal","parentSignal","delay","delayInMs","onAborted","rejectOnAbort","abortErrorMsg","removeListeners","parseHeaderValueAsNumber","headerName","valueAsNum","RetryAfterHeader","AllRetryAfterHeaders","getRetryAfterInMs","retryAfterValue","retryAfterHeader","throttlingRetryStrategy","retry","retryAfterInMs","skipStrategy","exponentialRetryStrategy","_b","retryInterval","retryDelayInMs","maxRetryInterval","maxRetryDelayInMs","retryCount","responseError","matchedSystemError","ignoreSystemErrors","isExponential","isExponentialRetryResponse","ignoreExponentialResponse","ignoreHttpStatusCodes","unknownResponse","isThrottlingRetryResponse","errorToThrow","exponentialDelay","clampedExponentialDelay","ceil","retryPolicyLogger","retryPolicy","strategies","retryRequest","requestId","strategiesLoop","strategyLogger","modifiers","redirectTo","defaultRetryPolicy","formDataPolicyName","formDataPolicy","urlSearchParams","subValue","wwwFormUrlEncode","requestForm","formKey","formValue","getBoundary","getLength","prepareFormData","isNode","proxyPolicyName","globalNoProxyList","noProxyListLoaded","globalBypassedMap","getEnvironmentValue","getDefaultProxySettings","proxyUrl","httpsProxy","allProxy","httpProxy","loadEnvironmentProxyValue","parsedUrl","username","password","getProxyAgentOptions","proxySettings","tlsSettings","parsedProxyUrl","proxyAgentOptions","auth","proxyPolicy","noProxy","loadNoProxy","cachedAgents","noProxyList","bypassedMap","isBypassedFlag","isBypassed","customNoProxyList","isInsecure","httpProxyAgent","HttpProxyAgent","httpsProxyAgent","HttpsProxyAgent","setProxyAgentOnRequest","setClientRequestIdPolicyName","setClientRequestIdPolicy","requestIdHeaderName","tlsPolicyName","tlsPolicy","knownContextKeys","span","for","createTracingContext","TracingContextImpl","parentContext","setValue","initialContext","_contextMap","newContext","getValue","deleteValue","instrumenterImplementation","getInstrumenter","createRequestHeaders","parseTraceparentHeader","startSpan","_name","spanOptions","isRecording","recordException","setAttribute","setStatus","tracingContext","withContext","_context","callbackArgs","isError","hasName","hasMessage","getErrorMessage","stringified","custom","errorSanitizer","RestError","isRestError","REQUEST_SEND_ERROR","PARSE_ERROR","tracingPolicyName","tracingPolicy","tracingClient","packageName","packageVersion","operationOptions","startSpanResult","tracingOptions","updatedOptions","withSpan","traceparentHeader","createTracingClient","tryCreateTracingClient","spanKind","spanAttributes","tryCreateSpan","serviceRequestId","tryProcessResponse","tryProcessError","createPipelineFromOptions","tlsOptions","proxyOptions","userAgentOptions","retryOptions","redirectOptions","loggingOptions","HttpHeadersImpl","rawHeaders","_headersMap","preserveCase","normalizedName","headerIterator","createHttpHeaders","DEFAULT_TLS_SETTINGS","isStreamComplete","isArrayBuffer","ReportTransform","Transform","progressCallback","loadedBytes","_transform","NodeHttpClient","cachedHttpsAgents","_c","abortController","abortListener","acceptEncoding","shouldDecompress","responseStream","bodyLength","getBodyLength","onUploadProgress","uploadReportStream","makeRequest","getResponseHeaders","resume","contentEncoding","unzip","inflate","getDecodedResponseStream","onDownloadProgress","downloadReportStream","streamResponseStatusCodes","POSITIVE_INFINITY","readableStreamBody","bodyAsText","uploadStreamDone","downloadStreamDone","allowInsecureConnection","getOrCreateAgent","abortError","ArrayBuffer","isView","disableKeepAlive","cachedHttpAgent","createDefaultHttpClient","rnds8Pool","poolPtr","rng","byteToHex","uuid","rnds","PipelineRequestImpl","_d","_e","_f","_g","withCredentials","enableBrowserStreams","createPipelineRequest","exponentialRetryPolicyName","exponentialRetryPolicy","systemErrorRetryPolicyName","systemErrorRetryPolicy","throttlingRetryPolicyName","throttlingRetryPolicy","DEFAULT_CYCLER_OPTIONS","forcedRefreshWindowInMs","retryIntervalInMs","refreshWindowInMs","bearerTokenAuthenticationPolicyName","defaultAuthorizeRequest","scopes","getAccessToken","getTokenOptions","accessToken","bearerTokenAuthenticationPolicy","credential","challengeCallbacks","authorizeRequest","authorizeRequestOnChallenge","tokenCyclerOptions","tenantId","refreshWorker","cycler","isRefreshing","shouldRefresh","expiresOnTimestamp","mustRefresh","refreshTimeout","tryGetAccessToken","finalToken","beginRefresh","getToken","tokenOptions","claims","createTokenCycler","challenge","getChallenge","ndJsonPolicyName","ndJsonPolicy","emitter","onEvent","__awaiter","_arguments","P","generator","fulfilled","step","rejected","__importDefault","mod","tls_1","url_1","debug_1","once_1","agent_base_1","_opts","proxy","secureProxy","setHeader","_header","endOfHeaders","_implicitHeader","outputData","agent_1","createHttpProxyAgent","webSnippet","__read","NoopContextManager","with","API_NAME","NOOP_CONTEXT_MANAGER","ContextAPI","getInstance","_instance","setGlobalContextManager","contextManager","_getContextManager","DiagComponentLogger","props","_namespace","logProxy","funcName","DiagAPI","_logProxy","setLogger","optionsOrLogLevel","stack","oldLogger","newLogger","maxLevel","_filterFunc","theLevel","theFunc","createLogLevelDiagLogger","suppressOverrideMessage","createComponentLogger","__values","BaggageImpl","_entries","getEntry","getAllEntries","setEntry","newBaggage","removeEntry","removeEntries","e_1","keys_1","keys_1_1","e_1_1","return","baggageEntryMetadataSymbol","createBaggage","baggageEntryMetadataFromString","str","__TYPE__","createContextKey","ROOT_CONTEXT","BaseContext","_currentContext","diag","DiagLogLevel","extendStatics","ValueType","consoleMap","DiagConsoleLogger","_consoleFunc","__extends","d","__proto__","__","NoopMeter","createHistogram","NOOP_HISTOGRAM_METRIC","createCounter","NOOP_COUNTER_METRIC","createUpDownCounter","NOOP_UP_DOWN_COUNTER_METRIC","createObservableGauge","NOOP_OBSERVABLE_GAUGE_METRIC","createObservableCounter","NOOP_OBSERVABLE_COUNTER_METRIC","createObservableUpDownCounter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","addBatchObservableCallback","_callback","_observables","removeBatchObservableCallback","NoopMetric","NoopCounterMetric","_super","_attributes","NoopUpDownCounterMetric","NoopHistogramMetric","record","NoopObservableMetric","addCallback","removeCallback","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","NOOP_METER","createNoopMeter","VALID_KEY_CHAR_RANGE","VALID_KEY_REGEX","VALID_VALUE_BASE_REGEX","INVALID_VALUE_COMMA_EQUAL_REGEX","TraceStateImpl","rawTraceState","_internalState","_parse","traceState","_clone","unset","serialize","_keys","agg","part","listMember","validateKey","validateValue","createTraceState","NOOP_METER_PROVIDER","NoopMeterProvider","getMeter","metrics","MetricsAPI","setGlobalMeterProvider","provider","getMeterProvider","propagation","_globalThis","globalThis","VERSION","isCompatible","ownVersion","acceptedVersions","rejectedVersions","myVersionMatch","ownVersionParsed","globalVersion","_accept","globalVersionMatch","globalVersionParsed","_makeCompatibilityCheck","GLOBAL_OPENTELEMETRY_API_KEY","_global","registerGlobal","allowOverride","getGlobal","unregisterGlobal","NoopTextMapPropagator","inject","_carrier","extract","fields","BAGGAGE_KEY","getBaggage","getActiveBaggage","setBaggage","baggage","deleteBaggage","NOOP_TEXT_MAP_PROPAGATOR","PropagationAPI","setGlobalPropagator","propagator","carrier","setter","_getGlobalPropagator","getter","defaultTextMapGetter","defaultTextMapSetter","TraceAPI","_proxyTracerProvider","ProxyTracerProvider","wrapSpanContext","isSpanContextValid","deleteSpan","getSpan","getActiveSpan","getSpanContext","setSpan","setSpanContext","setGlobalTracerProvider","setDelegate","getTracerProvider","getTracer","NonRecordingSpan","_spanContext","spanContext","_key","setAttributes","addEvent","_status","updateName","_endTime","_exception","_time","contextApi","NoopTracer","root","parentFromContext","startActiveSpan","contextWithSpanSet","NOOP_TRACER","ProxyTracer","_provider","_getTracer","_fn","_delegate","getDelegateTracer","NOOP_TRACER_PROVIDER","NoopTracerProvider","getDelegate","delegate","SamplingDecision","SPAN_KEY","INVALID_SPANID","INVALID_TRACEID","INVALID_SPAN_CONTEXT","traceId","spanId","traceFlags","SpanKind","VALID_TRACEID_REGEX","VALID_SPANID_REGEX","isValidTraceId","isValidSpanId","SpanStatusCode","TraceFlags","ExportResultCode","BAGGAGE_KEY_PAIR_SEPARATOR","BAGGAGE_PROPERTIES_SEPARATOR","BAGGAGE_ITEMS_SEPARATOR","BAGGAGE_HEADER","BAGGAGE_MAX_NAME_VALUE_PAIRS","BAGGAGE_MAX_PER_NAME_VALUE_PAIRS","BAGGAGE_MAX_TOTAL_LENGTH","W3CBaggagePropagator","keyPairs","getKeyPairs","pair","headerValue","serializeKeyPairs","baggageString","keyPair","parsePairKeyValue","baggageEntry","hValue","encodeURIComponent","valueProps","keyPairPart","parseKeyPairsIntoRecord","sanitizeAttributes","attributes","out","isAttributeKey","isAttributeValue","e_2","arr_1","arr_1_1","isValidPrimitiveAttributeValue","e_2_1","isHomogeneousAttributeValueArray","delegateHandler","setGlobalErrorHandler","globalErrorHandler","loggingErrorHandler","getOwnPropertyNames","propertyName","flattenException","stringifyException","MILLISECONDS_TO_NANOSECONDS","SECOND_TO_NANOSECONDS","millisToHrTime","epochMillis","epochSeconds","trunc","getTimeOrigin","timeOrigin","timing","fetchStart","hrTime","performanceNow","addHrTimes","timeInputToHrTime","time","isTimeInputHrTime","getTime","hrTimeDuration","endTime","seconds","nanos","hrTimeToTimeStamp","tmp","repeat","nanoString","toISOString","hrTimeToNanoseconds","hrTimeToMilliseconds","hrTimeToMicroseconds","isTimeInput","time1","time2","AnchoredClock","systemClock","monotonicClock","_monotonicClock","_epochMillis","_performanceMillis","delta","intValue","charCode","buf8","buf16","hexToBase64","hexStr","hi","lo","writeUInt8","RandomIdGenerator","generateTraceId","getIdGenerator","generateSpanId","SHARED_BUFFER","writeUInt32BE","RPCType","RPC_METADATA_KEY","setRPCMetadata","meta","deleteRPCMetadata","getRPCMetadata","AlwaysOffSampler","shouldSample","decision","AlwaysOnSampler","ParentBasedSampler","config","_root","_remoteParentSampled","remoteParentSampled","_remoteParentNotSampled","remoteParentNotSampled","_localParentSampled","localParentSampled","_localParentNotSampled","localParentNotSampled","spanName","links","isRemote","TraceIdRatioBasedSampler","_normalize","_upperBound","_accumulate","accumulation","pos","TimeoutError","callWithTimeout","timeoutHandle","timeoutPromise","_resolve","race","urlMatches","urlToMatch","isUrlIgnored","ignoredUrls","ignoredUrls_1","ignoredUrls_1_1","isWrapped","__original","__unwrap","__wrapped","internal","_export","exporter","export","getEnv","processEnv","HOSTNAME","otperformance","require","SDK_INFO","Te","unrefTimer","CompositePropagator","_propagators","propagators","_fields","x","y","TraceState","TRACE_PARENT_HEADER","TRACE_STATE_HEADER","TRACE_PARENT_REGEX","parseTraceParent","traceParent","W3CTraceContextPropagator","traceParentHeader","traceStateHeader","SUPPRESS_TRACING_KEY","suppressTracing","unsuppressTracing","isTracingSuppressed","Deferred","_promise","BindOnceFuture","_that","_isCalled","_deferred","ENVIRONMENT_BOOLEAN_KEYS","isEnvVarABoolean","ENVIRONMENT_NUMBERS_KEYS","isEnvVarANumber","ENVIRONMENT_LISTS_KEYS","isEnvVarAList","DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT","DEFAULT_ATTRIBUTE_COUNT_LIMIT","DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT","DEFAULT_ENVIRONMENT","OTEL_SDK_DISABLED","CONTAINER_NAME","ECS_CONTAINER_METADATA_URI_V4","ECS_CONTAINER_METADATA_URI","KUBERNETES_SERVICE_HOST","NAMESPACE","OTEL_BSP_EXPORT_TIMEOUT","OTEL_BSP_MAX_EXPORT_BATCH_SIZE","OTEL_BSP_MAX_QUEUE_SIZE","OTEL_BSP_SCHEDULE_DELAY","OTEL_BLRP_EXPORT_TIMEOUT","OTEL_BLRP_MAX_EXPORT_BATCH_SIZE","OTEL_BLRP_MAX_QUEUE_SIZE","OTEL_BLRP_SCHEDULE_DELAY","OTEL_EXPORTER_JAEGER_AGENT_HOST","OTEL_EXPORTER_JAEGER_AGENT_PORT","OTEL_EXPORTER_JAEGER_ENDPOINT","OTEL_EXPORTER_JAEGER_PASSWORD","OTEL_EXPORTER_JAEGER_USER","OTEL_EXPORTER_OTLP_ENDPOINT","OTEL_EXPORTER_OTLP_TRACES_ENDPOINT","OTEL_EXPORTER_OTLP_METRICS_ENDPOINT","OTEL_EXPORTER_OTLP_HEADERS","OTEL_EXPORTER_OTLP_TRACES_HEADERS","OTEL_EXPORTER_OTLP_METRICS_HEADERS","OTEL_EXPORTER_OTLP_TIMEOUT","OTEL_EXPORTER_OTLP_TRACES_TIMEOUT","OTEL_EXPORTER_OTLP_METRICS_TIMEOUT","OTEL_EXPORTER_ZIPKIN_ENDPOINT","OTEL_LOG_LEVEL","OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS","OTEL_RESOURCE_ATTRIBUTES","OTEL_SERVICE_NAME","OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_EVENT_COUNT_LIMIT","OTEL_SPAN_LINK_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT","OTEL_TRACES_EXPORTER","OTEL_TRACES_SAMPLER","OTEL_TRACES_SAMPLER_ARG","OTEL_LOGS_EXPORTER","OTEL_EXPORTER_OTLP_INSECURE","OTEL_EXPORTER_OTLP_TRACES_INSECURE","OTEL_EXPORTER_OTLP_METRICS_INSECURE","OTEL_EXPORTER_OTLP_CERTIFICATE","OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE","OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE","OTEL_EXPORTER_OTLP_COMPRESSION","OTEL_EXPORTER_OTLP_TRACES_COMPRESSION","OTEL_EXPORTER_OTLP_METRICS_COMPRESSION","OTEL_EXPORTER_OTLP_CLIENT_KEY","OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY","OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY","OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_PROTOCOL","OTEL_EXPORTER_OTLP_TRACES_PROTOCOL","OTEL_EXPORTER_OTLP_METRICS_PROTOCOL","OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE","parseBoolean","environment","parseNumber","parseStringList","separator","givenValue","logLevelMap","ALL","VERBOSE","INFO","WARN","ERROR","NONE","setLogLevelFromEnv","parseEnvironment","getEnvWithoutDefaults","transform","funcToString","objectCtorString","getPrototype","objectProto","symToStringTag","nativeObjectToString","isObjectLike","isOwn","tag","unmasked","getRawTag","objectToString","baseGetTag","Ctor","merge","objects","mergeTwoObjects","takeValue","isPrimitive","isFunction","j","shouldMerge","twoValue","obj1","obj2","wasObjectReferenced","arr1","arr2","TracesSamplerValues","Span","parentTracer","parentSpanId","_deprecatedClock","events","_droppedAttributesCount","_droppedEventsCount","_droppedLinksCount","_ended","_duration","_performanceStartTime","_performanceOffset","_startTimeProvided","_getTime","resource","instrumentationLibrary","_spanLimits","getSpanLimits","_spanProcessor","getActiveSpanProcessor","onStart","_attributeValueLengthLimit","attributeValueLengthLimit","_isSpanEnded","attributeCountLimit","_truncateToSize","attributesOrStartTime","timeStamp","eventCountLimit","droppedAttributesCount","inp","msDuration","exception","SemanticAttributes","_truncateToLimitUtil","NOT_RECORD","RECORD_AND_SAMPLED","FALLBACK_OTEL_TRACES_SAMPLER","loadDefaultConfig","sampler","buildSamplerFromEnv","forceFlushTimeoutMillis","generalLimits","spanLimits","linkCountLimit","attributePerEventCountLimit","attributePerLinkCountLimit","getSamplerProbabilityFromEnv","probability","ForceFlushState","Tracer","_tracerProvider","userConfig","perInstanceDefaults","DEFAULT_CONFIG","localConfig","_sampler","_generalLimits","_idGenerator","idGenerator","parentSpan","parentSpanContext","link","samplingResult","initAttributes","getGeneralLimits","__assign","Resource","asyncAttributesPromise","asyncAttributesPending","_syncAttributes","_asyncAttributesPromise","asyncAttributes","EMPTY","SemanticResourceAttributes","argv0","waitForAsyncAttributes","g","sent","trys","ops","verb","__generator","mergedSyncAttributes","mergedAttributesPromise","thisAsyncAttributes","otherAsyncAttributes","MultiSpanProcessor","_spanProcessors","forceFlush","promises","spanProcessor","e_3","e_3_1","shutdown","e_4","e_4_1","NoopSpanProcessor","_span","BatchSpanProcessorBase","_exporter","_finishedSpans","_droppedSpansCount","_maxExportBatchSize","maxExportBatchSize","_maxQueueSize","maxQueueSize","_scheduledDelayMillis","scheduledDelayMillis","_exportTimeoutMillis","exportTimeoutMillis","_shutdownOnce","_shutdown","isCalled","_flushAll","_parentContext","_addToBuffer","_maybeStartTimer","_flushOneBatch","_clearTimer","doExport","ExportResult","pendingResources","_timer","BatchSpanProcessor","BasicTracerProvider","_registeredSpanProcessors","_tracers","mergedConfig","_h","_j","_k","_l","_m","parsedEnvConfig","reconfigureLimits","_config","defaultExporter","_buildExporterFromEnv","batchProcessor","activeSpanProcessor","schemaUrl","addSpanProcessor","_buildPropagatorFromEnv","timeoutInterval","errors","_getPropagator","_registeredPropagators","_getSpanExporter","_registeredExporters","uniquePropagatorNames","validPropagators","exporterName","ConsoleSpanExporter","resultCallback","_sendSpans","_exportInfo","parentId","duration","spans_1","spans_1_1","dir","depth","InMemorySpanExporter","_stopped","getFinishedSpans","SimpleSpanProcessor","_unresolvedExports","exportPromise_1","CLOUD_PROVIDER","CLOUD_ACCOUNT_ID","CLOUD_REGION","CLOUD_AVAILABILITY_ZONE","CLOUD_PLATFORM","AWS_ECS_CONTAINER_ARN","AWS_ECS_CLUSTER_ARN","AWS_ECS_LAUNCHTYPE","AWS_ECS_TASK_ARN","AWS_ECS_TASK_FAMILY","AWS_ECS_TASK_REVISION","AWS_EKS_CLUSTER_ARN","AWS_LOG_GROUP_NAMES","AWS_LOG_GROUP_ARNS","AWS_LOG_STREAM_NAMES","AWS_LOG_STREAM_ARNS","CONTAINER_ID","CONTAINER_RUNTIME","CONTAINER_IMAGE_NAME","CONTAINER_IMAGE_TAG","DEPLOYMENT_ENVIRONMENT","DEVICE_ID","DEVICE_MODEL_IDENTIFIER","DEVICE_MODEL_NAME","FAAS_NAME","FAAS_ID","FAAS_VERSION","FAAS_INSTANCE","FAAS_MAX_MEMORY","HOST_ID","HOST_NAME","HOST_TYPE","HOST_ARCH","HOST_IMAGE_NAME","HOST_IMAGE_ID","HOST_IMAGE_VERSION","K8S_CLUSTER_NAME","K8S_NODE_NAME","K8S_NODE_UID","K8S_NAMESPACE_NAME","K8S_POD_UID","K8S_POD_NAME","K8S_CONTAINER_NAME","K8S_REPLICASET_UID","K8S_REPLICASET_NAME","K8S_DEPLOYMENT_UID","K8S_DEPLOYMENT_NAME","K8S_STATEFULSET_UID","K8S_STATEFULSET_NAME","K8S_DAEMONSET_UID","K8S_DAEMONSET_NAME","K8S_JOB_UID","K8S_JOB_NAME","K8S_CRONJOB_UID","K8S_CRONJOB_NAME","OS_TYPE","OS_DESCRIPTION","OS_NAME","OS_VERSION","PROCESS_PID","PROCESS_EXECUTABLE_NAME","PROCESS_EXECUTABLE_PATH","PROCESS_COMMAND","PROCESS_COMMAND_LINE","PROCESS_COMMAND_ARGS","PROCESS_OWNER","PROCESS_RUNTIME_NAME","PROCESS_RUNTIME_VERSION","PROCESS_RUNTIME_DESCRIPTION","SERVICE_NAME","SERVICE_NAMESPACE","SERVICE_INSTANCE_ID","SERVICE_VERSION","TELEMETRY_SDK_NAME","TELEMETRY_SDK_LANGUAGE","TELEMETRY_SDK_VERSION","TELEMETRY_AUTO_VERSION","WEBENGINE_NAME","WEBENGINE_VERSION","WEBENGINE_DESCRIPTION","CloudProviderValues","ALIBABA_CLOUD","AWS","AZURE","GCP","CloudPlatformValues","ALIBABA_CLOUD_ECS","ALIBABA_CLOUD_FC","AWS_EC2","AWS_ECS","AWS_EKS","AWS_LAMBDA","AWS_ELASTIC_BEANSTALK","AZURE_VM","AZURE_CONTAINER_INSTANCES","AZURE_AKS","AZURE_FUNCTIONS","AZURE_APP_SERVICE","GCP_COMPUTE_ENGINE","GCP_CLOUD_RUN","GCP_KUBERNETES_ENGINE","GCP_CLOUD_FUNCTIONS","GCP_APP_ENGINE","AwsEcsLaunchtypeValues","EC2","FARGATE","HostArchValues","AMD64","ARM32","ARM64","IA64","PPC32","PPC64","X86","OsTypeValues","WINDOWS","LINUX","DARWIN","FREEBSD","NETBSD","OPENBSD","DRAGONFLYBSD","HPUX","AIX","SOLARIS","Z_OS","TelemetrySdkLanguageValues","CPP","DOTNET","ERLANG","GO","JAVA","NODEJS","PHP","PYTHON","RUBY","WEBJS","AWS_LAMBDA_INVOKED_ARN","DB_SYSTEM","DB_CONNECTION_STRING","DB_USER","DB_JDBC_DRIVER_CLASSNAME","DB_NAME","DB_STATEMENT","DB_OPERATION","DB_MSSQL_INSTANCE_NAME","DB_CASSANDRA_KEYSPACE","DB_CASSANDRA_PAGE_SIZE","DB_CASSANDRA_CONSISTENCY_LEVEL","DB_CASSANDRA_TABLE","DB_CASSANDRA_IDEMPOTENCE","DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT","DB_CASSANDRA_COORDINATOR_ID","DB_CASSANDRA_COORDINATOR_DC","DB_HBASE_NAMESPACE","DB_REDIS_DATABASE_INDEX","DB_MONGODB_COLLECTION","DB_SQL_TABLE","EXCEPTION_TYPE","EXCEPTION_MESSAGE","EXCEPTION_STACKTRACE","EXCEPTION_ESCAPED","FAAS_TRIGGER","FAAS_EXECUTION","FAAS_DOCUMENT_COLLECTION","FAAS_DOCUMENT_OPERATION","FAAS_DOCUMENT_TIME","FAAS_DOCUMENT_NAME","FAAS_TIME","FAAS_CRON","FAAS_COLDSTART","FAAS_INVOKED_NAME","FAAS_INVOKED_PROVIDER","FAAS_INVOKED_REGION","NET_TRANSPORT","NET_PEER_IP","NET_PEER_PORT","NET_PEER_NAME","NET_HOST_IP","NET_HOST_PORT","NET_HOST_NAME","NET_HOST_CONNECTION_TYPE","NET_HOST_CONNECTION_SUBTYPE","NET_HOST_CARRIER_NAME","NET_HOST_CARRIER_MCC","NET_HOST_CARRIER_MNC","NET_HOST_CARRIER_ICC","PEER_SERVICE","ENDUSER_ID","ENDUSER_ROLE","ENDUSER_SCOPE","THREAD_ID","THREAD_NAME","CODE_FUNCTION","CODE_NAMESPACE","CODE_FILEPATH","CODE_LINENO","HTTP_METHOD","HTTP_URL","HTTP_TARGET","HTTP_HOST","HTTP_SCHEME","HTTP_STATUS_CODE","HTTP_FLAVOR","HTTP_USER_AGENT","HTTP_REQUEST_CONTENT_LENGTH","HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED","HTTP_RESPONSE_CONTENT_LENGTH","HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED","HTTP_SERVER_NAME","HTTP_ROUTE","HTTP_CLIENT_IP","AWS_DYNAMODB_TABLE_NAMES","AWS_DYNAMODB_CONSUMED_CAPACITY","AWS_DYNAMODB_ITEM_COLLECTION_METRICS","AWS_DYNAMODB_PROVISIONED_READ_CAPACITY","AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY","AWS_DYNAMODB_CONSISTENT_READ","AWS_DYNAMODB_PROJECTION","AWS_DYNAMODB_LIMIT","AWS_DYNAMODB_ATTRIBUTES_TO_GET","AWS_DYNAMODB_INDEX_NAME","AWS_DYNAMODB_SELECT","AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES","AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES","AWS_DYNAMODB_EXCLUSIVE_START_TABLE","AWS_DYNAMODB_TABLE_COUNT","AWS_DYNAMODB_SCAN_FORWARD","AWS_DYNAMODB_SEGMENT","AWS_DYNAMODB_TOTAL_SEGMENTS","AWS_DYNAMODB_COUNT","AWS_DYNAMODB_SCANNED_COUNT","AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS","AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES","MESSAGING_SYSTEM","MESSAGING_DESTINATION","MESSAGING_DESTINATION_KIND","MESSAGING_TEMP_DESTINATION","MESSAGING_PROTOCOL","MESSAGING_PROTOCOL_VERSION","MESSAGING_URL","MESSAGING_MESSAGE_ID","MESSAGING_CONVERSATION_ID","MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES","MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES","MESSAGING_OPERATION","MESSAGING_CONSUMER_ID","MESSAGING_RABBITMQ_ROUTING_KEY","MESSAGING_KAFKA_MESSAGE_KEY","MESSAGING_KAFKA_CONSUMER_GROUP","MESSAGING_KAFKA_CLIENT_ID","MESSAGING_KAFKA_PARTITION","MESSAGING_KAFKA_TOMBSTONE","RPC_SYSTEM","RPC_SERVICE","RPC_METHOD","RPC_GRPC_STATUS_CODE","RPC_JSONRPC_VERSION","RPC_JSONRPC_REQUEST_ID","RPC_JSONRPC_ERROR_CODE","RPC_JSONRPC_ERROR_MESSAGE","MESSAGE_TYPE","MESSAGE_ID","MESSAGE_COMPRESSED_SIZE","MESSAGE_UNCOMPRESSED_SIZE","DbSystemValues","OTHER_SQL","MSSQL","MYSQL","ORACLE","DB2","POSTGRESQL","REDSHIFT","HIVE","CLOUDSCAPE","HSQLDB","PROGRESS","MAXDB","HANADB","INGRES","FIRSTSQL","EDB","ADABAS","FIREBIRD","DERBY","FILEMAKER","INFORMIX","INSTANTDB","INTERBASE","MARIADB","NETEZZA","PERVASIVE","POINTBASE","SQLITE","SYBASE","TERADATA","VERTICA","H2","COLDFUSION","CASSANDRA","HBASE","MONGODB","REDIS","COUCHBASE","COUCHDB","COSMOSDB","DYNAMODB","NEO4J","GEODE","ELASTICSEARCH","MEMCACHED","COCKROACHDB","DbCassandraConsistencyLevelValues","EACH_QUORUM","QUORUM","LOCAL_QUORUM","ONE","TWO","THREE","LOCAL_ONE","SERIAL","LOCAL_SERIAL","FaasTriggerValues","DATASOURCE","HTTP","PUBSUB","TIMER","OTHER","FaasDocumentOperationValues","INSERT","EDIT","DELETE","FaasInvokedProviderValues","NetTransportValues","IP_TCP","IP_UDP","IP","UNIX","PIPE","INPROC","NetHostConnectionTypeValues","WIFI","WIRED","CELL","UNAVAILABLE","UNKNOWN","NetHostConnectionSubtypeValues","GPRS","EDGE","UMTS","CDMA","EVDO_0","EVDO_A","CDMA2000_1XRTT","HSDPA","HSUPA","HSPA","IDEN","EVDO_B","LTE","EHRPD","HSPAP","GSM","TD_SCDMA","IWLAN","NR","NRNSA","LTE_CA","HttpFlavorValues","HTTP_1_0","HTTP_1_1","HTTP_2_0","SPDY","QUIC","MessagingDestinationKindValues","QUEUE","TOPIC","MessagingOperationValues","RECEIVE","PROCESS","RpcGrpcStatusCodeValues","OK","CANCELLED","INVALID_ARGUMENT","DEADLINE_EXCEEDED","NOT_FOUND","ALREADY_EXISTS","PERMISSION_DENIED","RESOURCE_EXHAUSTED","FAILED_PRECONDITION","ABORTED","OUT_OF_RANGE","UNIMPLEMENTED","INTERNAL","DATA_LOSS","UNAUTHENTICATED","MessageTypeValues","SENT","RECEIVED","formatter","each","child_process","splitPattern","systemRootCertsPath","allTrusted","allRoot","globalAgent","cert","der2","validFormats","forge","packageJson","formats","der","pem","txt","asn1","myASN","pki","pemToDer","crt","fromDer","serial","hasSerial","tagClass","CONTEXT_SPECIFIC","constructed","slicedCrt","issuer","subject","rdn","date","savedTime","toTimeString","toLocaleDateString","txtFormat","certificateFromPem","TypeRegistry","TypeGuard","TypeExtendsResult","TypeExtends","TypeClone","IndexedAccessor","ObjectMap","KeyResolver","KeyArrayResolver","UnionResolver","TemplateLiteralPattern","TemplateLiteralResolver","TemplateLiteralParser","TemplateLiteralFinite","TemplateLiteralGenerator","TemplateLiteralDslParser","StandardType","ExtendedTypeBuilder","StandardTypeBuilder","TypeBuilder","TemplateLiteralParserError","ExtendsUndefined","TypeGuardUnknownTypeError","FormatRegistry","PatternStringExact","PatternNumberExact","PatternBooleanExact","PatternString","PatternNumber","PatternBoolean","Kind","Modifier","Entries","Clear","Has","Get","schema","IsObject","IsArray","IsPattern","IsControlCharacterFree","IsAdditionalProperties","IsOptionalBoolean","TSchema","IsString","IsNumber","IsOptionalBigInt","IsBigInt","IsOptionalNumber","IsBoolean","IsOptionalString","TAny","TKind","$id","TArray","minItems","maxItems","uniqueItems","TBigInt","typeOf","multipleOf","minimum","maximum","exclusiveMinimum","exclusiveMaximum","TBoolean","TConstructor","instanceOf","returns","parameter","TDate","minimumTimestamp","maximumTimestamp","exclusiveMinimumTimestamp","exclusiveMaximumTimestamp","TFunction","TInteger","TIntersect","allOf","unevaluatedProperties","inner","TLiteralString","const","TLiteralNumber","TLiteralBoolean","TLiteral","TNever","not","TNot","TNull","TNumber","TObject","properties","additionalProperties","minProperties","maxProperties","TPromise","TRecord","patternProperties","TRef","$ref","TString","minLength","maxLength","IsOptionalFormat","TSymbol","TTemplateLiteral","TThis","TTuple","additionalItems","TUndefined","TUnion","anyOf","TUint8Array","minByteLength","maxByteLength","TUnknown","TUnsafe","TVoid","TUnionLiteral","TReadonlyOptional","TReadonly","TOptional","Check","IntoBooleanResult","False","True","AnyRight","BooleanRight","IntegerRight","IntersectRight","Visit","IsLiteralString","IsLiteralNumber","NeverRight","NumberRight","IsObjectPropertyCount","IsObjectStringLike","IsObjectArrayLike","IsObjectSymbolLike","IsObjectNumberLike","IsObjectBooleanLike","ObjectRight","Union","IsObjectUint8ArrayLike","IsObjectDateLike","IsObjectConstructorLike","IsObjectFunctionLike","RecordKey","RecordValue","RecordRight","StringRight","UnionRight","UnknownRight","Resolve","Any","BigInt","Integer","Intersect","Literal","Record","IsArrayOfTuple","Tuple","IsObjectPromiseLike","VoidRight","Undefined","ArrayRight","Unknown","Void","Extends","Clone","schemas","indexed","Never","sets","outer","includePatterns","ResolveKeys","ResolvePattern","UnwrapPattern","ParseExact","Generate","union","kinds","template","literals","IsNonEscaped","IsOpenParen","IsCloseParen","IsSeparator","Parse","IsGroup","InGroup","IsPrecedenceOr","expressions","expr","Or","IsPrecedenceAnd","Group","scan","And","Reduce","Const","ParseUnion","literal","ParseTerminal","L","ParseLiteral","template_dsl","TypeOrdinal","Strict","Optional","ReadonlyOptional","Readonly","Composite","intersect","Index","trueType","falseType","Exclude","narrowed","Extract","unresolved","cloned","clonedUnevaluatedProperties","KeyOf","Not","propertyKeys","optionalKeys","requiredKeys","clonedAdditionalProperties","clonedProperties","required","Omit","Partial","Apply","Pick","Recursive","thisType","Ref","Required","Rest","TemplateLiteral","clonedItems","clonedAnyOf","Unsafe","ConstructorParameters","clonedReturns","clonedParameters","InstanceType","Parameters","RegEx","regex","ReturnType","promisify_1","isSecureEndpoint","createAgent","maxFreeSockets","maxSockets","maxTotalSockets","sockets","freeSockets","requests","defaultPort","explicitDefaultPort","explicitProtocol","addRequest","secureEndpoint","_defaultAgent","_last","shouldKeepAlive","timedOut","timeoutId","timeoutMs","onerror","_hadError","ontimeout","callbackError","onsocket","freeSocket","onSocket","promisifiedCallback","rtn","MissingRefError","ValidationError","CodeGen","Name","nil","KeywordCxt","core_1","draft7_1","discriminator_1","draft7MetaSchema","META_SUPPORT_DATA","META_SCHEMA_ID","Ajv","_addVocabularies","addVocabulary","discriminator","addKeyword","_addDefaultMetaSchema","metaSchema","$data","$dataMetaSchema","addMetaSchema","refs","defaultMeta","getSchema","validate_1","codegen_1","validation_error_1","ref_error_1","regexpCode","getEsmExportName","getProperty","safeStringify","strConcat","addCodeArg","_Code","IDENTIFIER","_CodeOrName","emptyStr","_items","_str","_names","strs","plus","mergeExprItems","optimize","c1","c2","rx","or","and","operators","varKinds","ValueScopeName","ValueScope","Scope","code_1","scope_1","code_2","scope_2","GT","GTE","LT","EQ","NEQ","NOT","OR","AND","ADD","optimizeNodes","optimizeNames","_constants","Def","varKind","rhs","render","es5","_n","var","optimizeExpr","Assign","lhs","sideEffects","addExprNames","AssignOp","Label","Break","Throw","AnyCode","ParentNode","subtractNames","addNames","BlockNode","Root","Else","If","condition","else","cond","For","ForLoop","ForRange","ForIter","loop","iterable","Func","Return","Try","finally","Catch","Finally","replaceName","par","extScope","_values","_blockStarts","_extScope","_scope","_nodes","scopeName","scopeValue","prefixOrName","getScopeValue","keyOrRef","scopeRefs","scopeCode","_def","nameOrPrefix","constant","toName","_leafNode","_constant","let","object","keyValues","if","thenBody","elseBody","_blockNode","endIf","elseIf","_elseNode","_endBlockNode","_for","forBody","endFor","forRange","forOf","forIn","ownProperties","break","try","tryBody","catchCode","finallyCode","_currNode","throw","block","nodeCount","endBlock","toClose","funcBody","endFunc","N1","N2","andCode","mappend","orCode","UsedValueState","ValueError","prefixes","_prefixes","_parent","_newName","_nameGroup","nameStr","itemIndex","scopePath","scope","ref","valueKey","vs","_reduceValues","usedValues","getCode","valueCode","nameSet","Started","def","Completed","extendErrors","resetErrorsCount","reportExtraError","reportError","keyword$DataError","keywordError","names_1","addError","gen","errObj","vErrors","returnErrors","it","errs","validateName","schemaEnv","$async","keyword","schemaType","cxt","errorPaths","overrideAllErrors","compositeRule","allErrors","errorObjectCode","errsCount","schemaValue","instancePath","errorPath","errSchemaPath","E","schemaPath","parentSchema","createErrors","errorInstancePath","errorSchemaPath","topSchemaRef","messages","extraErrorProps","errorObject","instPath","getErrorPath","Str","schPath","resolveSchema","getCompilingSchema","resolveRef","compileSchema","SchemaEnv","resolve_1","dynamicAnchors","schemaId","baseId","normalizeId","localRefs","sch","_sch","rootId","getFullPath","uriResolver","_ValidationError","schemaCxt","parentData","parentDataProperty","dataNames","dataPathArr","dataLevel","dataTypes","definedProperties","jtd","sourceCode","_compilations","validateFunctionCode","validateCode","validate","makeValidate","scopeValues","unevaluated","evaluated","dynamicProps","dynamicItems","inlineOrCompile","inlineRef","inlineRefs","schEnv","s2","s1","refPath","_getFullPath","getJsonPointer","schOrRef","schId","resolveUrl","schOrFunc","PREVENT_SCOPE_CHANGE","parsedRef","fragment","partSchema","unescapeFragment","schemaHasRulesButRef","RULES","valCxt","rootData","jsonPos","jsonLen","jsonPart","resolver","missingRef","missingSchema","getSchemaRefs","equal","traverse","SIMPLE_INLINED","hasRef","countKeys","REF_KEYWORDS","eachItem","TRAILING_SLASH_HASH","ANCHOR","baseIds","pathPrefix","schemaRefs","allKeys","jsonPtr","parentJsonPtr","fullPath","addRef","ambiguos","checkAmbiguosRef","addAnchor","anchor","$anchor","$dynamicAnchor","sch1","sch2","getRules","isJSONType","jsonTypes","groups","rules","null","post","keywords","checkStrictMode","useFunc","setEvaluated","evaluatedPropsToName","mergeEvaluated","unescapeJsonPointer","escapeJsonPointer","escapeFragment","schemaRefOrVal","schemaHasRules","checkUnknownRules","alwaysValidSchema","toHash","strictSchema","makeMergeEvaluated","mergeNames","mergeToName","mergeValues","resultToName","ps","xs","snippets","mode","dataProp","dataPropType","jsPropertySyntax","isNumber","Num","shouldUseGroup","rule","shouldUseRule","definition","implements","kwd","schemaHasRulesForType","boolOrEmptySchema","topBoolOrEmptySchema","errors_1","boolError","falseSchemaError","schemaCode","reportTypeError","checkDataTypes","checkDataType","coerceAndCheckDataType","getJSONTypes","getSchemaTypes","DataType","rules_1","applicability_1","ts","nullable","coerceTo","coerceTypes","COERCIBLE","coerceToTypes","checkTypes","wrongType","strictNumbers","Wrong","dataType","coerced","coerceSpecificType","assignParentData","coerceData","strictNums","correct","Correct","numCond","_cond","notObj","typeError","getTypeErrorContext","assignDefaults","assignDefault","defaultValue","childData","useDefaults","ty","getData","boolSchema_1","dataType_1","dataType_2","defaults_1","keyword_1","subschema_1","validateFunction","funcSourceUrl","dynamicRef","destructureValCxtES5","destructureValCxt","schemaCxtHasRules","isSchemaObj","checkKeywords","ignoreKeywordsWithRef","checkRefsAndKeywords","typeAndKeywords","schemaKeywords","commentKeyword","$comment","rootName","typeErrors","groupKeywords","iterateKeywords","strictTypes","includesType","strictTypesError","withTypes","narrowSchemaTypes","checkContextTypes","allowUnionTypes","checkMultipleTypes","hasApplicableType","kwdT","schTs","checkKeywordTypes","checkStrictTypes","keywordCode","checkNoDefault","resetEvaluated","assignEvaluated","returnResults","topSchemaObjCode","validateKeywordUsage","validSchemaType","allowUndefined","trackErrors","successAction","failAction","failResult","pass","fail","fail$data","invalid$data","errorParams","setParams","$dataError","block$data","codeBlock","$dataValid","check$data","validateSchema","st","wrong$DataType","validateSchemaRef","invalid$DataSchema","subschema","appl","getSubschema","extendSubschemaData","extendSubschemaMode","nextContext","updateContext","checkAsyncSchema","subSchemaObjCode","subschemaCode","mergeValidEvaluated","ruleType","funcKeywordCode","macroKeywordCode","compile","JSON_POINTER","RELATIVE_JSON_POINTER","jsonPointer","matches","up","errorMsg","segment","pointerType","modifyData","useKeyword","macroSchema","macro","schemaRef","checkAsyncKeyword","validateRef","assignValid","_await","passCxt","passContext","passSchema","callValidateCode","modifying","reportErrs","ruleErrs","validateAsync","validateErrs","validateSync","addErrs","deps","dependencies","errorsText","schemaProp","dpType","dataContextProps","_nextData","jtdDiscriminator","jtdMetadata","compile_1","codegen_2","$dataRefSchema","uri_1","defaultRegExp","META_IGNORE_OPTIONS","EXT_SCOPE_NAMES","removedOptions","errorDataPath","jsonPointers","extendRefs","missingRefs","processCode","strictDefaults","strictKeywords","unknownFormats","ajvErrors","deprecatedOptions","unicode","requiredOptions","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_0","strict","_optz","regExp","strictTuples","strictRequired","loopRequired","loopEnum","addUsedSchema","validateFormats","unicodeRegExp","int32range","_loading","_cache","noLogs","getLogger","formatOpt","checkOptions","_metaOpts","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addInitialSchemas","_dataRefSchema","schemaKeyRef","_meta","_addSchema","_compileSchemaEnv","compileAsync","loadSchema","runCompileAsync","_schema","loadMetaSchema","$schema","_compileAsync","checkLoaded","loadMissingSchema","_loadSchema","addSchema","_validateSchema","_checkUnique","throwOrLogError","keyRef","getSchEnv","removeSchema","_removeAllSchemas","cacheKey","definitions","kwdOrDef","checkKeyword","addRule","keywordMetaschema","getKeyword","removeKeyword","findIndex","addFormat","dataVar","keywordsJsonPointers","seg","schemaOrData","_compileMetaSchema","currentOpts","checkOpts","optsSchemas","defs","metaOpts","KEYWORD_NAME","ruleGroup","before","addBeforeRule","_rule","$dataRef","ucs2length","ajv","validation","validateAdditionalItems","validateItems","additionalProperty","removeAdditional","allSchemaProperties","patProps","deleteAdditional","additionalPropertyCode","applyAdditionalSchema","definedProp","propsSchema","isOwnProperty","usePattern","isAdditional","schCxt","validateUnion","minContains","maxContains","validateItemsWithCount","schValid","checkLimits","_valid","validateSchemaDeps","validatePropertyDeps","depsCount","property_ies","missingProperty","propDeps","schDeps","propertyDeps","schemaDeps","splitDependencies","missing","hasProperty","propertyInData","depProp","checkReportMissingProp","checkMissingProp","reportMissingProp","ifClause","hasThen","hasSchema","hasElse","validateIf","validateClause","additionalItems_1","prefixItems_1","items_1","items2020_1","contains_1","dependencies_1","propertyNames_1","additionalProperties_1","properties_1","patternProperties_1","not_1","anyOf_1","oneOf_1","allOf_1","if_1","thenElse_1","draft2020","applicator","validateTuple","validateArray","extraItems","schArr","fullTuple","checkStrictTuple","prefixItems","passing","util_2","patterns","alwaysValidPatterns","checkProperties","allowMatchingProperties","checkMatchingProperties","pat","validateProperties","alwaysValid","validatePatternProperties","allProps","hasDefault","applyPropertySchema","schemaProperties","noPropertyInData","hasPropFunc","schemaMap","dataAndSchema","newRegExp","u","validArr","notValid","id_1","ref_1","core","callRef","getValidate","callRootRef","schOrEnv","callValidate","schName","inlineRefSchema","addErrorsFrom","addEvaluatedFrom","schEvaluated","callAsyncRef","types_1","discrError","tagName","DiscrError","Tag","oneOf","mapping","applyTagSchema","oneOfMapping","topRequired","hasRequired","tagRequired","propSch","addMappings","addMapping","enum","tagValue","getMapping","Mapping","validateMapping","validation_1","applicator_1","format_1","metadata_1","draft7Vocabularies","metadataVocabulary","contentVocabulary","fmts","fDef","fType","callFormat","validData","invalidFmt","validate$DataFormat","formatDef","unknownMsg","unknownFormat","fmtType","fmtRef","fmtDef","fmt","getFormat","validCondition","validateFormat","equal_1","useLoop","eql","getEql","vSchema","equalCode","limitNumber_1","multipleOf_1","limitLength_1","pattern_1","limitProperties_1","required_1","limitItems_1","uniqueItems_1","const_1","enum_1","ucs2length_1","KWDs","okStr","prec","multipleOfPrecision","invalid","loopAllRequired","allErrorsMode","loopUntilMissing","exitOnErrorMode","requiredKey","itemTypes","loopN","indices","loopN2","AsyncScopeManager","OpenTelemetryScopeManagerWrapper","CorrelationContextManager_1","CorrelationContextManager","getCurrentContext","_activeSymbol","correlationContext","_spanToContext","runWithContext","wrapCallback","wrapEmitter","aiContext","spanToContextObject","AzureFunctionsHook","Logging","_client","_autoGenerateIncomingRequests","_functionsCoreModule","funcProgModel","getProgrammingModel","_addPreInvocationHook","_addPostInvocationHook","isEnabled","_removeInvocationHooks","_preInvocationHook","registerHook","preInvocationContext","extractedContext","invocationContext","startOperation","customProperties","setProperty","invocationId","traceContext","functionCallback","_isHttpTrigger","hookData","appInsightsExtractedContext","appInsightsStartTime","_postInvocationHook","postInvocationContext","request_1","startTime_1","response_1","extractedContext_1","inputs","_getAzureFunctionResponse","_createIncomingRequestTelemetry","parsedVal","trackRequest","resultCode","httpOutputBinding","bindingDefinitions","direction","bindings","DiagChannel","AutoCollectConsole","INSTANCE","collectConsoleLog","IsInitialized","isInitialized","_isInitialized","_methodNames","Traceparent","Tracestate","HttpRequestParser","Util","CONTEXT_NAME","generateContextObject","operationId","operationName","correlationContextHeader","traceparent","tracestate","CustomPropertiesImpl","traceFlag","formatOpenTelemetryTraceFlags","DEFAULT_TRACE_FLAG","dumpObj","bindEmitter","forceClsHooked","isNodeVersionCompatible","hasEverEnabled","cls","shouldUseClsHooked","createNamespace","registerContextPreservation","azureFnRequest","parser","getCorrelationContextHeader","getOperationName","nodeVer","canUseClsHooked","greater800","less820","greater470","addHeaderData","keyvals","keyval","serializeToHeader","bannedCharacters","AutoCollectExceptions","_canUseUncaughtExceptionMonitor","_exceptionListenerHandle","reThrow","_FALLBACK_ERROR_MESSAGE","exceptionTelemetry","contextObjects","trackException","isAppCrashing","UNCAUGHT_EXCEPTION_MONITOR_HANDLER_NAME","UNCAUGHT_EXCEPTION_HANDLER_NAME","_rejectionListenerHandle","UNHANDLED_REJECTION_HANDLER_NAME","_RETHROW_EXIT_MESSAGE","crypto","Constants","Context","HeartBeat","_collectionInterval","_isEnabled","_handle","trackHeartBeat","sdkVersion","_uniqueProcessId","WEBSITE_SITE_NAME","WEBSITE_HOME_STAMPNAME","WEBSITE_HOSTNAME","WEBSITE_OWNER_NAME","WEBSITE_RESOURCE_GROUP","WEBSITE_SLOT_NAME","trackMetric","HeartBeatMetricName","__spreadArrays","il","jl","RequestResponseHeaders","HttpDependencyParser","CorrelationIdManager","AutoCollectHttpDependencies","_initialize","originalRequest","originalHttpsRequest","clientRequestPatch","shouldCollect","disableCollectionRequestOption","alreadyAutoCollectedFlag","userAgentHeader","w3cEnabled","generateRequestId","getRootId","requestArgs","uniqueRequestId","uniqueTraceparent","requestParser","currentContext","updateSpanId","getBackCompatRequestId","requestNumber","canIncludeCorrelationHeader","getUrl","correlationId","correlationHeader","requestContextHeader","safeIncludeCorrelationHeader","requestIdHeader","ignoreLegacyHeaders","parentIdHeader","rootIdHeader","isProcessed","onResponse","dependencyTelemetry","getDependencyTelemetry","trackDependency","Contracts","RequestParser","_getUrlFromRequestOptions","_setStatus","getCorrelationContextTarget","requestContextTargetKey","baseTelemetry","dependencyId","dependencyName","remoteDependencyType","RemoteDependencyDataConstants","TYPE_HTTP","remoteDependencyTarget","urlObject","TYPE_AI","correlationIdPrefix","_isSuccess","dependencyTypeName","originalOptions_1","parsedQuery","_getAbsoluteUrl","socketRemoteAddress","remoteAddress","parseHeaders","connectionRemoteAddress","legacySocketRemoteAddress","ellapsedMilliseconds","getRequestTelemetry","requestTelemetry","sourceCorrelationId","getRequestTags","newTags","locationIp","_getIp","sessionId","_getId","userId","userAuthUserId","operationParentId","getOperationParentId","getOperationId","pathName","getRequestId","getTraceparent","getTracestate","getLegacyRootId","legacyRootId","encrypted","baseUrl","requestUrl","ipMatch","ip","cookie","parseId","getCookie","setBackCompatFromThisTraceContext","requestContextSourceKey","tracestateHeader","legacy_parentId","legacy_rootId","cookieValue","cookieParts","ContextTagKeys","AutoCollectPerformance","AutoCollectHttpRequests","_isAutoCorrelating","useAutoCorrelation","isAutoCorrelating","_generateCorrelationContext","_registerRequest","HANDLER_READY","wrapOnRequestHandler","wrapServerEventHandler","originalAddListener","eventType","eventHandler","originalHttpServer","param1","param2","originalHttpsServer","trackRequestSync","addResponseCorrelationIdHeader","endRequest","_requestParser","headersSent","tagOverrides","AutoCollectNativePerformance","_disabledMetrics","disabledMetrics","collectionInterval","_metricsAvailable","NativeMetricsEmitters","_trackNativeMetrics","parseEnabled","collectExtendedMetrics","customConfig","disableAll","disableAllExtendedMetrics","individualOptOuts","extendedMetricDisablers","optOutsArr","optOutsArr_1","shouldSendAll","_trackGarbageCollection","_trackEventLoop","_trackHeapUsage","gc","gcData","getGCData","name_1","stdDev","sqrt","sumSquares","total","internalSdkVersion","getLoopData","loopUsage","memoryUsage","heapUsed","heapTotal","rss","NetworkStatsbeat","endpoint","totalRequestCount","totalSuccesfulRequestCount","totalFailedRequestCount","exceptionCount","throttleCount","intervalRequestExecutionTime","lastIntervalRequestExecutionTime","lastTime","lastRequestCount","enableLiveMetricsCounters","_lastIntervalRequestExecutionTime","_lastIntervalDependencyExecutionTime","_lastRequests","_lastDependencies","totalDependencyCount","totalFailedDependencyCount","_lastExceptions","totalExceptionCount","_enableLiveMetricsCounters","_lastCpus","cpus","_totalRequestCount","_totalFailedRequestCount","_totalDependencyCount","_totalFailedDependencyCount","_totalExceptionCount","cpuUsage","_lastAppCpuUsage","_lastHrtime","hrtime","trackPerformance","countRequest","durationMs","_intervalRequestExecutionTime","countException","countDependency","_intervalDependencyExecutionTime","_trackCpu","_trackMemory","_trackNetwork","_trackDependencyRate","_trackExceptionRate","totalUser","totalSys","totalNice","totalIdle","totalIrq","cpu","lastCpu","times","model","speed","lastTimes","user","sys","nice","idle","irq","appCpuPercent","appCpuUsage","totalApp","system","combinedTotal","PerformanceCounter","PROCESSOR_TIME","PROCESS_TIME","freeMem","freemem","usedMem","committedMemory","totalmem","PRIVATE_BYTES","AVAILABLE_BYTES","QuickPulseCounter","COMMITTED_BYTES","lastRequests","intervalRequests","intervalFailedRequests","elapsedMs","elapsedSeconds","averageRequestExecutionTime","requestsPerSec","failedRequestsPerSec","REQUEST_RATE","REQUEST_DURATION","REQUEST_FAILURE_RATE","lastDependencies","intervalDependencies","intervalFailedDependencies","averageDependencyExecutionTime","dependenciesPerSec","failedDependenciesPerSec","DEPENDENCY_RATE","DEPENDENCY_FAILURE_RATE","DEPENDENCY_DURATION","lastExceptions","exceptions","intervalExceptions","exceptionsPerSec","EXCEPTION_RATE","AggregatedMetricCounters_1","AggregatedMetricDimensions_1","AutoCollectPreAggregatedMetrics","_dependencyCountersCollection","_requestCountersCollection","_exceptionCountersCollection","_traceCountersCollection","trackPreAggregatedMetrics","dimensions","_getAggregatedCounter","totalCount","countTrace","intervalExecutionTime","_trackRequestMetrics","_trackDependencyMetrics","_trackExceptionMetrics","_trackTraceMetrics","counterCollection","notMatch","dim","newCounter","AggregatedMetricCounter","currentCounter","lastTotalCount","lastIntervalExecutionTime","_trackPreAggregatedMetric","aggregationInterval","metricType","MetricId","REQUESTS_DURATION","DEPENDENCIES_DURATION","EXCEPTIONS_COUNT","intervalTraces","TRACES_COUNT","metric","metricProperties","PreaggregatedMetricPropertyNames","EnvelopeFactory","Sender","Vm","Config","Network","Statsbeat","_attach","StatsbeatAttach","sdk","_feature","StatsbeatFeature","_instrumentation","StatsbeatInstrumentation","_statbeatMetrics","_networkStatsbeatCollection","statsbeatConnectionString","_getConnectionString","_statsbeatConfig","samplingPercentage","_sender","_shutdownStatsbeat","_getCustomProperties","trackShortIntervalStatsbeats","STATS_COLLECTION_SHORT_INTERVAL","_longHandle","trackLongIntervalStatsbeats","STATS_COLLECTION_LONG_INTERVAL","setCodelessAttach","codeless","addFeature","feature","removeFeature","addInstrumentation","instrumentation","removeInstrumentation","_getNetworkStatsbeatCounter","currentStatusCounter","statusCounter","exceptionType","currentErrorCounter","exceptionCounter","countThrottle","countRetry","networkProperties","error_1","_getResourceProvider","_os","_resourceProvider","_cikey","_runtimeVersion","_language","_sdkVersion","_trackRequestDuration","_trackRequestsCount","_sendStatsbeats","TAG","commonProperties","attachProperties","instrumentationProperties","featureProperties","error_2","_resourceIdentifier","StatsbeatCounter","ATTACH","StatsbeatFeatureType","Instrumentation","FEATURE","Feature","shortHost","_getShortHost","totalRequestExecutionTime","originalHost","_loop_1","this_1","REQUEST_SUCCESS","REQUEST_FAILURE","RETRY_COUNT","THROTTLE_COUNT","EXCEPTION_COUNT","envelopes","statsbeat","envelope","createEnvelope","TelemetryType","Metric","StatsbeatTelemetryName","instrumentationKey","waiting","StatsbeatResourceProvider","unknown","appsvc","FUNCTIONS_WORKER_RUNTIME","functions","_isVM","AzureVirtualMachine","getAzureComputeMetadata","vmInfo","isVM","vm","subscriptionId","osType","currentEndpoint","endpointUrl","euEndpoints","EU_CONNECTION_STRING","NON_EU_CONNECTION_STRING","zlib","snippetInjectionHelper","prefixHelper","ConnectionStringParser","applicationinsights_web_snippet_1","WebSnippet","_isIkeyValid","_aiUrl","WEB_INSTRUMENTATION_DEFAULT_SOURCE","_aiDeprecatedUrl","WEB_INSTRUMENTATION_DEPRECATED_SOURCE","clientWebIkey","_getWebSnippetIkey","webInstrumentationConnectionString","_webInstrumentationIkey","_clientWebInstrumentationConfig","webInstrumentationConfig","_clientWebInstrumentationSrc","webInstrumentationSrc","_statsbeat","getStatsbeat","_snippet","_getWebInstrumentationReplacedStr","WEB_SNIPPET","connectionString","iKey","iKeyCode","instrumentationkey","isIkeyValid","configStr","_getClientWebInstrumentationConfigStr","osStr","getOsPrefix","rpStr","getResourceProvider","snippetReplacedStr","replacedSnippet","requestListener","originalRequestListener","originalResponseWrite","isGetRequest","getContentEncodingFromHeaders","writeBufferType","ValidateInjection","InjectWebSnippet","encodeType","originalResponseEnd","endBufferType","httpsRequestListener","originalHttpsRequestListener","isGetHttpsRequest","originalHttpsResponseWrite","originalHttpsResponseEnd","isContentTypeHeaderHtml","inputStr","bufferEncodeType","removeHeader","_getInjectedCompressBuffer","html","newHtml","insertSnippetByIndex","bufferType","isBufferType","encodedString","contentEncodingMethod","GZIP","gunzipBuffer","gunzipSync","injectedGunzipBuffer","gzipSync","DEFLATE","inflateBuffer","inflateSync","injectedInflateBuffer","deflateSync","BR","BrotliDecompressSync","getBrotliDecompressSync","BrotliCompressSync","getBrotliCompressSync","decompressBuffer","parseEventHubSpan","semantic_conventions_1","Constants_1","AzNamespace","peerAddress","messageBusDestination","MessageBusDestination","CLIENT","PRODUCER","DependencyTypeName","QueueMessage","CONSUMER","measurements","TIME_SINCE_ENQUEUED","countEnqueueDiffs","sumEnqueueDiffs","startTimeMs","enqueuedTime","ENQUEUED_TIME","parseFloat","getTimeSinceEnqueued","spanToTelemetryContract","EventHub_1","httpUrl","httpScheme","httpTarget","httpHost","netPeerPort","netPeerName","netPeerIp","getDependencyTarget","peerService","remoteDependency","InProc","httpMethod","dbSystem","rpcSystem","Http","httpStatusCode","isSqlDB","dbStatement","dbOperation","dbName","Grpc","grpcStatusCode","createDependencyData","SERVER","requestData","httpRoute","createRequestData","operation_Id","createPropertiesFromSpan","MicrosoftEventHub","diagnostic_channel_1","SpanParser","AsyncHooksScopeManager_1","clients","span_1","telemetry_1","channel","subscribe","trueFilter","AZURE_CORE_TRACING","unsubscribe","Contracts_1","bunyanToAILevelMap","SeverityLevel","Critical","subscriber","AIlevel","bunyanError","enableLoggerErrorToTrace","trackTrace","BUNYAN","lastIndexOf","CONSOLE","JsonConfig_1","JsonConfig","noDiagnosticChannel","publishers","unpatchedModules","noPatchModules","modules","bunyan","mongodb","mongodbCore","mysql","redis","pg","pgPool","winston","azuresdk","addContextPreservation","commandName","startedData","databaseName","succeeded","queryObj","query","sqlString","sql","connectionConfig","socketPath","q","preparable","plan","database","POSTGRES","commandObj","address","winstonToAILevelMap","syslog","og","emerg","alert","crit","notice","npm","silly","levelKind","WINSTON","StatsbeatNetworkCategory","TelemetryTypeStringToQuickPulseDocumentType","TelemetryTypeStringToQuickPulseType","QuickPulseType","QuickPulseDocumentType","PerformanceToQuickPulseCounter","DEFAULT_LIVEMETRICS_HOST","DEFAULT_LIVEMETRICS_ENDPOINT","DEFAULT_BREEZE_ENDPOINT","APPLICATION_INSIGHTS_SDK_VERSION","Exception","Dependency","Availability","PageView","EventData","ExceptionData","MessageData","MetricData","RequestData","RemoteDependencyData","AvailabilityData","PageViewData","Sql","domainSupportsProperties","Generated_1","domain","ver","applicationVersion","deviceId","deviceLocale","deviceModel","deviceOEMName","deviceOSVersion","deviceType","operationSyntheticSource","operationCorrelationVector","sessionIsFirst","userAccountId","cloudRole","cloudRoleInstance","internalAgentVersion","internalNodeName","Data","DataPointType","Measurement","sampleRate","hasFullStack","parsedStack","DataPoint","Domain","Envelope","ExceptionDetails","StackFrame","TelemetryTypeString","baseTypeToTelemetryType","telemetryTypeToBaseType","baseType","cloudRoleName","operationSynthetic","requestSuccess","requestResultCode","dependencyType","dependencyTarget","dependencySuccess","dependencyResultCode","traceSeverityLevel","azureCore","emptySendRequest","_request","AuthorizationHandler","_azureTokenPolicy","addAuthorizationHeader","authHeaderName","webResource","AIMS_URI","virtualMachineData_1","_requestTimedOut","HTTP_TIMEOUT","Channel","isDisabled","getBatchSize","getBatchIntervalMs","_buffer","_lastSend","_isDisabled","_getBatchSize","_getBatchIntervalMs","setUseDiskRetryCaching","resendInterval","maxBytesOnDisk","setDiskRetryMode","triggerSend","_timeoutHandle","isNodeCrashing","bufferIsEmpty","isNodeExit","saveOnCrash","setupString","_endpointBase","_mergeConfig","connectionStringEnv","_connectionString","csCode","csEnv","instrumentationKeyEnv","_instrumentationKey","ingestionendpoint","maxBatchSize","maxBatchIntervalMs","disableAppInsights","correlationIdRetryIntervalMs","enableWebInstrumentation","enableAutoWebSnippetInjection","correlationHeaderExcludedDomains","profileQueryEndpoint","ENV_profileQueryEndpoint","quickPulseHost","liveendpoint","ENV_quickPulseHost","_webInstrumentationConnectionString","webSnippetConnectionString","_profileQueryEndpoint","_validateInstrumentationKey","jsonConfig","disableStatsbeat","distributedTracingMode","enableAutoCollectConsole","enableAutoCollectDependencies","enableAutoCollectIncomingRequestAzureFunctions","enableAutoCollectExceptions","enableAutoCollectExtendedMetrics","enableAutoCollectExternalLoggers","enableAutoCollectHeartbeat","enableAutoCollectPerformance","enableAutoCollectPreAggregatedMetrics","enableAutoCollectRequests","enableAutoDependencyCorrelation","enableInternalDebugLogging","enableInternalWarningLogging","enableResendInterval","enableMaxBytesOnDisk","enableSendLiveMetrics","enableUseAsyncHooks","enableUseDiskRetryCaching","proxyHttpUrl","proxyHttpsUrl","ENV_azurePrefix","ENV_iKey","legacy_ENV_iKey","_FIELDS_SEPARATOR","kv","kvParts","_FIELD_KEY_VALUE_SEPARATOR","endpointsuffix","locationPrefix","packageJsonPath","_loadApplicationContext","_loadDeviceContext","_loadInternalContext","__dirname","appVersion","readFileSync","DefaultRoleName","WEBSITE_INSTANCE_ID","arch","queryCorrelationId","cancelCorrelationIdQuery","suffix","currentRootId","appendSuffix","generateRootId","endIndex","w3cTraceId","requestIdMaxLength","trimPosition","randomu32","telemetryType","createTraceData","createEventData","createExceptionData","createMetricData","createAvailabilityData","createPageViewData","baseData","addAzureFunctionsCorrelationProperties","validateStringMap","getTags","truncateProperties","propertiesKeys","propertiesValues","isDate","severityLevel","msToTimeSpan","exceptionDetails","typeName","parseStack","responseCode","Aggregation","availabilityData","runLocation","pageViewData","frames","totalSizeInBytes","frame","_StackFrame","parsedFrame","sizeInBytes","acceptedLeft","acceptedRight","howMany","assembly","fileName","baseSize","FileAccessControl","checkFileProtection","OS_PROVIDES_FILE_PROTECTION","OS_FILE_PROTECTION_CHECKED","USE_ICACLS","ICACLS_PATH","applyACLRules","directory","identity","ex_1","ACLED_DIRECTORIES","_getACLIdentity","_runICACLS","_getACLArguments","applyACLRulesSync","_runICACLSSync","_getACLIdentitySync","aclProc","spawn","windowsHide","ACL_IDENTITY","psProc","POWERSHELL_PATH","stdio","systemdrive","getShallowFileSize","getShallowDirectorySizeSync","getShallowDirectorySize","confirmDirExists","unlinkAsync","readdirAsync","readFileAsync","writeFileAsync","appendFileAsync","accessAsync","mkdirAsync","lstatAsync","statAsync","stat","lstat","mkdir","access","appendFile","writeFile","readFile","readdir","unlink","err_1","mkdirErr_1","isDirectory","files","totalSize","files_1","fileStats","isFile","readdirSync","statSync","filePath","FileSystemHelper","InternalAzureLogger","_cleanupTimeOut","_logToFile","_logToConsole","logDestination","APPLICATIONINSIGHTS_LOG_DESTINATION","maxSizeBytes","maxHistory","_logFileName","logFilePath","APPLICATIONINSIGHTS_LOGDIR","_tempDir","_fileFullPath","_backUpNameFormat","_fileCleanupTimer","_fileCleanupTask","optionalParams","_storeToDisk","appendError_1","err_3","F_OK","_createBackupFile","backupPath","err_4","totalFiles","pathToDelete","err_5","basename","aCreationDate","bCreationDate","ENV_instrumentationKey","ENV_legacyInstrumentationKey","noHttpAgentKeepAlive","_loadJsonFile","rootPath","tempDir","configFile","enableDebug","disableWarnings","TelemetryClient","ServerRequestTracking","ClientRequestTracking","NodeClient","trackNodeHttpRequestSync","trackNodeHttpRequest","trackNodeHttpDependency","isFunctionApp","isWebApp","isLinux","StreamId","QuickPulseEnvelopeFactory","createQuickPulseEnvelope","documents","machineName","roleName","Documents","InstrumentationKey","Metrics","InvariantVersion","Timestamp","Version","MachineName","Instance","RoleName","createQuickPulseMetric","Weight","telemetryEnvelopeToQuickPulseDocument","createQuickPulseEventDocument","createQuickPulseExceptionDocument","createQuickPulseTraceDocument","createQuickPulseDependencyDocument","createQuickPulseRequestDocument","createQuickPulseDocument","exceptionMessage","ExceptionMessage","ExceptionType","Success","Duration","ResponseCode","OperationName","Target","ResultCode","CommandName","OperationId","documentType","__type","DocumentType","Properties","aggregateProperties","meas","QuickPulseUtil","QuickPulseConfig","QuickPulseSender","getAuthorizationHandler","_consecutiveErrors","_getAuthorizationHandler","ping","redirectedHostEndpoint","pingHeaders","_submitData","postOrPing","additionalHeaders","payload","authHandler","authError_1","getTransmissionTime","tlsRestrictedAgent","shouldPOSTData","redirectHeader","_onError","pollingIntervalHint","MAX_QPS_FAILURES_BEFORE_WARN","QuickPulseStateManager","_isCollectingData","_lastSuccessTime","_lastSendSucceeded","_metrics","_documents","_collectors","_redirectedHost","_pollingIntervalHint","addCollector","collector","_addMetric","addDocument","document_1","_goQuickPulse","enableCollectors","_resetQuickPulseBuffer","pingInterval","currentTimeout","_post","_ping","PING_INTERVAL","POST_INTERVAL","MAX_POST_WAIT_TIME","FALLBACK_INTERVAL","MAX_PING_WAIT_TIME","_quickPulseDone","shouldPOST","redirectedHost","FileAccessControl_1","RESPONSE_CODES_INDICATING_REACHED_BREEZE","onSuccess","isStatsbeatSender","shutdownStatsbeat","_onSuccess","_enableDiskRetryMode","_resendInterval","WAIT_BETWEEN_RESEND","_maxBytesOnDisk","MAX_BYTES_ON_DISK","_numConsecutiveFailures","_numConsecutiveRedirects","_resendTimer","TEMPDIR_PREFIX","_isStatsbeatSender","_failedToIngestCounter","_statsbeatHasReachedIngestionAtLeastOnce","_logWarn","DISK_RETRY","CLEANUP_TIMEOUT","endpointHost","batch_1","payload_1","AAD_HANDLING","gzip","dataToSend","_logInfo","setEncoding","responseString","_statsbeatFailedToIngest","Breeze","_sendFirstFileOnDisk","_isRetriable","breezeResponse","filteredEnvelopes_1","MAX_CONNECTION_FAILURES_BEFORE_WARN","_onErrorHelper","_storeToDiskSync","ex_2","ex_3","fileFullPath","ex_4","mkdirSync","dirSize","writeFileSync","firstFile","fileCreationDate","err_2","FILE_RETEMPTION_PERIOD","isSupportedContentEncoding","findBufferEncodingType","getBrotliDecompressAsync","getBrotliCompressAsync","inflateAsync","deflateAsync","gunzipAsync","gzipAsync","isBrotliSupperted","bufferEncodingTypes","majVer","gunzip","deflate","zlibObject","brotliCompress","brotliCompressSync","brotliDecompress","brotliDecompressSync","encodingType","isEncoding","encodingMethod","contentEncodingHeaders","supportedContentEncoding","snippet","isHtml","TelemetryProcessors","_telemetryProcessors","authorizationHandler","trackAvailability","track","trackPageView","trackEvent","accepted","runTelemetryProcessors","samplingTelemetryProcessor","preAggregatedMetricsTelemetryProcessor","performanceMetricsTelemetryProcessor","quickPulseClient","setAutoPopulateAzureProperties","aadTokenCredential","addTelemetryProcessor","telemetryProcessor","clearTelemetryProcessors","telemetryProcessorsCount","processor","DEFAULT_VERSION","traceparentArr","formattedFlags","fieldmap","parseHeader","fieldarr","validateKeyChars","keyParts","tenant","vendor","tenantValid","vendorValid","keydeduper","parts_1","_addCloseHandler","cookieName","cookies","int32ArrayToBase64","toChar","fromCharCode","random32","hexValues","oct","clockSequenceHi","w3cSpanId","isValidW3CId","propType","totalms","sec","toFixed","hour","days","extractError","looseError","extractObject","origProperty","stringTarget","MAX_PROPERTY_LENGTH","excludedDomains","contextHeaders","keyValue","requestCallback","useProxy","useAgent","requestUrlParsed","proxyUrlParsed","Host","isHttps","_useKeepAlive","keepAliveAgent","addCorrelationIdHeaderFromString","objectTypeDump","components","_listenerAttached","secureOptions","SSL_OP_NO_SSLv2","SSL_OP_NO_SSLv3","SSL_OP_NO_TLSv1","SSL_OP_NO_TLSv1_1","azureRoleEnvironmentTelemetryProcessor","remoteDependencyData","AutoCollecPreAggregatedMetrics","exceptionData","exceptionDimensions","traceData","traceDimensions","requestDimensions","dependencyDimensions","getSamplingHashCode","csharpMax","abs","Configuration","wrapWithCorrelationContext","getCorrelationContext","setup","liveMetricsClient","defaultClient","DistributedTracingModes","QuickPulseClient","NativePerformance_1","AzureFunctionsHook_1","azureFunctionsTypes","_forceClsHooked","_disabledExtendedMetrics","_console","_exceptions","_performance","_preAggregatedMetrics","_heartbeat","_webSnippet","_nativePerformance","_serverRequests","_clientRequests","_azureFunctions","_performanceLiveMetrics","defaultConfig","_isConsole","_isConsoleLog","_isLoggerErrorToTrace","_isExceptions","_isPerformance","_isPreAggregatedMetrics","_isHeartBeat","_isRequests","_isDependencies","_isDiskRetry","_isCorrelating","_isSendingLiveMetrics","_isNativePerformance","_isSnippetInjection","_isAzureFunctions","_diskRetryInterval","_diskRetryMaxBytes","_webSnippetConnectionString","_isStarted","extendedMetricsConfig","_initializeConfig","setDistributedTracingMode","AI_AND_W3C","setAutoCollectConsole","setAutoCollectExceptions","setAutoCollectPerformance","setAutoCollectPreAggregatedMetrics","setAutoCollectHeartbeat","WebSnippetConnectionString","setAutoCollectRequests","setAutoCollectDependencies","setAutoDependencyCorrelation","useAsyncHooks","setInternalLogging","enableDebugLogging","enableWarningLogging","setAutoCollectIncomingRequestAzureFunctions","setSendLiveMetrics","asyncWrap","binding","TIMERWRAP","Providers","patchs","ignoreUIDs","State","Hooks","initFns","preFns","postFns","destroyFns","uid","parentUid","parentHandle","hook","pre","didThrow","removeElement","AsyncHook","_hooks","providers","setupHooks","hooks","addHooks","removeHooks","_asyncHook","callSite","filename","getFileName","NextTickWrap","oldNextTick","nextTick","listenerCount","PromiseWrap","oldThen","makeWrappedHandler","isOnFulfilled","makeUnhandledResolutionHandler","makeUnhandledRejectionHandler","onFulfilled","onRejected","timers","TimeoutWrap","IntervalWrap","ImmediateWrap","timeoutMap","intervalMap","ImmediateMap","activeCallback","clearedInCallback","patchTimer","setFn","clearFn","Handle","timerMap","singleCall","oldSetFn","oldClearFn","ensureAslWrapper","executor","asyncCatcher","wrap","inAsyncTick","listenerStack","dest","destLength","addedLength","returned","_fatalException","errorValues","inErrorTick","handled","after","errorThrew","threw","_originalNextTick","AsyncListener","createAsyncListener","addAsyncListener","registered","removeAsyncListener","simpleWrap","shimmer","massWrap","util","v6plus","v7plus","v8plus","v11plus","net","wrapSetUpListenHandle","onread","onconnection","patchOnRead","_originalOnread","_normalizeArgs","_normalizeConnectArgs","Server","Socket","childProcess","wrapChildProcess","activatorFirst","onexit","ChildProcess","processors","_nextDomainTick","_tickDomainCallback","activator","asynchronizers","patchGlobalTimers","dns","resolveNaptr","lchown","lchmod","ftruncate","Deflate","toWrap","instrumentPromise","promiseListener","fallback","cbIdx","wrappedPromise","__asl_wrapper","propagateAslWrapper","nextResult","returnVal","errorVal","wrapThen","inherits","chain","wrapPromise","defaultResult","rangeTmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","compRe","parallel","serialOrdered","jobs","defer","isAsync","runJob","sortMethod","isNamedList","initState","keyedList","iterate","terminator","ascending","iteratorHandler","descending","assert","asyncHook","CONTEXTS_SYMBOL","ERROR_SYMBOL","invertedProviders","DEBUG_CLS_HOOKED","currentUid","_set","getNamespace","destroyNamespace","debug2","_rawDebug","getFunctionName","enter","createContext","_ns_name","run","runAndReturn","runPromise","thisSymbol","unwrapped","wrapped","unwrappedContexts","fromException","stackChain","modifier","_modifiers","deattach","async_hooks","_indent","createHook","asyncId","triggerId","executionAsyncId","showHidden","colors","triggerAsyncId","triggerIdContext","asyncHooksCurrentId","indentStr","currentId","Stream","DelayedStream","CombinedStream","dataSize","maxDataSize","pauseStreams","_released","_streams","_currentStream","_insideLoop","_pendingNext","combinedStream","option","isStreamLike","newStream","pauseStream","_checkDataSize","_handleErrors","pause","_getNext","_realGetNext","_pipeNext","_emitError","_reset","_updateDataSize","storage","CryptoJS","C","BlockCipher","lib","C_algo","algo","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","x2","x4","x8","RCON","AES","_doReset","_nRounds","_keyPriorReset","keyWords","words","keySize","sigBytes","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","encryptBlock","_doCryptBlock","decryptBlock","nRounds","s0","s3","t0","t1","t2","t3","_createHelper","C_lib","WordArray","BufferedBlockAlgorithm","C_enc","Base64","EvpKDF","Cipher","C_mode","BlockCipherMode","CBC","Pkcs7","CipherParams","OpenSSLFormatter","SerializableCipher","OpenSSLKdf","PasswordBasedCipher","enc","Utf8","cfg","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","dataUpdate","_append","_process","finalize","_doFinalize","ivSize","selectCipherStrategy","cipher","encrypt","decrypt","ciphertext","StreamCipher","blockSize","iv","Encryptor","Decryptor","_cipher","_iv","xorBlock","_prevBlock","processBlock","thisBlock","pad","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","modeCreator","_minBufferSize","_mode","__creator","_doProcessBlock","finalProcessedBlocks","cipherParams","mixIn","OpenSSL","salt","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","kdf","execute","compute","derivedParams","msCrypto","cryptoSecureRandomInt","getRandomValues","readInt32LE","F","subtype","overrides","$super","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","hexChars","bite","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","escape","utf8Str","unescape","_nDataBytes","doFlush","processedWords","dataWords","dataSigBytes","nBlocksReady","nWordsReady","nBytesReady","Hasher","messageUpdate","hasher","_createHmacHelper","HMAC","base64Chars","triplet","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","bitsCombined","parseLoop","Base64url","urlSafe","_safe_map","swapEndian","word","Utf16","Utf16BE","utf16Chars","codePoint","utf16Str","utf16StrLength","Utf16LE","MD5","iterations","derivedKey","derivedKeyWords","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","_iKey","oKeyWords","iKeyWords","innerHash","superInit","subInit","Int8Array","Uint8ClampedArray","Int16Array","Float32Array","Float64Array","typedArrayByteLength","T","sin","_hash","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","HmacMD5","CFB","generateKeystreamAndEncrypt","keystream","CTRGladman","incWord","b1","b2","b3","incCounter","CTR","ECB","OFB","_keystream","AnsiX923","lastBytePos","Ansix923","Iso10126","Iso97971","ZeroPadding","NoPadding","SHA1","PBKDF2","hmac","blockIndex","blockIndexWords","blockWords","blockWordsLength","intermediate","intermediateWords","S","C_","G","RabbitLegacy","K","X","_X","_C","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","gx","ga","gb","gh","gl","Rabbit","RC4","keySigBytes","_S","keyByteIndex","keyByte","generateKeystreamWord","keystreamWord","RC4Drop","drop","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","al","bl","cl","dl","el","br","cr","dr","hl","zl","zr","sl","sr","f1","f2","f3","f4","f5","rotl","HmacRIPEMD160","W","HmacSHA1","SHA256","SHA224","HmacSHA224","isPrime","sqrtN","factor","getFractionalBits","nPrime","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","HmacSHA256","X64Word","x64","Word","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","newY","LFSR","roundConstantMsw","roundConstantLsw","bitPosition","SHA3","outputLength","nBlockSizeLanes","M2i","M2i1","lane","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","HmacSHA3","C_x64","X64WordArray","SHA512","SHA384","HmacSHA384","X64Word_create","H0","H1","H3","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","ah","bh","dh","eh","fh","fl","hh","Wil","Wih","Wi","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","t1l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Ki","Kih","Kil","t1h","t2l","toX32","HmacSHA512","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","keyBits","keyBitPos","subKeys","_subKeys","nSubKey","subKey","bitShift","invSubKeys","_invSubKeys","_lBlock","_rBlock","exchangeLR","exchangeRL","lBlock","rBlock","mask","TripleDES","key1","key2","key3","_des1","_des2","_des3","X32WordArray","x64Words","x64WordsLength","x32Words","x64Word","wordsLength","formatArgs","useColors","humanize","lastC","save","setItem","getItem","__nwjs","navigator","documentElement","style","WebkitAppearance","firebug","table","$1","localStorage","localstorage","formatters","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","selectColor","newDebug","toNamespace","regexp","skips","browser","tty","inspectOpts","colorCode","hideDate","isatty","deprecate","supportsColor","O","define","_maxDataSizeExceeded","_bufferedEvents","delayedStream","realEmit","_handleEmit","_checkIfMaxDataSizeExceeded","azureCoreTracing","AzureMonitorSymbol","publisherName","isPatched","versionSpecifier","coreTracing","tracing","defaultProvider","defaultTracer","setTracer","setTracerOriginal_1","startSpanOriginal","originalEnd","publish","setGlobalTracerProviderOriginal_1","tracerProvider","getTracerOriginal","tracerName","startSpanOriginal_1","openTelemetryInstr","azureSdkInstr","registerInstrumentations","instrumentations","createAzureSdkInstrumentation","registerMonkeyPatch","originalBunyan","originalEmit","_emit","rec","noemit","stream_1","originalConsole","aiLoggingOutStream","Writable","aiLoggingErrStream","aiLoggingConsole","Console","originalMethod","consoleMethods_1","tedious","consolePub","mongoCore","originalMongoCore","originalConnect","originalWrite","pool","cbidx","bindToContext","originalLogout","logout","mongo330","mongo3","mongo2","originalMongo","instrument","operationIdGenerator","eventMap","contextMap","coreTopology","mongodbcorePatchFunction","originalMysql","originalMysqlPath","patchObjectFunction","cbWrapper","originalFunc","resultContainer","startDate","patchClassMemberFunction","classObject","connectionClass","dirname","hrDuration","poolClass","postgresPool1","originalPgPool","postgres","postgres6","originalPg","originalPgPath","originalClientQuery","Client","diagnosticOriginalFunc","queryResult","connectionParameters","patchCallback","trackingCallback","rowCount","callbackProvided","cursor","_Promise","originalRedis","originalSend","RedisClient","internal_send_command","cb_1","pubsubBound","address_1","startDate_1","originalTedious","originalMakeRequest","Connection","getPatchedCallback","origCallback","rows","parametersByName","statement","__rest","propertyIsEnumerable","winston2","winston3","originalWinston","AppInsightsTransport","splat","levels","mapLevelToKind","Transport","patchedConfigure","lastLevel","origCreate","origConfigure","configure","origRootConfigure","curLevels","originalLog","Logger","loggingFilter","filters","webpackEmptyContext","ContextPreservingEventEmitter","makePatchingRequire","patchRequire_1","patchRequire_2","publishing","subscribers","contextPreservationFunction","knownPatches","modulesPatched","currentlyPublishing","shouldPublish","standardEvent_1","patched","checkIfModuleIsAlreadyPatched","preserver","previousPreservationStack","patcher","getPatchesObject","addPatchedModule","module_2","diagnosticsSource","channel_1","moduleModule","nativeModules","originalRequire","patchedModules","moduleId","originalModule","modulePath","_resolveFilename","moduleVersion","prereleaseTagIndex","modifiedModule","modulePatcher","unwrap","SYMBOL","_events","_wrap","visit","onAddListener","onEmit","adding","existing","unprocessed","_findAndProcess","remover","valueOf","parseUrl","mime","asynckit","populate","FormData","_overheadLength","_valueLength","_valuesToMeasure","LINE_BREAK","DEFAULT_CONTENT_TYPE","_multiPartHeader","footer","_multiPartFooter","_trackLength","valueLength","knownLength","_lengthRetriever","fileSize","contentDisposition","_getContentDisposition","_getContentType","filepath","_httpMessage","lookup","_lastBoundary","getHeaders","userHeaders","formHeaders","setBoundary","_boundary","_generateBoundary","getBuffer","dataBuffer","getLengthSync","hasKnownLength","submit","defaults","responce","dst","isSsh","protocols","gitUp","gitUrlParse","urlInfo","sourceParts","splits","git_suffix","owner","organization","full_name","nameIndex","dashIndex","blobIndex","treeIndex","commitIndex","srcIndex","rawIndex","editIndex","commit","filepathtype","offsetNameIndex","at","maybeGitSuffix","buildToken","buildPath","flag","terminatorPos","statusCodeCacheableByDefault","understoodStatuses","errorStatusCodes","hopByHopHeaders","te","trailer","upgrade","excludedFromRevalidationUpdate","toNumberOrZero","parseCacheControl","cc","formatCacheControl","cacheHeuristic","immutableMinTimeToLive","ignoreCargoCult","_fromObject","_assertRequestHasHeaders","_responseTime","_isShared","_cacheHeuristic","_immutableMinTtl","_resHeaders","_rescc","_method","_url","_host","_noAuthorization","authorization","_reqHeaders","vary","_reqcc","expires","pragma","_hasExplicitExpiration","private","_allowsStoringAuthenticated","public","requestCC","_requestMatches","allowHeadMethod","_varyMatches","_copyWithoutHopByHopHeaders","inHeaders","warnings","toUTCString","serverDate","_ageValue","immutable","defaultMinTtl","lastModified","staleIfErrorAge","staleWhileRevalidateAge","_useStaleIfError","useStaleWhileRevalidate","sh","imm","resh","rescc","reqh","reqcc","toObject","revalidationHeaders","incomingReq","etag","etags","revalidatedPolicy","isErrorResponse","modified","newResponse","assert_1","parse_proxy_response_1","secure","isDefaultPort","proxyResponsePromise","buffered","omit","fakeSocket","createHttpsProxyAgent","buffersLength","firstLine","ondata","onclose","onend","makeArray","REGEX_TEST_BLANK_LINE","REGEX_INVALID_TRAILING_BACKSLASH","REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION","REGEX_REPLACE_LEADING_EXCAPED_HASH","REGEX_SPLITALL_CRLF","REGEX_TEST_INVALID_PATH","TMP_KEY_IGNORE","KEY_IGNORE","REGEX_REGEXP_RANGE","RETURN_FALSE","REPLACERS","p1","p2","leadEscape","endEscape","slashes","cleanRangeBackSlash","sanitizeRange","regexCache","isString","IgnoreRule","negative","throwError","checkPath","originalPath","doThrow","isNotRelative","convert","Ignore","ignorecase","ignoreCase","allowRelativePaths","_rules","_ignoreCase","_allowRelativePaths","_initCache","_ignoreCache","_testCache","_addPattern","_added","checkPattern","makeRegex","createRule","addPattern","_testOne","checkUnignored","ignored","unignored","_test","slices","ignores","createFilter","paths","factory","isPathValid","IGNORE_TEST_WIN32","makePosix","REGIX_IS_WINDOWS_PATH_ABSOLUTE","isDocker","hasDockerEnv","hasDockerCGroup","electron","prots","urlPortPattern","isWsl","__IS_WSL_TEST__","_traverse","rootSchema","parentKeyword","keyIndex","arrayKeywords","propsKeywords","skipKeywords","contains","propertyNames","$defs","extensions","preference","db","extname","EXTRACT_TYPE_REGEXP","TEXT_TYPE_REGEXP","charsets","extension","exts","plural","msAbs","isPlural","long","fmtShort","registerAlgorithm","aes","Algorithm","startEncrypting","_createCipher","createEncryptionCipher","startDecrypting","createDecryptionCipher","inBlock","outBlock","_updateBlock","_init","createBuffer","putByte","getInt32","encryptOp","_expandKey","modes","ecb","cbc","cfb","ofb","ctr","gcm","sbox","isbox","rcon","mix","imix","xtime","e2","e4","e8","sx2","me","ime","ei","temp","w","iNk","Nk","m0","m1","m2","m3","wnew","wi","a2","Nr","createDecipher","createCipher","ByteBuffer","initConnectionState","sp","entity","ConnectionEnd","cipherState","server_write_key","client_write_key","server_write_IV","client_write_IV","cipherFunction","decrypt_aes_cbc_sha1","encrypt_aes_cbc_sha1","macLength","mac_length","macFunction","hmac_sha1","rval","mac","macKey","putBytes","updateSequenceNumber","Versions","TLS_1_0","getBytesSync","TLS_1_1","finish","encrypt_aes_cbc_sha1_padding","fillWithByte","decrypt_aes_cbc_sha1_padding","paddingLength","truncate","getBytes","macLen","mac2","mac1","digest","compareMacs","CipherSuites","initSecurityParameters","bulk_cipher_algorithm","BulkCipherAlgorithm","cipher_type","CipherType","enc_key_length","block_length","fixed_iv_length","record_iv_length","mac_algorithm","MACAlgorithm","mac_key_length","privateKeyValidator","UNIVERSAL","SEQUENCE","INTEGER","capture","OID","OCTETSTRING","publicKeyValidator","captureAsn1","BITSTRING","composed","captureBitStringValue","_checkBufferLength","remaining","available","requested","_fromDer","getByte","bitStringContents","longFormBytes","getInt","_getValueLength","decodeBitStrings","savedRead","savedRemaining","unused","used","tc","BMPSTRING","getInt16","asn1Options","APPLICATION","PRIVATE","BOOLEAN","NULL","ODESC","EXTERNAL","REAL","ENUMERATED","EMBEDDED","ROID","SET","PRINTABLESTRING","IA5STRING","UTCTIME","GENERALIZEDTIME","copy","excludeBitStringContents","includeBitStringContents","getBerValueLength","parseAllBytes","toDer","useBitStringContents","putBuffer","putInt16","lenBytes","oidToDer","oid","valueBytes","derToOid","utcTimeToDate","utc","year","MM","DD","mm","ss","setUTCFullYear","setUTCHours","setTime","generalizedTimeToDate","gentime","YYYY","fff","isUTC","setFullYear","setHours","dateToUtcTime","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","dateToGeneralizedTime","integerToDer","putSignedInt","derToInteger","getSignedInt","optional","captureBitStringContents","_nonLatinRegex","prettyPrint","indentation","indent","IA5String","subvalues","oids","bytesToHex","decodeUtf8","_reverseAlphabets","alphabet","maxline","digits","carry","_encodeWithByteBuffer","algorithms","getAlgorithm","_finish","_input","_op","_decrypt","compact","overflow","afterFinish","transformIV","ints","blocks","inc32","from64To32","_ints","_inBlock","_outBlock","putInt32","_prev","_partialBlock","_partialOutput","_partialBytes","inputLength","partialBytes","_R","additionalData","_cipherLength","_tagLength","tagLength","_tag","_hashBlock","_hashSubkey","componentBits","generateHashTable","ivLength","_j0","ghash","_aDataLength","lengths","multiply","z_i","v_i","lsb","tableMultiply","x_i","bits","multiplier","perInt","shft","generateSubHashTable","half","m_i","m_j","des","pc2bytes0","pc2bytes1","pc2bytes2","pc2bytes3","pc2bytes4","pc2bytes5","pc2bytes6","pc2bytes7","pc2bytes8","pc2bytes9","pc2bytes10","pc2bytes11","pc2bytes12","pc2bytes13","shifts","lefttmp","righttmp","_createKeys","spfunction1","spfunction2","spfunction3","spfunction4","spfunction5","spfunction6","spfunction7","spfunction8","looping","endloop","loopinc","right1","right2","asn1Validator","BigInteger","jsbn","NativeBuffer","ed25519","messageToNativeBuffer","md","PUBLIC_KEY_BYTE_LENGTH","PRIVATE_KEY_BYTE_LENGTH","SEED_BYTE_LENGTH","SIGN_BYTE_LENGTH","HASH_BYTE_LENGTH","generateKeyPair","seed","pk","sk","gf","sha512","scalarbase","crypto_sign_keypair","publicKey","privateKey","privateKeyFromAsn1","privateKeyOid","ed25519Oid","EdDSA25519","privateKeyBytes","publicKeyFromAsn1","publicKeyOid","publicKeyBytes","ed25519PublicKey","publicKeyFromPrivateKey","sign","signedMsg","sm","subarray","modL","crypto_sign","sig","verify","signature","chk","den","den2","den4","den6","set25519","gf1","unpack25519","D","Z","A","pow2523","neq25519","I","par25519","gf0","unpackneg","scalarmult","crypto_verify_32","crypto_sign_open","D2","Y","msgLen","cswap","sel25519","tx","zi","inv25519","pack25519","car25519","yi","vn","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","usePureJavaScript","_md","_ipadding","_opadding","keylen","blockLength","getMac","dbits","fromNumber","nbi","am3","xl","xh","am","appName","DB","DM","DV","FV","F1","F2","rr","vv","BI_RC","int2char","intAt","nbv","fromInt","nbits","Classic","Montgomery","mp","invDigit","mpl","mph","um","mt2","op_and","op_or","op_xor","op_andnot","lbit","cbit","NullExp","nNop","Barrett","q3","dlShiftTo","mu","divide","compareTo","revert","divRemTo","mulTo","multiplyTo","sqrTo","squareTo","ZERO","subTo","copyTo","u0","drShiftTo","fromRadix","mi","lShiftTo","bs","cbs","bm","ds","rShiftTo","pm","pt","nsh","ys","y0","yt","d1","d2","qd","isEven","exp","negate","toRadix","km","bitLength","modPowInt","multiplyUpperTo","multiplyLowerTo","dAddOffset","lowprimes","lplim","chunkSize","LN2","signum","cs","dMultiply","testBit","bitwiseTo","shiftLeft","isProbablePrime","nextBytes","changeBit","addTo","modInt","millerRabin","n1","subtract","getLowestSetBit","shiftRight","prng","modPow","byteValue","shortValue","toByteArray","xor","andNot","bitCount","setBit","clearBit","flipBit","remainder","divideAndRemainder","k1","g2","is1","modInverse","gcd","kem","_createKDF","counterStart","digestLength","generate","rsa","keyLength","zeros","hexToBytes","fillString","encapsulation","kdf1","kdf2","sLevelInfo","sLoggers","sConsoleLogger","LEVEL_LOCKED","NO_LEVEL_CHECK","INTERPOLATE","logMessage","messageLevelIndex","prepareStandard","standard","category","prepareFull","full","prepareStandardFull","standardFull","makeLogger","logFunction","setLevel","addLogger","levelHandlers","consoleLogger","md5","_initialized","_padding","messageLength","fullMessageLength","messageLengthSize","messageLength64","int32s","h0","h3","encodeUtf8","_update","finalBlock","putInt32Le","getInt32Le","mgf","mgf1","maskLen","_IN","_I_","pbe","encryptedPrivateKeyValidator","PBES2AlgorithmsValidator","pkcs12PbeParamsValidator","prfOidToMessageDigest","prfOid","prfAlgorithm","supported","prfAlgorithmToMessageDigest","encryptPrivateKeyInfo","saltSize","dkLen","encryptionAlgorithm","encryptedData","countBytes","ivLen","encOid","cipherFn","dk","pkcs5","pbkdf2","createPbkdf2Params","saltBytes","generatePkcs12Key","decryptPrivateKeyInfo","encryptionOid","getCipher","encryptionParams","encryptedPrivateKeyToPem","epki","encryptedPrivateKeyFromPem","headerType","procType","encryptRsaPrivateKey","rsaKey","legacy","wrapRsaPrivateKey","privateKeyToAsn1","opensslDeriveBytes","dekInfo","decryptRsaPrivateKey","rc2","iter","sha1","passBuf","Slen","Plen","B","Inew","setAt","getCipherForPBES2","getCipherForPKCS12PBE","supportedOids","kdfOid","kdfSalt","kdfIterationCount","encIv","dIvLen","digests","isNodejs","pbkdf2Sync","hLen","prf","u_c","u_c1","int32ToBytes","xorBytes","foldHeader","insertSpace","ltrim","contentDomain","encode64","rMessage","rHeader","rCRLF","decode64","li","nl","vi","pkcs1","rsa_mgf1","maskLength","encode_rsa_oaep","mgf1Md","lHash","PS","PS_length","seedLength","dbMask","maskedDB","seedMask","maskedSeed","decode_rsa_oaep","em","expectedLength","lHashPrime","in_ps","is_0","error_mask","p12","pkcs12","contentInfoValidator","pfxValidator","safeBagValidator","attributeValidator","certBagValidator","_getBagsByAttribute","safeContents","attrName","attrValue","bagType","safeBags","bag","_decodePkcs7Data","_decryptSafeContents","pkcs7","encryptedDataValidator","encAlgorithm","encParameter","encryptedContentAsn1","_decodeSafeContents","safeBag","validator","bagId","_decodeBagAttributes","bagAttributes","bagAsn1","bagValue","pkcs8ShroudedKeyBag","keyBag","certBag","certId","x509Certificate","certAsn1","certificateFromAsn1","decodedAttrs","pkcs12FromAsn1","pfx","getBags","localKeyId","localKeyIdHex","friendlyName","getBagsByFriendlyName","getBagsByLocalKeyId","macKeyBytes","macAlgorithm","sha256","sha384","macSalt","macIterations","generateKey","macDigest","authSafe","contentInfo","_decodeAuthenticatedSafe","toPkcs12Asn1","useMac","generateLocalKeyId","bagAttrs","pairedCert","certificateToAsn1","attrs","certSafeBags","certBagAttrs","certSafeBag","certSafeContents","certCI","pkAsn1","keySafeContents","keyCI","macData","macValue","p7","_recipientFromAsn1","recipientInfoValidator","RDNAttributesAsArray","serialNumber","toHex","encryptedContent","encKey","_recipientsToAsn1","recipients","distinguishedNameToAsn1","_signerToAsn1","digestAlgorithm","authenticatedAttributesAsn1","signatureAlgorithm","unauthenticatedAttributes","attrsAsn1","attr","_attributeToAsn1","messageDigest","signingTime","jan_1_1950","jan_1_2050","_fromAsn1","rawCapture","_decryptContent","ciph","messageFromPem","messageFromAsn1","messageToPem","pemObj","toAsn1","envelopedData","createEnvelopedData","createEncryptedData","signedData","createSignedData","fromAsn1","certificates","crls","signers","digestAlgorithmIdentifiers","signerInfos","signedDataValidator","certs","addSigner","signer","certificate","privateKeyFromPem","authenticatedAttributes","rsaEncryption","detached","detachedContent","mds","ai","_signersToAsn1","addSignerInfos","addDigestAlgorithmIds","addCertificate","addCertificateRevokationList","crl","envelopedDataValidator","infos","_recipientsFromAsn1","recipientInfos","ec","findRecipient","sAttr","rAttr","recipient","privKey","desCBC","addRecipient","keyLen","ciphFn","p7v","pkcs7asn1","encryptedContentInfoValidator","signerValidator","privateKeyToPem","privateKeyInfoToPem","prime","GCD_30_DELTA","THIRTY","generateProbablePrime","Worker","primeincFindPrimeWithoutWorkers","generateRandom","numWorkers","workers","workLoad","workerScript","estimateCores","cores","workerMessage","found","terminate","hex","primeincFindPrimeWithWorkers","primeincFindPrime","mrTests","getMillerRabinTests","millerRabinTests","maxBlockTime","_primeinc","deltaIdx","bits1","_crypto","plugin","reseeds","generated","keyBytes","pools","_reseedSync","_seed","needed","collect","seedFileSync","_2powK","seedBytes","formatKey","formatSeed","defaultSeedFile","globalScope","entropy","QuotaExceededError","generateSync","increment","seedFile","_reseed","collectInt","registerWorker","worker","pss","saltLength","sLen","salt_","pssobj","modBits","emBits","emLen","mHash","m_","checkLen","jQuery","prng_aes","_prng_aes_output","_prng_aes_buffer","spawnPrng","_ctx","_navBytes","mousemove","clientX","clientY","keypress","createInstance","piTable","rol","ror","expandKey","effKeyBits","T1","T8","TM","mixRound","mashRound","_output","getInt16Le","runPlan","putInt16Le","ptr","rsaPrivateKeyValidator","rsaPublicKeyValidator","digestInfoValidator","emsaPkcs1v15encode","oidBytes","digestInfo","_modPow","pub","dP","dQ","qInv","xq","_encodePkcs1_v1_5","bt","eb","padByte","padNum","numZeros","padBytes","_decodePkcs1_v1_5","ml","_generateKeyPair","getPrime","pBits","qBits","q1","phi","setPrivateKey","setPublicKey","_bnToBytes","_getMillerRabinTests","_detectNodeCrypto","_detectSubtleCrypto","subtle","_detectSubtleMsCrypto","_intToUint8Array","yhex","ed","expected","xhex","createKeyPairGenerationState","eInt","pqState","stepKeyPairGenerationState","modulusLength","publicExponent","publicKeyEncoding","privateKeyEncoding","priv","publicKeyFromPem","exportKey","pkcs8","setRsaPublicKey","genOp","oncomplete","exportOp","keypair","generateKeyPairSync","schemeOptions","_parseAllDigestBytes","algorithmIdentifier","md2","sha224","setRsaPrivateKey","privateKeyModulus","privateKeyPublicExponent","privateKeyPrivateExponent","privateKeyPrime1","privateKeyPrime2","privateKeyExponent1","privateKeyExponent2","privateKeyCoefficient","privateKeyToRSAPrivateKey","rsaPublicKey","publicKeyModulus","publicKeyExponent","publicKeyToAsn1","publicKeyToSubjectPublicKeyInfo","publicKeyToRSAPublicKey","h4","h5","h6","h7","_states","messageLength128","hlen","t1_hi","t1_lo","t2_hi","t2_lo","s0_hi","s0_lo","s1_hi","ch_hi","maj_hi","maj_lo","a_hi","a_lo","b_hi","b_lo","c_hi","c_lo","d_hi","d_lo","e_hi","e_lo","f_hi","f_lo","g_hi","g_lo","h_hi","h_lo","w2","w7","w15","w16","ssh","_addBigIntegerToBuffer","hexVal","_addStringToBuffer","putString","_sha1","sha","privateKeyToPutty","passphrase","comment","ppk","pubbuffer","privbuffer","encLen","aeskey","mackey","macbuffer","publicKeyToOpenSSH","privateKeyToOpenSSH","getPublicKeyFingerprint","prf_TLS1","secret","idx","slen","md5itr","sha1itr","md5bytes","sha1bytes","readVector","getInt24","writeVector","putInt","TLS_1_2","SupportedVersions","MaxFragment","PRFAlgorithm","tls_prf_sha256","rc4","des3","aead","hmac_md5","hmac_sha256","hmac_sha384","hmac_sha512","CompressionMethod","ContentType","change_cipher_spec","handshake","application_data","heartbeat","HandshakeType","hello_request","client_hello","server_hello","server_key_exchange","certificate_request","server_hello_done","certificate_verify","client_key_exchange","finished","Alert","Level","fatal","Description","close_notify","unexpected_message","bad_record_mac","decryption_failed","record_overflow","decompression_failure","handshake_failure","bad_certificate","unsupported_certificate","certificate_revoked","certificate_expired","certificate_unknown","illegal_parameter","unknown_ca","access_denied","decode_error","decrypt_error","export_restriction","protocol_version","insufficient_security","internal_error","user_canceled","no_renegotiation","HeartbeatMessageType","heartbeat_request","heartbeat_response","getCipherSuite","twoBytes","handleUnexpected","handleHelloRequest","handshaking","handshakes","createAlert","parseHelloMessage","session_id","cipher_suite","compression_method","cipher_suites","compression_methods","ext","snl","server_name","serverNameList","cipherSuite","compressionMethod","createSecurityParameters","msgRandom","cRandom","client_random","sRandom","createRandom","prf_algorithm","compression_algorithm","pre_master_secret","master_secret","server_random","handleServerHello","expect","SCC","resuming","SCE","handleClientHello","getSession","clientHelloVersion","CCC","verifyClient","CCE","CKE","createRecord","createServerHello","createChangeCipherSpec","pending","createConnectionState","createFinished","createCertificate","createServerKeyExchange","createCertificateRequest","createServerHelloDone","handleCertificate","certificate_list","cause","SKE","serverCertificate","clientCertificate","verifyCertificateChain","handleServerKeyExchange","SCR","handleClientKeyExchange","enc_pre_master_secret","getPrivateKey","CCV","handleCertificateRequest","certificate_types","certificate_authorities","certificateRequest","SHD","handleCertificateVerify","msgBytes","handleServerHelloDone","createClientKeyExchange","SER","createCertificateVerify","getClientSignature","handleChangeCipherSpec","SFI","CFI","handleFinished","vd","SAD","CAD","peerCertificate","isConnected","handleAlert","handleHandshake","fragmented","hsTable","handleApplicationData","dataReady","handleHeartbeat","createHeartbeat","expectedHeartbeatPayload","heartbeatReceived","R0","R1","R2","R3","R4","ctTable","H8","H9","generateKeys","tls10","client_write_MAC_key","server_write_MAC_key","createMode","compressionState","compressFunction","getTimezoneOffset","createClientHello","cipherSuites","cSuites","compressionMethods","cMethods","virtualHost","serverName","snList","extLength","putInt24","hint","getCertificate","certList","certBuffer","getSignature","certTypes","cAs","caStore","dn","byteBuffer","payloadLength","plaintextLength","records","tlsData","tlsDataReady","_certErrorToAlertDesc","certificateError","verifyOptions","vfd","_alertDescToCertError","createSessionCache","setSession","order","createCaStore","cn","dpth","cts","clearFail","ready","compatibleVersion","_readRecordHeader","_readRecord","aligned","handlers","prepare","prepareHeartbeatRequest","prf_tls1","seqNum","baseN","_checkBitsParam","ByteStringBuffer","isArrayBufferView","_constructedStringLength","stopPropagation","MutationObserver","div","createElement","observe","oldSetImmediate","_optimizeConstructedString","putInt24Le","getInt24Le","DataBuffer","readOffset","growSize","DataView","writeOffset","accommodate","amount","setUint8","view","binary","base64","utf16","setInt16","setInt8","setInt32","getInt8","getUint8","utf8","_base64","_base64Idx","_base58","chr1","chr2","chr3","enc1","enc2","enc3","enc4","base58","_setStorageObject","_getStorageObject","_setItem","_getItem","_removeItem","_clearItems","_callStorageFunction","clearItems","argi","formatNumber","decimals","dec_point","thousands_sep","formatSize","bytesFromIP","bytesFromIPv4","bytesFromIPv6","blanks","bytesToIP","bytesToIPv4","bytesToIPv6","zeroGroups","zeroMaxGroup","hardwareConcurrency","Blob","blobUrl","createObjectURL","et","sample","samples","avg","revokeObjectURL","overlaps","overlap","_shortNames","x509CertificateValidator","rsassaPssParameterValidator","certificationRequestInfoValidator","certificationRequestValidator","_getAttribute","shortName","si","valueTagClass","CRIAttributesAsArray","seq","extensionRequest","certificateExtensionFromAsn1","_readSignatureParameters","fillDefaults","algorithmOid","hashOid","maskGenOid","maskGenHashOid","_createSignatureDigest","signatureOid","_verifySignature","sha1WithRSAEncryption","sha1WithRSASignature","signatureParameters","_dnToAsn1","_fillMissingFields","attribute","valueConstructed","certificateExtensionToAsn1","_fillMissingExtensionFields","digitalSignature","nonRepudiation","keyEncipherment","dataEncipherment","keyAgreement","keyCertSign","cRLSign","encipherOnly","decipherOnly","cA","pathLenConstraint","email","objsign","reserved","sslCA","emailCA","objCA","altNames","altName","ski","generateSubjectKeyIdentifier","subjectKeyIdentifier","keyIdentifier","authorityCertIssuer","subSeq","fullNameGeneralNames","_signatureParametersToAsn1","_CRIAttributesToAsn1","csr","computeHash","certificateToPem","publicKeyToPem","publicKeyToRSAPublicKeyPem","certificationRequestFromPem","certificationRequestFromAsn1","certificationRequestToPem","certificationRequestToAsn1","siginfo","validity","notBefore","notAfter","getField","sn","addField","setSubject","uniqueId","setIssuer","setExtensions","getExtension","tbsCertificate","getTBSCertificate","issued","expectedIssuer","actualIssuer","isIssuer","iattr","sattr","verifySubjectKeyIdentifier","certVersion","certSerialNumber","certSignatureOid","certSignatureParams","certinfoSignatureOid","certinfoSignatureParams","certSignature","certValidity1UTCTime","certValidity2GeneralizedTime","certValidity3UTCTime","certValidity4GeneralizedTime","imd","ibytes","certIssuer","certIssuerUniqueId","smd","sbytes","certSubject","certSubjectUniqueId","certExtensions","certificateExtensionsFromAsn1","subjectPublicKeyInfo","extseq","critical","gn","createCertificationRequest","csrVersion","csrSignatureOid","csrSignatureParams","csrSignature","certificationRequestInfo","certificationRequestInfoSubject","getAttribute","addAttribute","certificationRequestInfoAttributes","getCertificationRequestInfo","cri","_dateToAsn1","tbs","certificateExtensionsToAsn1","getBySubject","ensureSubjectHasHash","getIssuer","hasCertificate","der1","listAllCertificates","removeCertificate","validityCheckDate","selfSigned","parents","verified","se","keyUsage","basicConstraints","bcExt","keyUsageExt","fsConstants","defineLazyProperty","localXdgOpenPath","cachedResult","getWslDrivesMountPoint","defaultMountPoint","mountPoint","configFilePath","isConfigFileExists","configContent","configMountPoint","pTryEach","mapper","latestError","baseOpen","wait","background","newInstance","allowNonzeroExitCode","singleApp","appArguments","cliArguments","childProcessOptions","hasContainerEnv","SYSTEMROOT","windowsVerbatimArguments","encodedArguments","isBundled","exeLocalXdgOpen","X_OK","subprocess","exitCode","detectArchBinary","archBinary","detectPlatformBinary","platformBinary","wsl","apps","darwin","win32","linux","ia32","openApp","parse_failed","_interopDefaultLegacy","parsePath__default","testParameter","GIT_RE","throwErr","subject_url","MAX_INPUT_LENGTH","stripHash","urlString","defaultProtocol","normalizeProtocol","forceHttp","forceHttps","stripAuthentication","stripTextFragment","stripWWW","removeQueryParameters","removeTrailingSlash","removeSingleSlash","removeDirectoryIndex","sortQueryParameters","mediaType","isBase64","mimeType","normalizedMediaType","normalizeDataURL","hasRelativeProtocol","protocolRegex","protocolAtIndex","decodeURI","pathComponents","lastComponent","oldUrlString","stripProtocol","normalizeUrl","matched","processFn","promiseModule","errorFirst","multiArgs","exclude","include","excludeMain","funktion","nodule","wrapper","nodules","massUnwrap","through","Decoder","matcher","soFar","trailing","piece","pieces","FormatErrorString","_stackChain","defaultFormater","TraceModifier","StackFormater","SHORTCIRCUIT_CALLSITE","collectCallSites","captureStackTrace","callSites","_modify","_formater","_previous","formater","restore","_backup","_roolback","prepareStackTrace","SHORTCIRCUIT_FORMATER","originalFrames","stackTraceLimit","isExtensible","mutated","hasFlag","forceColor","getSupportLevel","isTTY","osRelease","CI_NAME","TEAMCITY_VERSION","COLORTERM","TERM_PROGRAM_VERSION","TERM_PROGRAM","TERM","hasBasic","has256","has16m","translateLevel","FORCE_COLOR","ended","drain","paused","_end","autoDestroy","createAgentContext","createProductionContext","AgentConfigProvider","persistenceManager","makeXdgPersistenceManager","PersistenceManager","authManager","AuthManager","ghToken","CopilotTokenManagerFromGitHubToken","GitHubDeviceFlow","EditorSession","agentEditorSession","EditorAndPluginInfo","AgentEditorInfo","MethodHandlers","getAllMethods","NotificationHandlers","CopilotCompletionCache","LocationFactory","AgentLocationFactory","agentFileSystem","CopilotIgnoreManager","NoOPCopilotIgnoreManager","HybridInference","NoopHybridInference","registerDefaultHandlers","WrappedConnection","notificationSender","ConnectionNotificationSender","NotificationSender","AgentNotificationSender","StatusReporter","NotificationStatusReporter","FeatureFlagsNotifier","textDocumentManager","AgentTextDocumentManager","TextDocumentManager","NetworkConfiguration","DefaultNetworkConfiguration","SymbolDefinitionProvider","AgentSymbolDefinitionProvider","TelemetryReporters","deactivate","CopilotService","main","redirectTelemetry","setupRedirectingTelemetryReporters","setupTelemetryReporters","AgentInstallationManager","startup","LogLevel","CLIENT_ID","requestDeviceFlowStage2","deviceCode","Accept","editorVersionHeaders","client_id","device_code","grant_type","Fetcher","getDeviceFlowCompletionUrl","requestUserInfo","telemetryGitHubLoginSuccess","getUserInfoUrl","Authorization","getTokenUnguarded","telemetryGitHubLoginFailed","UserErrorNotifier","notifyUser","stage1","telemetryNewGitHubLogin","getDeviceFlowStartUrl","requestDeviceFlowStage1","stage2Promise","expiresIn","expires_in","stage2","interval","access_token","login","oauth_token","waitForAuth","mkTokenManager","_pendingSignIn","getCopilotTokenManager","_copilotTokenManager","setPendingSignIn","getPendingSignIn","localChecksOnly","authRecord","CODESPACES","GITHUB_TOKEN","GITHUB_USER","getAuthRecord","gitHubToken","dev_override","devOverride","copilotTokenUrl","copilot_token_url","notificationUrl","notification_url","provisionalTokenManager","checkTokenResult","checkCopilotToken","getAuthAuthority","overrideCopilotTokenManager","tokenManager","authResult","checkAndUpdateStatus","ErrorCode","NoCopilotToken","requestCtx","forceSet","CopilotTokenManager","cancelled","_parentListener","InMemoryConfigProvider","DefaultsOnlyConfigProvider","getOptionalConfig","isDefaultSettingOverwritten","getConfig","setEditorAndPluginInfo","editorInfo","editorPluginInfo","_editorInfo","_editorPluginInfo","getEditorInfo","getEditorPluginInfo","LRUCacheMap","writerStream","debugPort","GH_COPILOT_DEBUG_UI_PORT","DebugServer","wrapStdout","RuntimeMode","recordInput","stamp","inLogName","outLogName","writeData","stdoutEmitter","writeHead","notificationEndpoint","CopilotTokenNotifier","ssc","getTokenValue","rt","chat","chat_enabled","notification","NotificationLogger","LogTarget","debugMode","logIt","metadataStr","extra","toPlainText","shouldLog","RedirectTelemetryReporter","codeSnippets","notificationName","sendTelemetryEvent","eventName","sendTelemetryErrorEvent","sendTelemetryException","serializableError","container","deactivation","setReporter","setSecureReporter","setProgress","removeProgress","forceNormal","setInactive","setWarning","warningMessage","setError","errorMessage","AgentFileSystem","mtimeMs","ctime","ctimeMs","mtime","InstallationManager","hasPersistedSettings","listSettings","wasPreviouslyInstalled","knownVersion","markInstalled","uninstall","listKeys","deleteSetting","FakeMessageReader","sendMessage","FakeMessageWriter","FakeWrappedConnection","Params","TestingOptions","_validParams","errorMessages","extractAjvErrors","testingCtx","getTestingContext","doc","relativePath","ifInserted","cancellationTokenSource","handleGetCompletionsHelper","serverToken","isCycling","telemetryData","TelemetryData","createAndMarkAsIssued","MergedToken","testingDocs","CompletionDocuments","numCompletions","completions","challengeDoc","cursorLine","parseChallengeDoc","completion","displayText","docVersion","createRequestContext","getTextDocumentChecked","requestedDocumentVersion","actualDocumentVersion","telemetryVersionMismatch","raiseVersionMismatchIfNotCanceled","cancellationReason","docPosition","AgentTextDocument","endRange","completionsActive","positionAndContentForCompleting","logCompletionLocation","resultWithTelemetry","getGhostText","isAbortError","mkCanceledResultTelemetry","cancelledNetworkRequest","getGhostTextWithAbortHandling","handleGhostTextResultTelemetry","resultArray","resultType","rawCompletions","completionsFromGhostTextResults","rawCompletion","panelId","AgentSolutionManager","startPosition","completionContext","solutionCountTarget","savedTelemetryData","reportCancelled","getCancellationToken","reportSolutions","nextSolutionPromise","reportNotificationsDone","nextSolution","unformattedSolution","normalizedText","normalizeCompletionText","completionText","score","meanProb","solutionId","makeSolution","solution","reportDone","ConfigKey","ListCount","PanelCompletionDocuments","headerRequestId","getNextSolution","solutionIndex","completionId","created","serverExperiments","deploymentId","meanLogProb","choiceIndex","prependToCompletion","produceEmptySolutions","completionContextForDocument","solutionManager","launchSolutions","getVersion","methods","handleGetCompletions","handleGetCompletionsCycling","handleGetPanelCompletions","handleSetEditorInfo","notifyShown","notifyAccepted","notifyRejected","telemetryExceptionMethod","handleVerifyState","handleVerifyCertificate","handleVerifyWorkspaceState","postInsertionTasks","NetworkProxy","EditorConfigurationSettings","showEditorCompletions","enableAutoCompletions","delayCompletions","filterCompletions","disabledLanguages","AuthProvider","EditorConfigurationParams","networkProxy","authProvider","applySettingsToConfiguration","ConfigProvider","setConfig","ShowEditorCompletions","DelayCompletions","EnableAutoCompletions","FilterCompletions","languageEnablement","setLanguageEnablement","applyNetworkProxyConfiguration","authentication","authenticationForUrl","http_proxy","https_proxy","proxyAuth","updateBaseUrl","uuids","flatMap","rejectionInput","completionTelemetryData","postRejectionTasks","ResultType","telemetryShown","NameAndVersionParam","editorConfiguration","initializeLateDependencies","pendingSignIn","DeviceFlowFailed","currentStatus","deviceFlow","authed","setAuthRecord","userCode","user_code","verificationUri","verification_uri","githubToken","githubUser","deleteAuthRecord","telemetryAuthNotifyDismissed","authSource","telemetryAuthNotifyShown","authType","stacktrace","telemetryException","AlwaysAuthManager","newTestingContext","getTextDocument","serializableExceptions","reporters","standardReporter","getReporter","restrictedReporter","getSecureReporter","TelemetrySpy","PromiseQueue","TestPromiseQueue","awaitPromises","restricted","NotAuthManager","PanelCompletionDocument","telemetryCapture","FakeAuthManager","getTestingCopilotTokenManager","mgr","expectedCertificate","getRootCertificateReader","getAllRootCAs","normalizeNewlines","expectedCert","asReadableCert","tdm","notificationType","setting","contentsJSON","rm","XDG_CONFIG_HOME","USERPROFILE","HOME","wrappedConnection","initialized","compositeLogTarget","MultiLog","isDebugEnabled","messageHandler","clientWorkspace","isRunningInTest","registerDocumentTracker","openClose","notifyChangeConfiguration","ContextNotInitialized","maybeResult","maybeErr","getMachineId","docInfo","FixedCopilotTokenManager","cursorPosition","percentSign","caretOne","caretTwo","testingContexts","nextTestingId","TestTextDocumentManager","_textDocuments","onDidFocusTextDocument","onDidChangeCursor","textDocuments","setTextDocument","findNotebook","TestAgentEditorInfo","_createBaselineContext","createAgentEditorInfo","TestAgentNotificationSender","sentNotifications","sentMessages","setNotificationNames","x1","y1","y2","newDocument","knownDocuments","_textDocument","fsPath","_relativePath","lineAt","lineNumber","isEmptyOrWhitespace","getWordRangeAtPosition","AgentTextDocumentsConfiguration","primeLanguageDetectionCache","updates","rangeOffset","agentTextDocument","_textDocumentConfiguration","_textDocumentListener","registerWorkspaceFolder","unregisterWorkspaceFolder","agentDoc","getRelativePath","authLogger","refreshRunningCount","nowSeconds","authFromGitHubToken","getTokenUrl","fetchCopilotToken","telemetryError","tokenInfo","user_notification","status_text","error_details","expires_at","refresh_in","organization_list","tokenEnvelope","copilotToken","CopilotToken","sku","adjusted_expires_at","current_time","TOKEN_REFRESHED_EVENT","recentNotifications","showUrl","ackNotification","urlWithContext","UrlOpener","notification_id","getNotificationUrl","sendNotificationResultToGitHub","tokenMap","parseToken","firstPart","tokenRefreshEventEmitter","refreshToken","refreshIn","getCopilotToken","time_taken","refresh_count","wasReset","force","resetCopilotToken","httpError","tokenResult","_offset","fileURI","insertionOffset","_referenceCount","_isDisposed","documentManager","_tracker","action","prompt","valueMap","lruKeys","sizeLimit","maybeKeyToDelete","touchKeyInLRU","removeKeyFromLRU","returnValue","selector","predicate","configProvider","Clock","BuildInfo","fromEnvironment","LogVerbose","isVerboseLoggingEnabled","ConsoleLog","setupRudimentaryLogging","CompletionsCache","CertificateReaderCache","RootCertificateReader","HelixFetcher","LanguageDetection","getLanguageDetection","Features","PostInsertionNotifier","TelemetryUserConfig","TelemetryEndpointUrl","HeaderContributors","ContextualFilterManager","OpenAIFetcher","LiveOpenAIFetcher","BlockModeConfig","ConfigBlockModeConfig","RealUrlOpener","ExpConfigMaker","ExpConfigNone","BlockMode","BuildType","Enable","InlineSuggestEnable","DisplayStyle","SecretKey","SolutionLength","Stops","Temperature","TopP","IndentationMode","InlineSuggestCount","DebugOverrideProxyUrl","DebugTestOverrideProxyUrl","DebugOverrideEngine","DebugShowScores","DebugOverrideLogLevels","DebugFilterLogCategories","ConversationEngine","ConversationMaxMessageTokens","ConversationMaxResponseTokens","ConversationTemperature","ConversationTopP","ConversationSlashCommandEnablements","ConversationAdditionalPromptContext","InteractiveEditorRichContext","InteractiveEditorIntentDetection","ConversationLoggingEnabled","blockMode","Parsing","ParsingAndServer","toApplicableBlockMode","isSupportedLanguageId","getLanguageConfig","overrideBlockMode","getConfigDefaultForKey","contributes","CopilotConfigPrefix","getConfigDefaultForObjectKey","objectKey","dumpConfig","baseConfigProvider","override","keyAsString","isProduction","getBuildType","buildType","getBuild","getName","formatNameAndVersion","machineId","baseContext","constructionStack","instances","ctor","tryGet","assertIsInstance","inst","stackEntry","isDescendant","descendant","sep","copilotIgnoreLogger","COPILOT_IGNORE_FILE","setPattern","ignoreFile","removePattern","removeWorkspace","fileCount","isIgnored","ignoreIterations","searchRank","cur","rel","relative","endTimeMs","ignoreFileCount","deltaMs","toRank","measure","CopilotIgnore","setIgnoredStatus","onDidWorkspaceRemove","onDidIgnorePatternMove","oldPath","newPath","onDidIgnorePatternDelete","onDidIgnorePatternCreate","isCopilotIgnoreFile","statusReporter","CompletionType","CopilotPanelScheme","OPEN_COPILOT","CompletionContext","insertPosition","completionType","appendToCompletion","contextObj","returnPosition","remain","completionContextPrimer","fromJSONParse","solutionsLogger","parsingBlockFinished","replaceStart","isBlockBodyFinished","generateSolutionsStream","solutions","locationFactory","getDocument","promptResponse","extractPrompt","trailingWs","ourRequestId","completionTypeToString","telemetrizePromptLength","solutionCount","promptEndPos","forLanguage","isSupportedLanguage","contextIndent","contextIndentation","postOptions","next_indent","prompt_tokens","prefixTokens","suffix_tokens","suffixTokens","repoInfo","extractRepoInfoInBackground","completionParams","engineUrl","getEngineURL","tryGetGitHubNWO","getDogFood","getUserKind","uiKind","CopilotUiKind","Panel","requestLogProbs","finishedCb","force_indent","trim_by_indentation","fetchAndStreamCompletions","choices","choice","choiceCopy","trimRight","prependChoices","cleanupIndentChoices","asyncIterableMapFilter","postProcessChoice","apiChoice","display","displayBefore","displayStartPos","getNodeStart","trimLastLine","asyncIterator","lineCursorHistory","fileCursorHistory","singleFile","numFocused","clickCount","lastClickTime","getDocs","docs","docTime","sortedDocsByClickTime","sortedDocsByClickCount","handleException","redactHomeDir","isHandlingRejection","accessTimes","aAccessTime","cursorHistoryManager","CursorHistoryManager","registerCursorTracker","selections","selection","textEditor","CERTIFICATE_ERRORS","notifiedErrorCodes","supportsSSC","didNotifyBefore","displayCertificateErrorNotification","learnMoreLink","certificateErrorMessage","showCertificateWarningMessage","learnMoreAction","userResponse","EditorExperimentFilters","trimVersionSuffix","features","registerStaticFilters","defaultFilters","buildInfo","editorSession","Filter","ApplicationVersion","ClientId","ExtensionName","ExtensionVersion","TargetPopulation","Public","createDefaultFilters","addEditorSpecificFilters","createAllFilters","registerDynamicFilter","CopilotOverrideEngine","ExpTreatmentVariables","ExpConfig","variables","assignmentContext","telemetryExpProblem","createEmptyConfig","addToTelemetry","ExpServiceTelemetryNames","featuresTelemetryPropertyName","assignmentContextTelemetryPropertyName","FilterSettingsToExpConfigs","task","Task","fetchExperiments","toHeaders","getCachedExpConfig","producer","expirationMs","storeResult","staticFilters","dynamicFilters","upcomingDynamicFilters","assignments","getDynamicFilterValues","registerUpcomingDynamicFilter","requestFilters","granularityDirectory","getGranularityDirectory","preGranularityFilters","makeFilterSettings","rememberedGranularityExtension","extendFilters","expAccordingToRememberedExtension","getExpConfig","newFilterSettings","GranularityByCallBuckets","NaN","GranularityTimePeriodSizeInH","currentGranularityExtension","backgroundQueue","upcomingDynamicFilterCheckDelayMs","upcomingFilter","otherFilterSettingsToPrefetch","prepareForUpcomingFilters","filtersAndExp","GranularityDirectory","FilterSettings","fetchExpConfig","createFallbackConfig","getMinutes","upcomingTimeBucketMinutes","withChange","defaultExpConfig","getAssignment","DebounceMs","DebouncePredict","ContextualFilterEnable","ContextualFilterEnableTree","ContextualFilterAcceptThreshold","contextualFilterAcceptThreshold","ContextualFilterExplorationTraffic","contextualFilterExplorationTraffic","disableLogProb","OverrideBlockMode","FastCancellation","OverrideNumGhostCompletions","reasons","DropCompletionReasons","repoNwo","fileType","userKind","dogFood","CopilotRepository","CopilotFileType","CopilotUserKind","CopilotDogfood","CustomEngine","BeforeRequestWaitMs","MultiLogitBias","RequestMultilineExploration","IndentationMinLength","IndentationMaxLength","SuffixPercent","SuffixMatchThreshold","FimSuffixLengthThreshold","SuffixStartMode","Cursor","CursorTrimStart","SiblingBlock","SiblingBlockTrimStart","TokenizerName","cushman001","cushman002","mock","NumberOfSnippets","DEFAULT_NUM_OF_SNIPPETS","SnippetPercent","NeighboringTabsOption","Conservative","Medium","Eager","EagerButLittle","EagerButMedium","EagerButMuch","RetrievalComparable","NeighboringSnippetTypes","NeighboringSnippetType","NeighboringFunctions","NeighboringSnippets","CursorHistoryMatcher","NeighboringFileType","CursorMostRecent","CursorMostCount","WorkspaceSharingSameFolder","WorkspaceSmallestPathDist","OpenTabsAndCocommitted","OpenTabs","CursorSnippetsPickingStrategy","CursorOnly","JaccardCursor","CursorJaccard","RetrievalStrategy","RetrievalServerRoute","SymbolDefinitionStrategy","MaxPromptCompletionTokens","CursorContextFix","HybridInferenceThreshold","filterHeaders","fetcher","vscodeConfig","Configs","Id","AssignmentContext","telmetryNames","CopilotClientTimeBucket","extends","otherFilterSettings","telemetryName","BUCKETFILTER","clock","specs","defaultGranularity","DEFAULT_GRANULARITY","selectGranularity","rememberedFilters","granularity","byCallBuckets","timePeriodSizeInH","newGranularity","TimeBucketGranularity","setByCallBuckets","setTimePeriod","implementation","upcomingValues","getCurrentAndUpComingValues","GranularityImplementation","getUpcomingValues","ConstantGranularity","fetchBeforeFactor","lengthMs","timePeriodLengthMs","numBuckets","numByCallBuckets","getTimePeriodBucketString","timeHash","dateToTimePartString","upcomingTimePeriodBucketStrings","getUpcomingTimePeriodBucketStrings","upcomingByCallBucketStrings","getUpcomingByCallBucketStrings","upcomingTimePeriodBucketString","upcomingByCallBucketString","inABit","promptKey","previousLabel","previousLabelTimestamp","probabilityAccept","getLastLineLength","contextualFilterEnableTree","cfManager","yt_1","acw","dt_1","ln_dt_1","ln_promptLastLineLength","promptLastCharIndex","promptPrefix","promptLastChar","contextualFilterCharacterMap","ln_promptLastLineRstripLength","promptLastRstripCharIndex","promptPrefixRstrip","trimEnd","promptLastRstripChar","ln_documentLength","documentLength","ln_promptEndPos","relativeEndPos","languageIndex","contextualFilterLanguageMap","treeScore","sum","contextualFilterIntercept","contextualFilterWeights","javascript","typescript","typescriptreact","python","vue","php","dart","javascriptreact","go","css","cpp","scss","markdown","csharp","java","rust","ruby","$","J","N","Q","U","V","var0","var1","var2","var3","var4","var5","var6","var7","var8","var9","var10","var11","var12","var13","var14","var15","var16","var17","var18","var19","var20","var21","var22","var23","var24","var25","var26","var27","var28","var29","var30","var31","var32","var33","var34","var35","var36","var37","var38","var39","var40","var41","var42","var43","var44","var45","var46","var47","var48","var49","var50","var51","var52","var53","var54","var55","var56","var57","var58","var59","var60","var61","var62","var63","var64","var65","var66","var67","var68","var69","var70","var71","var72","var73","var74","var75","var76","var77","var78","var79","var80","var81","var82","var83","var84","var85","var86","var87","var88","var89","var90","var91","var92","var93","var94","var95","var96","var97","var98","var99","var100","sigmoid","completionResults","textEditorOptions","lastShownCompletionIndex","currentLine","normalizeIndentCharacter","displayNeedsWsOffset","wordRange","isMiddleOfTheLine","rangeFromStart","textBefore","coversSuffix","completionIndex","TypingAsSuggested","lastShownCompletion","restCompletions","expDebounce","debouncePredict","acceptProbability","sigmoidShift","sigmoidSlope","debounceMs","lastPrefix","lastSuffix","lastPromptHash","genericGetCompletionsFromNetwork","requestContext","baseTelemetryData","processChoices","ghostTextLogger","extendedBy","numGhostCompletions","overrideNumGhostCompletions","shouldDoParsingTrimming","multiline","getNumGhostCompletions","temperature","getTemperatureForSamples","shouldDoServerTrimming","multiLogitBias","requestStart","newProperties","GhostText","stop","logit_bias","newMeasurements","engineURL","delayMs","mkBasicResultTelemetry","getProcessingTime","shouldFailForDebugPurposes","makeGhostAPIChoice","ghostChoice","forceSingleLine","ghostTextDebouncer","Debouncer","exploreMultilineRandom","recordLastSuccessfulCompletionContext","promptHash","addToCache","keyForPrompt","appendToCache","newContents","getCachedChoices","adjustLeadingWhitespace","ws","textLeftWs","trimLeft","telemetryWithAddData","numTokens","compCharLen","numLines","meanAlternativeLogProb","extendedTelemetry","extendWithRequestId","confidence","ghostTextScoreConfidence","quantile","ghostTextScoreQuantile","telemetryPerformance","performanceKind","processingTimeMs","requestTimeMs","completionCharLen","preIssuedTelemetryData","inlineSuggestion","isMiddleOfLine","selectionPosition","isValidMiddleOfLine","endOfLine","isValidMiddleOfTheLinePosition","isInlineSuggestion","statusBarItem","featuresFilterArgs","requestMultilineExploration","ghostTextStrategy","requestMultiline","isCyclingRequest","isEmptyBlockStartDocumentPosition","isEmptyBlockStart","isEmptyBlockStartDocumentPositionRangeEnd","documentLineCount","positionLine","shouldRequestMultiline","adjustedPosition","getGhostTextStrategy","choicesTyping","prefixMatches","suffixMatches","lastCachedCompletion","remainingPrefix","completionsToReturn","completionToReturn","getCompletionsForUserTyping","choicesCache","cachedChoice","getCompletionsFromCache","Cache","getLocalInlineSuggestion","beforeRequestWaitMs","contextualFilterEnable","computeContextualFilterScore","detectedLanguage","detectLanguage","hybridInference","routingModel","route","oldRequestContext","oldGhostTextStrategy","RoutingModel","GPTC","lineBeforeCursor","restOfLine","beforeCursorWhitespace","afterCursorWhitespace","detectedLanguageId","fileExtension","promptChoices","promptBackground","typeFileHashCode","neighborSource","typeFiles","promptComputeTimeMs","computeTimeMs","contextualFilterScore","gitRepoInformation","ComputationStatus","PENDING","gitRepoUrl","gitRepoHost","gitRepoOwner","gitRepoName","repo","gitRepoPath","engineName","extractEngineName","isMultiline","telemetryIssued","networkChoices","processingTime","choicesStream","apiChoices","telemetryBlob","getAllCompletionsFromNetwork","resultChoices","Cycling","debounceLimit","getDebounceLimit","debounce","completionResult","gptcSuggestionToCache","modelInfo","blockFinished","GptC","choicesIterator","firstRes","firstChoice","remainingChoices","remainingPromise","cacheDone","fastCancellation","innerChoice","redactedChoice","getCompletionsFromNetwork","choicesArray","postProcessedChoices","asyncIterableFromArray","hasSuffix","checkSuffix","choiceTelemetryData","isEmptyLine","toReplace","replacer","trimmed","removedCharacters","indentSize","spacesAtStart","insertionCategory","markAsDisplayed","extraFlags","copilot_trackingId","telemetryRaw","contributors","contributor","contributeHeaders","contributeHeaderValues","HybridInferenceRoutingReason","HybridInferenceImpl","loadingFailureReason","routingLogic","completionsWrapper","noThresholdConfig","getNoThresholdConfig","GPTCRouter","loadAsync","inferenceModel","GptCModelInference","routingThreshold","hybridInferenceThreshold","sendRoutingTelemetry","modelSelection","routingReason","prediction","routingTelemetryData","issuedTime","BASE","routeAsync","shouldUseGptC","reasonCode","telemetryObject","randomUUID","logEnginePrompt","logEngineCompletion","DictSettingsStorage","isNewInstall","handleInstall","isNewUpgrade","handleUpgrade","markUpgraded","handleUninstall","previouslyInstalled","knownLanguages","abap","bat","bibtex","blade","clojure","filenames","ql","coffeescript","dockerfile","elixir","erlang","fsharp","groovy","terraform","erb","razor","haml","handlebars","haskell","ini","jsonc","julia","kotlin","less","lua","makefile","perl","powershell","pug","sass","scala","shellscript","slim","solidity","stylus","svelte","swift","latex","verilog","vb","xml","xsl","yaml","Language","isGuess","CachingLanguageDetection","FilenameAndExensionLanguageDetection","NotebookLanguageDetection","notebookDelegate","isNotebook","detectLanguageForRegularFile","detectCellLanguage","activeCell","getCells","vscode","languageIdByExtensionTracker","LanguageIdTracker","extensionWithoutTemplate","extensionWithoutTemplateLanguage","languageIdWithGuessing","detectLanguageId","computeFullyQualifiedExtension","knownTemplateLanguageExtensions","filenameWithoutExtension","knownFileExtensions","isExtensionValidForTemplateLanguage","limitations","templateLanguageLimitations","candidatesByExtension","determineLanguageIdByCandidates","candidates","determineMostSeenLanguages","mostSeenLanguageId","mostRecentLanguageId","seenLanguages","preciseTimestamp","bigint","mostRecentIds","logVerbose","verboseLogging","appendLine","targets","minLoggedLevel","stringToLevel","levelString","logTarget","targetOverride","sendErrorTelemetry","secureMessage","standardMessage","telemetryMessage","safeError","invalidMacAddresses","validateMacAddress","tempCandidate","macAddress","ifaces","networkInterfaces","networkInterface","createHash","getMacMachineId","certLogger","FeatureAwareCertificateReader","createRealReader","EmptyRootCertificateReader","notifier","realReader","noopReader","cachedReader","createPlatformRootCertificateReader","envReader","EnvironmentVariableRootCertificateReader","cachingReader","CachingRootCertificateReader","errorHandlingReader","ErrorHandlingCertificateReader","LinuxRootCertificateReader","MacRootCertificateReader","WindowsRootCertificateReader","UnsupportedPlatformRootCertificateReader","extraCertsFile","NODE_EXTRA_CA_CERTS","extraCerts","readCertsFromFile","rootCAs","certPath","macCa","originalImpl","setupExecFileWithLargeBuffer","winCa","exePath","setupCertificateFallbackExecutable","exe","execFile","realImpl","maxBuffer","mkdtempSync","tempExe","copyFileSync","chmodSync","certFilePath","nonEmptyCerts","uniqueCerts","_certificateReader","getCertificates","_vscodeAdditionalCaCerts","secureContext","createSecureContext","addCACert","createSocketFactory","userSettings","connectionTimeoutInMs","certificateConfigurator","applyToRequestOptions","enhanceProxySettings","ProxySocketFactory","createSocket","SocketError","fetchApi","createFetchApi","RootCertificateConfigurator","_proxySettings","NODE_TLS_REJECT_UNAUTHORIZED","helixFetch","helixOptions","disconnectAll","makeAbortController","createConnectRequestOptions","connectRequest","useChunkedEncodingByDefault","removeAllListeners","localAddress","DotComAuthority","DotComUrl","recalculateUrls","isGitHubEnterprise","isEnterprise","authority","tokenUrl","deviceFlowStartUrl","deviceFlowCompletionUrl","userInfoUrl","newUrl","apiUri","Utils","joinPath","getJson","getBody","secretKey","intent","cancelToken","OPENAI_PROXY_HOST","V1_ENGINES_COPILOT_CODEX","getProxyURLWithPath","_getOverrideProxyURL","TEST_ENGINE_PATHS","nwo","dogfood","engineOverride","customEngine","_getEnginePath","fetchLogger","reqIdStr","postProcessChoices","allowEmptyChoices","asyncIterableFilter","telemetryProperties","fetchWithParameters","createTelemetryData","dropCompletionReasons","finishedCompletions","SSEProcessor","processSSE","asyncIterableMap","prepareSolutionForReturn","stops","max_tokens","top_p","githubNWO","uiKindToIntent","postRequest","modelRequestId","totalTimeMs","warningTelemetry","fetchWithInstrumentation","calculateMeanLogProb","jsonData","logprobs","token_logprobs","logProbSum","iterLimit","calculateMeanAlternativeLogProb","top_logprobs","MAX_PROMPT_LENGTH","DEFAULT_CHARACTER_MULTIPLIER","completionLines","newLine","numShots","configTemp","streamChoicesLogger","APIJsonDataStreaming","text_offset","splitChunk","dataLines","newExtra","expectedNumChoices","stats","ChunkStats","processSSEInner","extraData","networkRead","maybeCancel","dataLine","lineWithoutData","finishSolutions","allSolutionsDone","finishOffset","hasNewLine","finish_reason","loggedReason","completionChoiceFinishReason","markYielded","extraDataJson","convertToAPIJsonData","streamingData","flattenedLogprobs","flattenedTopLogprobs","flattenedOffsets","flattenedTokens","convertToAPIChoice","ChoiceStats","yieldedTokens","seenTokens","postInsertionLogger","captureTimeouts","captureCode","captureRejection","isFimEnabled","promptElementRanges","capturedCode","terminationOffset","documentText","documentTextBefore","hypotheticalPromptResponse","hypotheticalPrompt","hypotheticalResponse","contextIndentationFromText","indentTerminationFunction","indentationBlockFinished","terminationResult","maxOffset","margin","lexAlignment","lexEditDistance","fraction","lexDistance","needleLexLength","distance","charEditDistance","editDistance","relativeLexEditDistance","completionLexLength","foundOffset","stillInCodeHeuristic","postInsertConfiguration","triggerPostInsertionSynchroneously","telemetryRejected","positionTracker","ChangeTracker","promptTelemetry","hypotheticalPromptPrefixJson","hypotheticalPromptSuffixJson","hypotheticalPromptJson","customTelemetryData","capturedCodeJson","trackedOffset","terminationOffsetInCapturedCode","telemetryAccepted","trimmedCompletion","tracker","stillInCodeCheck","finding","afterAcceptedTelemetry","checkStillInCode","CoCommittedFiles","docManager","commitFileResolver","cocommittedFilesCache","computeInBackgroundAndMemoize","getCoCommittedFiles","neighboringFileType","maxNumFiles","coCommittedFiles","getCoCommitResult","totalLen","cocommittedFile","tryGetTextDocument","NeighborSource","MAX_NEIGHBOR_AGGREGATE_LENGTH","maxNumNeighborFiles","openFiles","fct","cacheSize","resultsCache","inComputation","memorizedComputation","computation","computedResult","neighborFiles","truncateDocs","sortByAccessTimes","cocommittedFiles","neighborFileUriSet","considerNeighborFile","neighborLanguageId","workspaceFileSystem","WorkspaceFileSystem","WorkspaceFiles","CommitFileResolver","CursorHistoryFiles","OpenTabFiles","getNeighborFiles","MAX_NEIGHBOR_FILES","EXCLUDED_NEIGHBORS","workspaceFilesCache","getWorkspaceFiles","filePathDistance","targetFilePath","dist","lca","maxNumWorkspaceFiles","blacklist","workspaceUri","getWorkspaceFolder","currentFileRepository","findFiles","fileRelativePath","visitedFiles","workspaceFiles","aDist","bDist","workspaceFile","promptlib","continuations","continuationRegex","isContinuationLine","indentationOfLine","prevLines","nextLines","seekNonBlank","ind","indIdx","trimmedLine","currentIdx","completionCutOrContinue","previewText","isContinuation","lastLineOfPreview","breakIndentation","lastLine","extraSpace","promptTrim","extractPromptForSource","_copilotNotAvailable","suffixPercent","fimSuffixLengthThreshold","MIN_PROMPT_CHARS","_contextTooShort","prefixLength","suffixLength","maxPromptLength","maxPromptCompletionTokens","neighboringTabs","neighboringTabsOption","neighboringSnippetTypes","numberOfSnippets","snippetPercent","suffixStartMode","tokenizerName","indentationMinLength","indentationMaxLength","cursorContextFix","promptOptions","cursorSnippetsPickingStrategy","retrievalOptions","getRetrievalOptions","queryRetrievalSnippets","symbolDefinitionStrategy","symbolDefSnippets","getSymbolDefSnippets","suffixMatchThreshold","fileSystem","promptInfo","history","getPrompt","getPromptForSource","resPrompt","extractPromptForDocument","extractPromptForNotebook","beforeCells","beforeSource","neighboringCell","activeCellLanguageId","commentBlockAsSingles","addNeighboringCellsToPrompt","nextHandlerId","use_worker_threads","localPromptlib","workerFuns","directFuns","_fileSystem","getPromptProxy","createWorker","getBlockCloseToken","getFunctionPositions","getCallSites","parsesWithoutError","orgs","org","ghnwo","adoNwo","tryGetADONWO","fileUri","baseFolder","backgroundRepoInfo","CompletedComputation","extractRepoInfo","previousUri","configPath","getRepoBaseFolder","getRepoUrlFromConfigText","parsedResult","parseRepoUrl","GitUrlParse","gitConfig","remoteSectionRegex","deprecatedRemoteSectionRegex","setUrlRegex","newSectionRegex","remoteUrl","remoteSection","isWithinMultilineUrl","remoteSectionMatch","urlMatch","snippetFromRetrievalResult","line_info","before_start_line","after_end_line","restrictedTelemetry","corpusId","corpus_config","corpus_id","repo_nwo","repoSha","repo_sha","indexTimestamp","index_timestamp","buildSnippetMatcher","matcherName","matcherThreshold","exactSnippetMatcher","editDistanceSnippetMatcher","lineBasedSnippetMatcher","queryKey","querySnippet","breakUpLongLines","maxLineCharLength","threshold","thresholdType","queryLines","cacheLines","intersection","getRetrievalContext","contextInfo","getCursorContext","tokenLength","RETRIEVAL_CACHE_SNIPPET_MATCHERS","RetrievalCache","maxUriCacheSize","uriToCache","hashContext","queryContext","uriCache","retrievalId","put","retrievalContext","documentRequestStates","retrievalRequestUrl","serverRouteImpl","processRetrievalResponse","currentRetrievalOptions","unparsedData","impl","filterQuerySnippets","retrievalCache","rest","commonMeasurements","numSnippetsFromServer","numFilteredSnippets","elapsedEmbeddingNs","elapsed_embedding_ns","elapsedKnnNs","elapsed_knn_ns","elapsedFindSourceNs","elapsed_find_source_ns","telemetrizeProcessRetrievalResponse","telemetrizeProcessRetrievalError","snippetMatcherName","snippetMatcherThreshold","requestState","pendingRetrievalId","telemetrizeQueryRetrievalDebounce","minLineCount","minTokenLength","retrievalContextTokens","retrievalLineCount","cursorPos","telemetrizeTooShortContext","cacheHit","cacheLookupStart","cacheLookupElapsed","telemetrizeCacheLookup","lookupCache","telemetrizePostRetrievalRequest","telemetrizePostRetrievalResponse","telemetrizePostRetrievalRequestError","postRetrievalRequest","cachedRetrievalId","cachedSnippets","numSnippetsReturned","telemetrizeQueryRetrievalFromCache","SnippetProviderType","Retrieval","semantics","SnippetSemantics","retrievalStrategy","retrievalServerRoute","maxLineCount","maxTokenLength","range_from","range_to","max_length","getSymbolDefinition","symbolName","symbolDefinitionProvider","shortCircuit","callerFunctions","symbolDefinitionPromises","callerFunc","docInfoSnippet","symbolDefPromises","flat","configs","max_token_sequence_length","last_tokens_to_consider","isRepeatedPattern","pi","kmp_prefix_function","tokensBackwards","haystack","needle","curRow","curStart","prevRow","prevStart","swap","substituted","best","emptyLexDictionary","reverseLexDictionary","lexeme","lexGeneratorWords","newState","Space","Other","lexicalAnalyzer","lexGenerator","lexFilter","lexed","notSingleSpace","haystackLexed","needleLexed","dBoth","haystackLexLength","lookupId","needleLexedLength","needleFirst","needleLast","alignment","hLexId","nLexId","hIndex","nIndex","haystackLexeme","ghostTextDisplayInterceptParameter","ghostTextDisplayLog1pcompCharLenParameter","ghostTextDisplayMeanLogProbParameter","ghostTextDisplayMeanAlternativeLogProbParameter","ghostTextDisplayLanguageParameters","ghostTextDisplayQuantiles","Logit","Regressor","coefficient","transformation","contribution","ghostTextRetentionModel","intercept","coefficients","quantiles","logitsToQuantiles","predict","regressor","x0","points","x_after","x_before","y_after","y_before","linearInterpolation","lang","isMiddleOfTheLineSuggestion","isRepetitive","postProcessedChoice","nextLine","lineNo","matchesNextLine","completionTextJson","blockCloseToken","nextLineStart","thisLineStart","lineText","maybeSnipCompletion","reporter","shouldSendRestricted","reporterSecure","FailingTelemetryReporter","disposeReporter","disposeReporterSecure","trackingId","optedIn","setupUpdateOnToken","organizationsList","displayedTime","addExpAndFilterToTelemetry","extendWithEditorAgnosticFields","extendWithConfigProperties","configProperties","telemetryConfig","requestProperties","keysToRemoveFromStandardTelemetryHack","sanitizeKeys","keysExemptedFromSanitization","updateTimeSinceIssuedAndDisplayed","timeSinceIssued","timeSinceIssuedMs","timeSinceDisplayed","timeSinceDisplayedMs","validateData","validateTelemetryProperties","problem","validateTelemetryMeasurements","m_err","validationError","includeExp","extendWithExpTelemetry","addRequiredProperties","maybeRemoveRepoInfoFromPropertiesHack","definedTelemetryData","makeReadyForSending","_telemetry","_telemetryError","promptPrefixCharLen","promptSuffixCharLen","promptCharLen","setUrlForTesting","_telemetryExpProblem","_telemetryRaw","maybeError","sendRestricted","definedTelemetryDataStub","redactPaths","definedTelemetryDataSecure","_telemetryException","promptPrefixJson","promptSuffixJson","promptJson","telemetryDataWithPrompt","AuthTelemetryNames","AuthNotifyShown","AuthNotifyDismissed","NewGitHubLogin","GitHubLoginSuccess","GitHubLoginFailed","APP_INSIGHTS_KEY","APP_INSIGHTS_KEY_SECURE","telemetryNamespace","telemetryEnabled","AzureInsightReporter","configureReporter","decorateWithCommonProperties","appInsights","createAppInsightsClient","qualifyEventName","excerpt","startCert","endCert","createTestCertificateReader","TestProductFeatures","TestNotificationSender","TestUrlOpener","NoOpStatusReporter","TestLanguageDetection","NoAdditionalExperimentFilters","LibTestsEditorInfo","TestLocationFactory","LocalFileSystem","tokenFileName","createTokenManager","tokenStr","readTestingGitHubToken","GH_COPILOT_TOKEN","TestCertificateReader","FakeHeaders","strings","toStream","FakeFetcher","determineEnvFlagEnabled","determineVerboseLoggingEnabled","telemetryLogging","determineTelemetryLoggingEnabled","testMode","determineRecordInput","collectCapturedTelemetry","strictEqual","isEvent","_withTelemetryCapture","forceTelemetry","work","startFakeTelemetryServerIfNecessary","oldUrl","waitTimeMultiplier","collectMessagesWithRetry","assertion","errorProps","hackOptOutListener","fakeTelemetryServer","fakeTelemetryServerPort","newPort","findFreePort","workerData","eventsMatching","positionToString","openedUrls","warningPromises","warningPromise","docUri","assertLanguageHasBeenDetected","expectedLanguageId","deepStrictEqual","FixedLanguageDetection","ProductFeature","testEnvelope","newToken","InMemoryTextDocument","_cells","_openTextDocuments","_closedTextDocuments","_notebookDocuments","setClosedTextDocument","setNotebookDocument","docPath","folderPath","homedirRegExp","homedir","shortCircuitMs","shortCircuitReturn","ElidableText","LineWithValueAndCost","adjustValue","elidableTextForSourceCode","adjust","recost","coster","getTokenizer","makePrompt","maxTokens","ellipsis","indentEllipses","tokenizer","cost","infiniteWorth","infiniteIndentation","trimmedEllipsis","totalCost","defensiveCounter","leastDesirable","least","mostRecentNonBlankLine","newEllipis","newTotalCost","oldContent","newContent","structuredPatch","changedLinesOld","changedLinesNew","hunk","hunks","oldStart","oldLines","newStart","newLines","oldTree","mapLabels","flattenVirtual","parseTree","newTree","visitTree","fromTreeWithFocussedLines","fromTreeWithValuedLines","tree","valuedLines","foldTree","deparseLine","DEFAULT_TREE_TRAVERSAL_CONFIG","worthUp","worthSibling","worthDown","treeWithDistances","isBlank","maxChildLabel","subs","new_values","nodeLabel","focusOnLastLeaf","focusOnFirstLine","treeWithFocussedLines","foundLastTrue","subnode","isLine","_cost","defaultFileSystem","isVirtual","isTop","sourceLine","cut","deparseTree","accum","cutAt","cutAtSet","cuts","curUndef","describeTree","padStart","labelString","encodeTree","subString","firstLineOf","lastLineOf","registerLanguageSpecificParser","processMarkdown","processJava","javaLabelRules","buildLabelRules","package","import","class","interface","javadoc","comment_multi","comment_single","opener","closer","originalTree","labelLines","combineClosersAndOpeners","labelVirtualInherited","visitor","_visit","subtree","newSubs","shouldContinue","accumulator","skip","rebuild","rebuilt","topNode","MarkdownLabelRules","heading","subheading","subsubheading","headingLevel","currentHierarchy","oldTreeSubs","groupBlocks","parseRaw","rawLines","indentations","parseNode","parseSubs","lineNode","initialLine","parentIndentation","lastBlank","blankNode","parsedLine","labelRules","ruleMap","returnTree","rebuildTree","lastNew","directOlderSibling","firstNonVirtual","subsToKeep","subsToWrap","wrappedSubs","virtualNode","clearLabelsIf","isDelimiter","currentBlockIndentation","nodesSinceLastFlush","lastNodeWasDelimiter","flushBlockIntoNewSubs","final","virtual","subIsDelimiter","genericLabelRules","LANGUAGE_SPECIFIC_PARSERS","languageSpecificParser","languageCommentMarkers","jsx","tex","dontAddLanguageMarker","shebangLines","hasLanguageMarker","markers","trailingNewline","commented","resolveLocalTypeScriptImport","importerPath","imp","namedChild","getTypescriptImportedNames","importClause","namedImports","namedImport","namedChildren","childForFieldName","alias","exportsCache","extractTypeScriptDeclaration","srcString","defn","decl","extractTypeScriptFunctionDeclaration","memberDecls","member","extractTypeScriptMemberDeclaration","extractTypeScriptBodyDecls","getDocComment","docCommentNode","getFirstPrecedingComment","firstChild","getIndentation","docComment","getExportedDeclarations","parseTreeSitter","queryExports","rootNode","captures","hasError","exportedDecl","exportedDecls","localImportRegex","localImportContext","lastImportOffset","lastImport","newlineAfterLastImport","lastTypeScriptLocalImportOffset","imports","toplevelStmt","getTypeScriptImports","srcUri","importedNames","importedName","extractTypeScriptLocalImportContext","WASMLanguage","languageIdToWasmLanguageMapping","Python","JavaScript","TypeScript","TSX","Go","Ruby","languageIdToWasmLanguage","jsFunctionQuery","functionQuery","tsx","declaratorWithRequire","commonJsImport","tsImportQueries","importsQuery","jsExportQueries","exportsQuery","globalVarsQuery","jsFunctionTypes","functionTypes","isFunctionParent","nd","loadedLanguages","getLanguage","wasmLanguage","loadedLang","Parser","wasmFile","loadWasmLanguage","treeSitterLanguage","setLanguage","parsedTree","innerQuery","queries","queryFunctions","docstringQuery","blockNode","namedChildCount","declarator","previousSibling","endPosition","positions","callSiteQuery","pretruncateOffset","linesBeforeTruncation","callers","resIndex","callerName","callerLineNo","callerStartChar","argsStartIndex","argsEndIndex","cap","capIndex","column","callerLineCol","BaseBlockParser","nodeMatch","nodeTypesWithBlockOrStmtChild","nodeToComplete","descendantForIndex","blockNodeType","fieldLabel","getNextBlockAtPosition","getNodeMatchAtPosition","nextComment","nextSibling","commentInline","commentAtEnd","lengthOfBlock","RegexBasedBlockParser","blockEmptyMatch","lineMatch","isBlockStart","trimStart","blockText","rewindToNearestNonWs","prevNewline","nextNewline","getLineAtOffset","isBlockBodyEmpty","lineStart","outdented","fst","snd","fstIndent","sndIndent","TreeSitterBasedBlockParser","startKeywords","emptyStatementType","curlyBraceLanguage","isBlockEmpty","queryPythonIsDocstring","nodeAtPos","currNode","errorNode","blockParentNode","prevSibling","colonNode","parenCount","sibling","formalParameters","leftCurlyBrace","expectedType","wasmLanguageToBlockParser","class_definition","elif_clause","else_clause","except_clause","finally_clause","for_statement","function_definition","if_statement","try_statement","while_statement","with_statement","arrow_function","catch_clause","do_statement","for_in_statement","function","function_declaration","generator_function","generator_function_declaration","method_definition","class_declaration","ambient_declaration","internal_module","abstract_class_declaration","communication_case","default_case","expression_case","func_literal","labeled_statement","method_declaration","type_case","begin_block","end_block","lambda","until","while","case","do","unless","do_block","getBlockParser","cachedSuffix","LanguageMarkerOption","PathMarkerOption","SnippetPositionOption","SnippetSelectionOption","LocalImportContextOption","LineEndingOptions","SuffixMatchOption","SuffixOption","MAX_EDIT_DISTANCE_LENGTH","TOKENS_RESERVED_FOR_SUFFIX_ENCODING","PromptOptions","languageMarker","Top","pathMarker","Declarations","snippetPosition","TopOfText","snippetProviderOptions","normalizationFunction","normalizationParams","retrieval","reservedSnippetCount","lineEnding","ConvertToUnix","suffixMatchCriteria","Levenshtein","selectionValue","snippetSelection","newOptions","providerOptions","TopK","snippetSelectionK","languageNormalizationMap","jade","cshtml","normalizeLanguageId","newLineEnded","neighbors","completeOptions","useCachedSuffix","priorities","Priorities","directContextPriority","justBelow","TOP","languageMarkerPriority","Always","pathMarkerPriority","localImportContextPriority","lowSnippetPriority","highSnippetPriority","justAbove","promptWishlist","PromptWishlist","languageMarkerLine","pathMarkerLine","NoMarker","getLanguageMarker","PromptElementKind","LanguageMarker","getPathMarker","PathMarker","NoContext","extractLocalImportContext","ImportedFile","allSnippets","getNeighborSnippets","addSnippetsNow","budget","processSnippetsForWishlist","SimilarFile","RetrievalSnippet","SymbolDef","SymbolDefinition","announcedSnippet","priority","normalizedScore","source_lines","directContext","DirectlyAboveCursor","lastLineStart","directContextBeforePartialLastLine","partialLastLine","appendLineForLine","BeforeCursor","AfterCursor","actualSuffix","fulfill","getSiblingFunctionStart","availableTokens","prefixTargetTokens","suffixTargetTokens","suffixText","takeFirstTokens","Equal","findEditDistanceScore","startingOffset","anc","getAncestorWithSiblingFunctions","isFunctionDefinition","defaultCursorContextOptions","cursorContextOptions","takeLastLinesTokens","contextLines","byLines","WINDOWED_TOKEN_SET_CACHE","leavingKey","CustomizedFixedWindowSizeJaccardMatcher","WindowedMatcher","referenceDoc","windowLength","getWindowsDelineations","getBasicWindowDelineations","trimDocument","_getCursorContextInfo","similarityScore","computeScore","retrieveAllSnippets","objectDoc","sortOption","SortOptions","Descending","referenceTokens","tokensInWindows","needToComputeTokens","tokenizedLines","tokenize","tokensInWindow","sortScoredSnippets","jaccardMatcher","Ascending","snippetA","snippetB","markerToSnippet","nonOverlappingSnippets","snippetMarker","NeighboringTabs","snippetSelectionOption","BestMatch","bestMatch","findBestMatch","findTopKMatches","snippetsByCursor","retrieveCursorSnippets","bestCursorScore","bestSnippets","bestInMiddle","bestSnippetsByCursor","bestSnippetsBoundaryByCursor","bestSnippet","gatherNonOverlappingSnippets","snippetCandidates","jaccardMap","topKByJaccard","cursorMap","resortedTopKByJaccard","currentIndex","cursors","pointType","sparsePoints","leftBoundary","rightBoundary","numCursors","previousLine","FACTORY","FixedWindowSizeJaccardMatcher","IndentationBasedJaccardMatcher","windows","getIndentationWindowsDelineations","FunctionJaccardMatcher","FunctionalMatcher","neighborOptionToSelection","snippetLength","conservative","medium","eager","eagerButLittle","eagerButMedium","eagerButMuch","retrievalComparable","matcherFactory","getMatcher","neighbor","findMatches","Tokenizer","stopsForLanguage","SPECIFIC_STOPS","GENERIC_STOPS","splitIntoWords","_referenceTokens","getMatchingScore","neighborDoc","neighborDocTokens","neighborFuncs","funcPositions","func_source","getNeighboringFunctions","ENGLISH_STOPS","snippetSemanticsToString","Alias","announceSnippet","targetDocLanguageId","headlinedSnippet","normalizeSnippetScore","providerScore","snippetRem","sortSnippetsDescending","selectSnippets","normalizedSnippets","snippetsByProvider","totalPrioritized","highPriorityBudget","usedBudget","processedSnippets","nextHighPriority","nextLowPriority","announced","labeledTree","clearLabels","totalLength","firstLineAfter","getStartLine","getEndLine","lengthFromAToBInclusive","lastBThatWasntABlank","endLineTrimmedForBlanks","matrix","ord","textDecoder","decodeStr","get_char_pairs","pairs","prev_char","tokenizers","MockTokenizer","BPETokenizer","byte_encoder","byte_decoder","textEncoder","TextEncoder","encodeStr","VOCAB","ENCODER","encoder_path","encoder_json","bpe_merges","bpe_ranks","dictZip","cs_","chr","bytes_to_unicode","byteEncodeStr","bpe","minPairs","joined_pair","rank","minPairsKeys","bigram","new_bytes","matchAll","chunk_tokens","takeLastTokens","chars","suffixT","detokenize","prefix_t","newline","tokenizeStrings","PromptBackground","markUsed","IsSnippet","undoMarkUsed","markUnused","PromptChoices","usedCounts","unusedCounts","PromptElementRanges","usedElements","previousKind","nextRangeStart","lineEndingOption","getContent","convertLineEndings","requires","excludes","dependentId","dependeeId","dependent","dependee","excludingId","excludedId","excluding","excluded","tallyOfChoices","indexedContent","idsThatHaveAlreadyBeenAdded","idsConflictingWithAlreadyAddedIds","budgetBreakingElement","remainingContent","remainingBudget","budgetUse","probableNextElem","targetIndex","bestIndex","getMinimalGreater","promptLength","removeAfterAll","extendedContent","registeredPriorities","BOTTOM","nearestNeighbor","between","_len","subexp","buildExps","isIRI","ALPHA$$","DIGIT$$","HEXDIG$$","PCT_ENCODED$","SUB_DELIMS$$","RESERVED$$","IPRIVATE$$","UNRESERVED$$","SCHEME$","USERINFO$","DEC_OCTET_RELAXED$","IPV4ADDRESS$","H16$","LS32$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","IPV6ADDRESS$","ZONEID$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","IP_LITERAL$","REG_NAME$","HOST$","PORT$","AUTHORITY$","PCHAR$","SEGMENT$","SEGMENT_NZ$","SEGMENT_NZ_NC$","PATH_ABEMPTY$","PATH_ABSOLUTE$","PATH_NOSCHEME$","PATH_ROOTLESS$","PATH_EMPTY$","QUERY$","FRAGMENT$","HIER_PART$","URI$","RELATIVE_PART$","RELATIVE$","NOT_SCHEME","NOT_USERINFO","NOT_HOST","NOT_PATH","NOT_PATH_NOSCHEME","NOT_QUERY","NOT_FRAGMENT","ESCAPE","UNRESERVED","OTHER_CHARS","PCT_ENCODED","IPV4ADDRESS","IPV6ADDRESS","URI_PROTOCOL","IRI_PROTOCOL","slicedToArray","_arr","sliceIterator","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","error$1","mapDomain","ucs2decode","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","bias","basic","oldi","baseMinusT","fromCodePoint","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_currentValue2","basicLength","handledCPCount","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","currentValue","handledCPCountPlusOne","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_currentValue","qMinusT","punycode","SCHEMES","pctEncChar","pctDecChars","newStr","c3","_normalizeComponentEncoding","decodeUnreserved","decStr","userinfo","_stripLeadingZeros","_normalizeIPv4","_normalizeIPv6","_matches2","zone","_address$toLowerCase$","_address$toLowerCase$2","firstFields","lastFields","isLastFieldIPv4Address","fieldCount","lastFieldsStart","longestZeroFields","lastLongest","newHost","newFirst","newLast","URI_PARSE","NO_MATCH_IS_UNDEFINED","uriString","iri","reference","schemeHandler","unicodeSupport","domainHost","_recomposeAuthority","uriTokens","$2","RDS1","RDS2","RDS3","RDS5","removeDotSegments","im","absolutePath","resolveComponents","tolerant","unescapeComponent","handler$1","wsComponents","handler$2","resourceName","_wsComponents$resourc","_wsComponents$resourc2","handler$3","VCHAR$$","NOT_LOCAL_PART","NOT_HFNAME","NOT_HFVALUE","handler$4","mailtoComponents","unknownHeaders","hfields","hfield","toAddrs","_xl","_x2","_xl2","addr","toAddr","atIdx","localPart","URN_PARSE","handler$5","urnComponents","nid","nss","urnScheme","uriComponents","handler$6","uuidComponents","baseURI","relativeURI","schemelessOptions","uriA","uriB","escapeComponent","unsafeStringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","msecs","nsecs","dt","tl","tmh","v35","hashfunc","generateUUID","stringToBytes","DNS","LIB","_makeLong","posix","isUri","revive","_formatted","external","_fsPath","_sep","$mid","resolvePath","forge$","bufferFrom","x509","blob","converter","i$","to$","asn1parser","bin","out$","newBin","splitter","sync","execFileSync","enqueue","suspend","ref$","len$","toASN1","unicod","hash0","subj","writeUInt32LE","readUInt32BE","disabled","nApi","engine","Process","unique","saver","injector","syncProcess","$ave","ref1$","myself","asyncNext","syncNext","genProcess","napi","importAll$","toPEM","agentOptions","roots","patchMode","saveCreateSecureContext","iFactory","crypt32","that","dc","makeDir","this$","ignore","PEM","hashes","nextDir","createWriteStream","single","cleanUp","SSL_CERT_DIR","onsave","upgradeAPI","$cb","webpackContext","webpackContextResolve","__webpack_require__","pify","umask","pth","make","__webpack_modules__","convertChangesToDMP","convertChangesToXML","diffArrays","arrayDiff","removeEmpty","castInput","maxEditLength","newPos","extractCommon","pushComponent","useLongestToken","diffChars","characterDiff","diffCss","cssDiff","diffJson","canonicalize","jsonDiff","lineDiff","undefinedReplacement","stringifyReplacer","diffLines","diffTrimmedLines","generateOptions","ignoreWhitespace","newlineIsToken","diffSentences","sentenceDiff","diffWords","diffWordsWithSpace","wordDiff","applyPatch","applyPatches","parsePatch","createTwoFilesPatch","createPatch","complete","loadFile","compareLine","fuzzFactor","linedelimiters","formatPatch","oldFileName","newFileName","oldHeader","newHeader","calcLineCount","conflict","mine","theirs","arrayStartsWith","arrayEqual","merged","elidableTextForDiff","duplicateTree","cutTreeAfterLine","deparseAndCutTree","visitTreeConditionally","resetLineNumbers","queryGlobalVars","queryImports","AfterSiblings","KeepOriginal","FifteenPercent","__unused_webpack_exports","TreeSitter","initPromise","currentScript","moduleOptions","resolveInitPromise","moduleOverrides","arguments_","thisProgram","quit_","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","importScripts","ENVIRONMENT_IS_NODE","scriptDirectory","read_","readAsync","readBinary","setWindowTitle","locateFile","logExceptionOnExit","ExitStatus","isFileURI","keepRuntimeAlive","XMLHttpRequest","responseText","responseType","onload","print","printErr","quit","STACK_ALIGN","dynamicLibraries","wasmBinary","noExitRuntime","wasmMemory","WebAssembly","ABORT","EXITSTATUS","UTF8Decoder","HEAP8","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","updateGlobalBufferAndViews","INITIAL_MEMORY","Memory","wasmTable","Table","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","__RELOC_FUNCS__","runtimeInitialized","preRun","addOnPreRun","callRuntimeCallbacks","initRuntime","preMain","postRun","addOnPostRun","addOnInit","runDependencies","runDependencyWatcher","dependenciesFulfilled","addRunDependency","monitorRunDependencies","removeRunDependency","onAbort","RuntimeError","dataURIPrefix","wasmBinaryFile","tempDouble","tempI64","isDataURI","getBinary","getBinaryPromise","credentials","createWasm","asmLibraryArg","wasi_snapshot_preview1","GOTHandler","relocateExports","getDylinkMetadata","neededDynlibs","mergeLibSymbols","asm","__wasm_call_ctors","__wasm_apply_data_relocs","instantiate","instantiateWasm","instantiateStreaming","ASM_CONSTS","GOT","CurrentModuleWeakSymbols","Global","mutable","customSections","tlsExports","weakImports","memorySize","memoryAlign","tableSize","tableAlign","asmjsMangle","_main","LDSO","loadedLibsByName","loadedLibsByHandle","dynCallLegacy","wasmTableMirror","getWasmTableEntry","dynCall","createInvokeFunction","stackSave","stackRestore","_setThrew","___heap_base","zeroMemory","getMemory","_malloc","__heap_base","isInternalSym","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","updateTableMap","functionsInTableMap","freeTableIndexes","getEmptyTableSlot","grow","setWasmTableEntry","addFunction","updateGOT","resolveGlobalSymbol","stub","alignMemory","loadWebAssemblyModule","loadModule","firstLoad","memAlign","memoryBase","tableBase","tableGrowthNeeded","moduleExports","resolveSymbol","proxyHandler","postInstantiation","addEmAsm","arity","eval","reportUndefinedSymbols","__start_em_asm","__stop_em_asm","jsString","applyRelocs","loadDynamicLibrary","nodelete","refcount","findObject","preloadedWasm","preloadDylibs","___memory_base","___stack_pointer","___table_base","nowIsMonotonic","_emscripten_get_now","__emscripten_get_now_is_monotonic","_abort","_emscripten_date_now","_emscripten_memcpy_big","copyWithin","getHeapMax","emscripten_realloc_buffer","_emscripten_resize_heap","SYSCALLS","DEFAULT_POLLMASK","calculateAt","PATH","isAbs","FS","getStreamFromFD","ErrnoError","join2","doStat","getPath","dev","ino","nlink","gid","rdev","atime","doMsync","msync","varargs","getStr","getStream","_proc_exit","exitJS","_exit","_fd_close","convertI32PairToI53Checked","_fd_seek","llseek","getdents","doWritev","_fd_write","_tree_sitter_log_callback","currentLogCallback","_tree_sitter_parse_callback","currentParseCallback","stringToUTF16","allocateUTF8OnStack","stackAlloc","AsciiToString","__indirect_function_table","__memory_base","__stack_pointer","__table_base","_emscripten_get_now_is_monotonic","emscripten_get_now","emscripten_memcpy_big","emscripten_resize_heap","fd_close","fd_seek","fd_write","memory","tree_sitter_log_callback","tree_sitter_parse_callback","___wasm_call_ctors","___wasm_apply_data_relocs","malloc","_calloc","calloc","_realloc","realloc","_free","_ts_language_symbol_count","ts_language_symbol_count","_ts_language_version","ts_language_version","_ts_language_field_count","ts_language_field_count","_ts_language_symbol_name","ts_language_symbol_name","_ts_language_symbol_for_name","ts_language_symbol_for_name","_ts_language_symbol_type","ts_language_symbol_type","_ts_language_field_name_for_id","ts_language_field_name_for_id","_memset","memset","_memcpy","memcpy","_ts_parser_delete","ts_parser_delete","_ts_parser_reset","ts_parser_reset","_ts_parser_set_language","ts_parser_set_language","_ts_parser_timeout_micros","ts_parser_timeout_micros","_ts_parser_set_timeout_micros","ts_parser_set_timeout_micros","_memmove","memmove","_memcmp","memcmp","_ts_query_new","ts_query_new","_ts_query_delete","ts_query_delete","_iswspace","iswspace","_iswalnum","iswalnum","_ts_query_pattern_count","ts_query_pattern_count","_ts_query_capture_count","ts_query_capture_count","_ts_query_string_count","ts_query_string_count","_ts_query_capture_name_for_id","ts_query_capture_name_for_id","_ts_query_string_value_for_id","ts_query_string_value_for_id","_ts_query_predicates_for_pattern","ts_query_predicates_for_pattern","_ts_tree_copy","ts_tree_copy","_ts_tree_delete","ts_tree_delete","_ts_init","ts_init","_ts_parser_new_wasm","ts_parser_new_wasm","_ts_parser_enable_logger_wasm","ts_parser_enable_logger_wasm","_ts_parser_parse_wasm","ts_parser_parse_wasm","_ts_language_type_is_named_wasm","ts_language_type_is_named_wasm","_ts_language_type_is_visible_wasm","ts_language_type_is_visible_wasm","_ts_tree_root_node_wasm","ts_tree_root_node_wasm","_ts_tree_edit_wasm","ts_tree_edit_wasm","_ts_tree_get_changed_ranges_wasm","ts_tree_get_changed_ranges_wasm","_ts_tree_cursor_new_wasm","ts_tree_cursor_new_wasm","_ts_tree_cursor_delete_wasm","ts_tree_cursor_delete_wasm","_ts_tree_cursor_reset_wasm","ts_tree_cursor_reset_wasm","_ts_tree_cursor_goto_first_child_wasm","ts_tree_cursor_goto_first_child_wasm","_ts_tree_cursor_goto_next_sibling_wasm","ts_tree_cursor_goto_next_sibling_wasm","_ts_tree_cursor_goto_parent_wasm","ts_tree_cursor_goto_parent_wasm","_ts_tree_cursor_current_node_type_id_wasm","ts_tree_cursor_current_node_type_id_wasm","_ts_tree_cursor_current_node_is_named_wasm","ts_tree_cursor_current_node_is_named_wasm","_ts_tree_cursor_current_node_is_missing_wasm","ts_tree_cursor_current_node_is_missing_wasm","_ts_tree_cursor_current_node_id_wasm","ts_tree_cursor_current_node_id_wasm","_ts_tree_cursor_start_position_wasm","ts_tree_cursor_start_position_wasm","_ts_tree_cursor_end_position_wasm","ts_tree_cursor_end_position_wasm","_ts_tree_cursor_start_index_wasm","ts_tree_cursor_start_index_wasm","_ts_tree_cursor_end_index_wasm","ts_tree_cursor_end_index_wasm","_ts_tree_cursor_current_field_id_wasm","ts_tree_cursor_current_field_id_wasm","_ts_tree_cursor_current_node_wasm","ts_tree_cursor_current_node_wasm","_ts_node_symbol_wasm","ts_node_symbol_wasm","_ts_node_child_count_wasm","ts_node_child_count_wasm","_ts_node_named_child_count_wasm","ts_node_named_child_count_wasm","_ts_node_child_wasm","ts_node_child_wasm","_ts_node_named_child_wasm","ts_node_named_child_wasm","_ts_node_child_by_field_id_wasm","ts_node_child_by_field_id_wasm","_ts_node_next_sibling_wasm","ts_node_next_sibling_wasm","_ts_node_prev_sibling_wasm","ts_node_prev_sibling_wasm","_ts_node_next_named_sibling_wasm","ts_node_next_named_sibling_wasm","_ts_node_prev_named_sibling_wasm","ts_node_prev_named_sibling_wasm","_ts_node_parent_wasm","ts_node_parent_wasm","_ts_node_descendant_for_index_wasm","ts_node_descendant_for_index_wasm","_ts_node_named_descendant_for_index_wasm","ts_node_named_descendant_for_index_wasm","_ts_node_descendant_for_position_wasm","ts_node_descendant_for_position_wasm","_ts_node_named_descendant_for_position_wasm","ts_node_named_descendant_for_position_wasm","_ts_node_start_point_wasm","ts_node_start_point_wasm","_ts_node_end_point_wasm","ts_node_end_point_wasm","_ts_node_start_index_wasm","ts_node_start_index_wasm","_ts_node_end_index_wasm","ts_node_end_index_wasm","_ts_node_to_string_wasm","ts_node_to_string_wasm","_ts_node_children_wasm","ts_node_children_wasm","_ts_node_named_children_wasm","ts_node_named_children_wasm","_ts_node_descendants_of_type_wasm","ts_node_descendants_of_type_wasm","_ts_node_is_named_wasm","ts_node_is_named_wasm","_ts_node_has_changes_wasm","ts_node_has_changes_wasm","_ts_node_has_error_wasm","ts_node_has_error_wasm","_ts_node_is_missing_wasm","ts_node_is_missing_wasm","_ts_query_matches_wasm","ts_query_matches_wasm","_ts_query_captures_wasm","ts_query_captures_wasm","___cxa_atexit","__cxa_atexit","_iswdigit","iswdigit","_iswalpha","iswalpha","_iswlower","iswlower","_memchr","memchr","_strlen","strlen","_towupper","towupper","setThrew","__Znwm","_Znwm","__ZdlPv","_ZdlPv","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm","__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm","_ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc","__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev","_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev","__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw","_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw","__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw","_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw","dynCall_jiji","_orig$ts_parser_timeout_micros","orig$ts_parser_timeout_micros","_orig$ts_parser_set_timeout_micros","orig$ts_parser_set_timeout_micros","calledRun","callMain","dylibsLoaded","onRuntimeInitialized","shouldRunNow","preInit","noInitialRun","SIZE_OF_INT","SIZE_OF_NODE","SIZE_OF_POINT","SIZE_OF_RANGE","ZERO_POINT","QUERY_WORD_REGEX","PREDICATE_STEP_TYPE_CAPTURE","PREDICATE_STEP_TYPE_STRING","LANGUAGE_FUNCTION_REGEX","MIN_COMPATIBLE_VERSION","TRANSFER_BUFFER","ParserImpl","logCallback","includedRanges","marshalRange","Tree","setTimeoutMicros","getTimeoutMicros","assertInternal","textCallback","marshalEdit","unmarshalNode","walk","getChangedRanges","unmarshalRange","typeId","marshalNode","unmarshalPoint","isNamed","hasChanges","isMissing","childForFieldId","childCount","firstNamedChild","lastChild","lastNamedChild","_children","_namedChildren","descendantsOfType","nextNamedSibling","previousNamedSibling","namedDescendantForIndex","descendantForPosition","isPoint","marshalPoint","namedDescendantForPosition","TreeCursor","unmarshalTreeCursor","marshalTreeCursor","nodeType","nodeTypeId","nodeId","nodeIsNamed","nodeIsMissing","nodeText","currentNode","currentFieldId","currentFieldName","gotoFirstChild","gotoNextSibling","gotoParent","fieldIdForName","fieldNameForId","idForNodeType","nodeTypeCount","nodeTypeForId","nodeTypeIsNamed","nodeTypeIsVisible","SyntaxError","operands","Query","loadSideModule","captureNames","textPredicates","predicates","setProperties","assertedProperties","refutedProperties","exceededMatchLimit","matchLimit","unmarshalCaptures","predicatesForPattern","didExceedMatchLimit","oldEndPosition","newEndPosition","oldEndIndex","newEndIndex","__webpack_module_cache__","__webpack_exports__","oldArr","newArr","Diff","buildValues","newString","oldString","componentPos","componentLen","oldPos","component","oldValue","clonePath","newLen","oldLen","editLength","bestPath","execEditLength","diagonalPath","basePath","addPath","removePath","_oldPos","canAdd","canRemove","commonCount","oldStr","oldObj","newObj","_base","_line","_typeof","objectPrototypeToString","replacementStack","canonicalizedObj","sortedKeys","_this$options","_this$options$stringi","_params","retLines","linesAndNewlines","extendedWordChars","reWhitespace","_character","_word","_sentence","_css","_json","_array","_apply","_merge","_create","_dmp","_xml","uniDiff","processIndex","updatedContent","_distanceIterator","removeEOFNL","addEOFNL","delimiters","patchContent","minLine","hunkFits","toPos","maxLine","localOffset","diffOffset","_hunk","_toPos","previousOperation","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","oldRangeStart","newRangeStart","curRange","oldLine","_loop","_curRange","_curRange2","_curRange3","contextSize","oldEOFNewline","newEOFNewline","noNlBeforeAdds","loadPatch","fileNameChanged","selectField","mineIndex","theirsIndex","mineOffset","theirsOffset","mineCurrent","theirsCurrent","hunkBefore","cloneHunk","mergedHunk","mergeLines","_calcOldNewLineCount","calcOldNewLineCount","mineLines","theirOffset","theirLines","their","insertLeading","theirCurrent","_hunk$lines","collectChange","_hunk$lines2","removal","mutualChange","insertTrailing","myChanges","theirChanges","allRemoves","_hunk$lines3","_hunk$lines4","skipRemoveSuperset","_hunk$lines5","_hunk$lines6","matchChanges","matchIndex","contextChanges","conflicted","collectContext","removeChanges","changeContent","myCount","theirCount","diffstr","parseIndex","parseFileHeader","parseHunk","fileHeader","keyPrefix","chunkHeaderIndex","chunkHeader","addCount","removeCount","wantForward","backwardExhausted","forwardExhausted","defaultHash","memoize","Locked","lockedPorts","young","checkAvailablePort","getAvailablePort","hosts","getPorts","ports","interfaces","_interface","getLocalHosts","portCheckSequence","availablePort","portNumbers","cachedModule"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"agent.js","mappings":"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AAC,WAAY,YACvC,CAAC,UAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,UAAY,YACvC,CAAC,UAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,WACvC,CAAC,WAAY,WAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,WACvC,CAAC,UAAY,YAAa,CAAC,UAAY,YACvC,CAAC,UAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,WACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,UAAY,YAAa,CAAC,UAAY,WACvC,CAAC,UAAY,YAAa,CAAC,UAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,WACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,WACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,UAAY,WACvC,CAAC,UAAY,YAAa,CAAC,UAAY,YACvC,CAAC,UAAY,YAAa,CAAC,UAAY,YACvC,CAAC,UAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,WACvC,CAAC,WAAY,WAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,WACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,UAAY,YAAa,CAAC,UAAY,YACvC,CAAC,UAAY,YAAa,CAAC,UAAY,WACvC,CAAC,UAAY,WAAa,CAAC,UAAY,YACvC,CAAC,WAAY,WAAa,CAAC,WAAY,YACvC,CAAC,WAAY,YAAa,CAAC,WAAY,YACvC,CAAC,WAAY,WAAa,CAAC,WAAY,cAIzCitJ,EAAU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/zG,WAAY,CAAC,OAAQ,OAAQ,OAAQ,iBAAkB,SAAU,OAAQ,cAAe,QACxFizG,UAAW,CAAC,cAAe,UAAW,YAAa,iBAAkB,aAEzEe,MAAO,CACHh0G,WAAY,CACR,iBACA,kBACA,SACA,iBACA,oBACA,uBACA,kBACA,iBACA,gBACA,oBACA,mBACA,oBACA,iBACA,qBACA,mBACA,oBAEJizG,UAAW,CACP,WACA,qBACA,iBACA,UACA,YACA,YACA,qBACA,oBACA,gBACA,8BACA,cACA,gBACA,gBACA,gBAGRzyB,KAAM,CACFxgF,WAAY,CAAC,OAAQ,QAAS,SAElCu8F,WAAY,CACRv8F,WAAY,CACR,OACA,SACA,OACA,MACA,OACA,QACA,MACA,QACA,cACA,MACA,OACA,SACA,QACA,SACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,YAEJizG,UAAW,CAAC,aAEhBgB,MAAO,CACHj0G,WAAY,CAAC,QAEjB08F,OAAQ,CACJ18F,WAAY,CACR,SACA,OACA,SACA,QACA,OACA,QACA,OACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,QAEJizG,UAAW,CAAC,WAAY,WAAY,OAAQ,aAAc,aAAc,YAAa,YAEzFiB,OAAQ,CACJl0G,WAAY,CAAC,MAAO,OAAQ,SAEhCm0G,KAAM,CACFn0G,WAAY,CAAC,UAEjBo0G,IAAK,CACDp0G,WAAY,CAAC,QAAS,OAAQ,QAAS,OAAQ,MAAO,UAAW,QAAS,YAAa,SACvFizG,UAAW,CAAC,gBAEhBoB,SAAU,CACNr0G,WAAY,CAAC,KAAM,OAAQ,QAAS,YAAa,MAAO,WACxDizG,UAAW,CACP,cACA,cACA,SACA,WACA,cACA,gBACA,gBACA,cACA,eACA,eACA,WACA,eACA,WAGRjW,SAAU,CACNh9F,WAAY,CACR,UACA,YACA,MACA,SACA,QACA,OACA,OACA,QACA,UACA,QACA,OACA,aAEJizG,UAAW,CAAC,gBAEhB,cAAe,CACXjzG,WAAY,CAAC,KAAM,OAEvB,gBAAiB,CACbA,WAAY,CAAC,QAEjBygF,IAAK,CACDzgF,WAAY,CAAC,MAAO,OAAQ,QAAS,OAAQ,OAAQ,QAAS,QAAS,QAAS,QAAS,SACzFizG,UAAW,CAAC,OAAQ,UAAW,eAAgB,cAEnDqB,KAAM,CACFt0G,WAAY,CAAC,MAAO,OAAQ,QAAS,QAAS,MAAO,MAAO,OAAQ,MAAO,QAAS,MACpFizG,UAAW,CAAC,aAAc,cAAe,UAAW,MAAO,WAAY,cAE3EsB,WAAY,CACRv0G,WAAY,CAAC,OAAQ,QAAS,UAElCw0G,IAAK,CACDx0G,WAAY,CAAC,QAAS,SAE1B/yN,EAAG,CACC+yN,WAAY,CAAC,KAAM,MAAO,QAC1BizG,UAAW,CAAC,YAAa,cAE7B9V,KAAM,CACFn9F,WAAY,CACR,WACA,OACA,QACA,WACA,OACA,YACA,SACA,cACA,WACA,SACA,QACA,QACA,MACA,OACA,UACA,OACA,OACA,MACA,QACA,QACA,QACA,WAEJizG,UAAW,CACP,SACA,SACA,aACA,aACA,YACA,WACA,YACA,UACA,aACA,cACA,WACA,UACA,YACA,UACA,YACA,UACA,aACA,WACA,WACA,YACA,WACA,cACA,cAGR/V,KAAM,CACFl9F,WAAY,CAAC,MAAO,WAExB+8F,KAAM,CACF/8F,WAAY,CAAC,UAEjB1jE,IAAK,CACD0jE,WAAY,CAAC,OAAQ,OAAQ,OAAQ,SAAU,OAAQ,OAAQ,OAAQ,OAAQ,SAEnFy0G,KAAM,CACFz0G,WAAY,CAAC,UAEjB00G,MAAO,CACH10G,WAAY,CAAC,QAAS,OAAQ,MAAO,WAEzC20G,YAAa,CACT30G,WAAY,CACR,QACA,QACA,OACA,WACA,QACA,OACA,MACA,SACA,QACA,QACA,OACA,cAEJizG,UAAW,CACP,gBACA,kBACA,gBACA,eACA,gBACA,UACA,SACA,YACA,SACA,SACA,WACA,UACA,WACA,YACA,UACA,SACA,MACA,WACA,eACA,cACA,eACA,SACA,QACA,UACA,QACA,QACA,MACA,UACA,SACA,UACA,WACA,SACA,UAGR2B,KAAM,CACF50G,WAAY,CAAC,UAEjB60G,SAAU,CACN70G,WAAY,CAAC,SAEjB80G,OAAQ,CACJ90G,WAAY,CAAC,UAEjB+0G,OAAQ,CACJ/0G,WAAY,CAAC,YAEjBg1G,MAAO,CACHh1G,WAAY,CAAC,WAEjBy8F,gBAAiB,CACbz8F,WAAY,CAAC,SAEjBi1G,MAAO,CACHj1G,WAAY,CACR,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,OACA,OACA,SAGRw8F,WAAY,CACRx8F,WAAY,CAAC,OAAQ,OAAQ,QAEjCk1G,QAAS,CACLl1G,WAAY,CAAC,KAAM,SAEvBm1G,GAAI,CACAn1G,WAAY,CAAC,MAAO,UAAW,OAAQ,OAAQ,OAAQ,OAAQ,SAEnE28F,IAAK,CACD38F,WAAY,CAAC,QAAS,SAE1Bo1G,IAAK,CACDp1G,WAAY,CACR,QACA,QACA,OACA,SACA,QACA,UACA,UACA,SACA,UACA,YACA,SACA,SACA,OACA,UACA,MACA,WACA,QACA,WACA,WACA,cACA,eACA,WACA,UACA,QACA,SACA,OACA,OACA,SACA,OACA,OACA,OACA,OACA,SACA,UACA,OACA,UACA,YACA,QACA,MACA,OACA,QACA,UACA,OACA,UACA,SACA,UACA,OACA,OACA,WACA,SACA,cACA,QACA,SACA,UACA,QACA,MACA,SACA,OACA,OACA,QACA,OACA,OACA,SACA,UACA,UACA,QACA,cACA,mBACA,OACA,WACA,OACA,MACA,QACA,MACA,UACA,WACA,gBACA,cACA,cACA,QACA,WACA,YACA,QACA,OACA,OACA,OACA,OACA,OACA,SACA,QACA,OACA,OACA,SACA,OACA,OACA,YACA,OACA,SACA,OACA,SACA,OACA,SAEJizG,UAAW,CACP,aACA,YACA,WACA,aACA,eACA,oBACA,mBACA,qBACA,aACA,oBAGRoC,IAAK,CACDr1G,WAAY,CAAC,OAAQ,UAEzBs1G,KAAM,CACFt1G,WAAY,CACR,OACA,QACA,QACA,kBACA,UACA,QACA,mBACA,YACA,OACA,cAEJizG,UAAW,CAAC,gBAAiB,cAAe,SAAU,eAAgB,aAAc,cAExFrW,gBAAiB,CACb58F,WAAY,CAAC,oLCllBrB,iBAGA,WACA,WAC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","sources":[".././node_modules/lru-cache/index.js",".././node_modules/semver/classes/comparator.js",".././node_modules/semver/classes/range.js",".././node_modules/semver/classes/semver.js",".././node_modules/semver/functions/clean.js",".././node_modules/semver/functions/cmp.js",".././node_modules/semver/functions/coerce.js",".././node_modules/semver/functions/compare-build.js",".././node_modules/semver/functions/compare-loose.js",".././node_modules/semver/functions/compare.js",".././node_modules/semver/functions/diff.js",".././node_modules/semver/functions/eq.js",".././node_modules/semver/functions/gt.js",".././node_modules/semver/functions/gte.js",".././node_modules/semver/functions/inc.js",".././node_modules/semver/functions/lt.js",".././node_modules/semver/functions/lte.js",".././node_modules/semver/functions/major.js",".././node_modules/semver/functions/minor.js",".././node_modules/semver/functions/neq.js",".././node_modules/semver/functions/parse.js",".././node_modules/semver/functions/patch.js",".././node_modules/semver/functions/prerelease.js",".././node_modules/semver/functions/rcompare.js",".././node_modules/semver/functions/rsort.js",".././node_modules/semver/functions/satisfies.js",".././node_modules/semver/functions/sort.js",".././node_modules/semver/functions/valid.js",".././node_modules/semver/index.js",".././node_modules/semver/internal/constants.js",".././node_modules/semver/internal/debug.js",".././node_modules/semver/internal/identifiers.js",".././node_modules/semver/internal/parse-options.js",".././node_modules/semver/internal/re.js",".././node_modules/semver/ranges/gtr.js",".././node_modules/semver/ranges/intersects.js",".././node_modules/semver/ranges/ltr.js",".././node_modules/semver/ranges/max-satisfying.js",".././node_modules/semver/ranges/min-satisfying.js",".././node_modules/semver/ranges/min-version.js",".././node_modules/semver/ranges/outside.js",".././node_modules/semver/ranges/simplify.js",".././node_modules/semver/ranges/subset.js",".././node_modules/semver/ranges/to-comparators.js",".././node_modules/semver/ranges/valid.js",".././node_modules/vscode-jsonrpc/lib/common/api.js",".././node_modules/vscode-jsonrpc/lib/common/cancellation.js",".././node_modules/vscode-jsonrpc/lib/common/connection.js",".././node_modules/vscode-jsonrpc/lib/common/disposable.js",".././node_modules/vscode-jsonrpc/lib/common/events.js",".././node_modules/vscode-jsonrpc/lib/common/is.js",".././node_modules/vscode-jsonrpc/lib/common/linkedMap.js",".././node_modules/vscode-jsonrpc/lib/common/messageBuffer.js",".././node_modules/vscode-jsonrpc/lib/common/messageReader.js",".././node_modules/vscode-jsonrpc/lib/common/messageWriter.js",".././node_modules/vscode-jsonrpc/lib/common/messages.js",".././node_modules/vscode-jsonrpc/lib/common/ral.js",".././node_modules/vscode-jsonrpc/lib/common/semaphore.js",".././node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js",".././node_modules/vscode-jsonrpc/lib/node/main.js",".././node_modules/vscode-jsonrpc/lib/node/ril.js",".././node_modules/vscode-jsonrpc/node.js",".././node_modules/vscode-languageserver-protocol/lib/common/api.js",".././node_modules/vscode-languageserver-protocol/lib/common/connection.js",".././node_modules/vscode-languageserver-protocol/lib/common/messages.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js",".././node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js",".././node_modules/vscode-languageserver-protocol/lib/common/utils/is.js",".././node_modules/vscode-languageserver-protocol/lib/node/main.js",".././node_modules/vscode-languageserver-protocol/node.js",".././node_modules/vscode-languageserver-textdocument/lib/esm/main.js",".././node_modules/vscode-languageserver-types/lib/esm/main.js",".././node_modules/vscode-languageserver/lib/common/api.js",".././node_modules/vscode-languageserver/lib/common/callHierarchy.js",".././node_modules/vscode-languageserver/lib/common/configuration.js",".././node_modules/vscode-languageserver/lib/common/diagnostic.js",".././node_modules/vscode-languageserver/lib/common/fileOperations.js",".././node_modules/vscode-languageserver/lib/common/inlayHint.js",".././node_modules/vscode-languageserver/lib/common/inlineValue.js",".././node_modules/vscode-languageserver/lib/common/linkedEditingRange.js",".././node_modules/vscode-languageserver/lib/common/moniker.js",".././node_modules/vscode-languageserver/lib/common/notebook.js",".././node_modules/vscode-languageserver/lib/common/progress.js",".././node_modules/vscode-languageserver/lib/common/semanticTokens.js",".././node_modules/vscode-languageserver/lib/common/server.js",".././node_modules/vscode-languageserver/lib/common/showDocument.js",".././node_modules/vscode-languageserver/lib/common/textDocuments.js",".././node_modules/vscode-languageserver/lib/common/typeHierarchy.js",".././node_modules/vscode-languageserver/lib/common/utils/is.js",".././node_modules/vscode-languageserver/lib/common/utils/uuid.js",".././node_modules/vscode-languageserver/lib/common/workspaceFolder.js",".././node_modules/vscode-languageserver/lib/node/files.js",".././node_modules/vscode-languageserver/lib/node/main.js",".././node_modules/vscode-languageserver/node.js",".././node_modules/yallist/iterator.js",".././node_modules/yallist/yallist.js","../../lib/node_modules/vscode-languageserver-textdocument/lib/esm/main.js","../../node_modules/@adobe/helix-fetch/node_modules/lru-cache/index.js","../../node_modules/@adobe/helix-fetch/src/common/formData.js","../../node_modules/@adobe/helix-fetch/src/common/utils.js","../../node_modules/@adobe/helix-fetch/src/core/errors.js","../../node_modules/@adobe/helix-fetch/src/core/h1.js","../../node_modules/@adobe/helix-fetch/src/core/h2.js","../../node_modules/@adobe/helix-fetch/src/core/index.js","../../node_modules/@adobe/helix-fetch/src/core/lock.js","../../node_modules/@adobe/helix-fetch/src/core/request.js","../../node_modules/@adobe/helix-fetch/src/fetch/abort.js","../../node_modules/@adobe/helix-fetch/src/fetch/body.js","../../node_modules/@adobe/helix-fetch/src/fetch/cacheableResponse.js","../../node_modules/@adobe/helix-fetch/src/fetch/errors.js","../../node_modules/@adobe/helix-fetch/src/fetch/headers.js","../../node_modules/@adobe/helix-fetch/src/fetch/index.js","../../node_modules/@adobe/helix-fetch/src/fetch/policy.js","../../node_modules/@adobe/helix-fetch/src/fetch/request.js","../../node_modules/@adobe/helix-fetch/src/fetch/response.js","../../node_modules/@adobe/helix-fetch/src/index.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/pipeline.js","../../node_modules/@azure/logger/dist-esm/src/debug.js","../../node_modules/@azure/logger/dist-esm/src/log.js","../../node_modules/@azure/logger/dist-esm/src/index.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/log.js","../../node_modules/@azure/core-util/dist-esm/src/object.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/util/sanitizer.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/logPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/redirectPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/constants.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/util/userAgent.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/util/userAgentPlatform.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/userAgentPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/decompressResponsePolicy.js","../../node_modules/@azure/abort-controller/dist-esm/src/AbortSignal.js","../../node_modules/@azure/abort-controller/dist-esm/src/AbortController.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/util/helpers.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/retryStrategies/throttlingRetryStrategy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/retryStrategies/exponentialRetryStrategy.js","../../node_modules/@azure/core-util/dist-esm/src/random.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/retryPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/defaultRetryPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/formDataPolicy.js","../../node_modules/@azure/core-util/dist-esm/src/isNode.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/proxyPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/setClientRequestIdPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/tlsPolicy.js","../../node_modules/@azure/core-tracing/dist-esm/src/tracingContext.js","../../node_modules/@azure/core-tracing/dist-esm/src/instrumenter.js","../../node_modules/@azure/core-util/dist-esm/src/error.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/util/inspect.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/restError.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/tracingPolicy.js","../../node_modules/@azure/core-tracing/dist-esm/src/tracingClient.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/createPipelineFromOptions.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/httpHeaders.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/nodeHttpClient.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/defaultHttpClient.js","../../node_modules/@azure/core-rest-pipeline/node_modules/uuid/dist/esm-node/rng.js","../../node_modules/@azure/core-rest-pipeline/node_modules/uuid/dist/esm-node/regex.js","../../node_modules/@azure/core-rest-pipeline/node_modules/uuid/dist/esm-node/stringify.js","../../node_modules/@azure/core-rest-pipeline/node_modules/uuid/dist/esm-node/validate.js","../../node_modules/@azure/core-rest-pipeline/node_modules/uuid/dist/esm-node/v4.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/pipelineRequest.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/util/uuid.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/exponentialRetryPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/systemErrorRetryPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/throttlingRetryPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/util/tokenCycler.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/bearerTokenAuthenticationPolicy.js","../../node_modules/@azure/core-rest-pipeline/dist-esm/src/policies/ndJsonPolicy.js","../../node_modules/@azure/core-rest-pipeline/node_modules/@tootallnate/once/dist/index.js","../../node_modules/@azure/core-rest-pipeline/node_modules/http-proxy-agent/dist/agent.js","../../node_modules/@azure/core-rest-pipeline/node_modules/http-proxy-agent/dist/index.js","../../node_modules/@microsoft/applicationinsights-web-snippet/dist/esm/applicationinsights-web-snippet.js","../../node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js","../../node_modules/@opentelemetry/api/build/esm/api/context.js","../../node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js","../../node_modules/@opentelemetry/api/build/esm/api/diag.js","../../node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js","../../node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js","../../node_modules/@opentelemetry/api/build/esm/baggage/internal/symbol.js","../../node_modules/@opentelemetry/api/build/esm/baggage/utils.js","../../node_modules/@opentelemetry/api/build/esm/context-api.js","../../node_modules/@opentelemetry/api/build/esm/context/context.js","../../node_modules/@opentelemetry/api/build/esm/diag-api.js","../../node_modules/@opentelemetry/api/build/esm/diag/types.js","../../node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js","../../node_modules/@opentelemetry/api/build/esm/metrics/Metric.js","../../node_modules/@opentelemetry/api/build/esm/diag/consoleLogger.js","../../node_modules/@opentelemetry/api/build/esm/trace/internal/tracestate-validators.js","../../node_modules/@opentelemetry/api/build/esm/trace/internal/tracestate-impl.js","../../node_modules/@opentelemetry/api/build/esm/trace/internal/utils.js","../../node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js","../../node_modules/@opentelemetry/api/build/esm/api/metrics.js","../../node_modules/@opentelemetry/api/build/esm/metrics-api.js","../../node_modules/@opentelemetry/api/build/esm/index.js","../../node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js","../../node_modules/@opentelemetry/api/build/esm/version.js","../../node_modules/@opentelemetry/api/build/esm/internal/semver.js","../../node_modules/@opentelemetry/api/build/esm/internal/global-utils.js","../../node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js","../../node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js","../../node_modules/@opentelemetry/api/build/esm/api/propagation.js","../../node_modules/@opentelemetry/api/build/esm/propagation-api.js","../../node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js","../../node_modules/@opentelemetry/api/build/esm/api/trace.js","../../node_modules/@opentelemetry/api/build/esm/trace-api.js","../../node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js","../../node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js","../../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js","../../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js","../../node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js","../../node_modules/@opentelemetry/api/build/esm/trace/SamplingResult.js","../../node_modules/@opentelemetry/api/build/esm/trace/context-utils.js","../../node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js","../../node_modules/@opentelemetry/api/build/esm/trace/span_kind.js","../../node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js","../../node_modules/@opentelemetry/api/build/esm/trace/status.js","../../node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js","../../node_modules/@opentelemetry/core/build/esm/ExportResult.js","../../node_modules/@opentelemetry/core/build/esm/baggage/constants.js","../../node_modules/@opentelemetry/core/build/esm/baggage/propagation/W3CBaggagePropagator.js","../../node_modules/@opentelemetry/core/build/esm/baggage/utils.js","../../node_modules/@opentelemetry/core/build/esm/common/attributes.js","../../node_modules/@opentelemetry/core/build/esm/common/global-error-handler.js","../../node_modules/@opentelemetry/core/build/esm/common/logging-error-handler.js","../../node_modules/@opentelemetry/core/build/esm/common/time.js","../../node_modules/@opentelemetry/core/build/esm/common/anchored-clock.js","../../node_modules/@opentelemetry/core/build/esm/platform/node/globalThis.js","../../node_modules/@opentelemetry/core/build/esm/platform/node/hex-to-base64.js","../../node_modules/@opentelemetry/core/build/esm/platform/node/RandomIdGenerator.js","../../node_modules/@opentelemetry/core/build/esm/trace/rpc-metadata.js","../../node_modules/@opentelemetry/core/build/esm/utils/timeout.js","../../node_modules/@opentelemetry/core/build/esm/trace/sampler/AlwaysOffSampler.js","../../node_modules/@opentelemetry/core/build/esm/trace/sampler/AlwaysOnSampler.js","../../node_modules/@opentelemetry/core/build/esm/trace/sampler/ParentBasedSampler.js","../../node_modules/@opentelemetry/core/build/esm/trace/sampler/TraceIdRatioBasedSampler.js","../../node_modules/@opentelemetry/core/build/esm/utils/url.js","../../node_modules/@opentelemetry/core/build/esm/utils/wrap.js","../../node_modules/@opentelemetry/core/build/esm/index.js","../../node_modules/@opentelemetry/core/build/esm/internal/exporter.js","../../node_modules/@opentelemetry/core/build/esm/platform/node/environment.js","../../node_modules/@opentelemetry/core/build/esm/platform/node/performance.js","../external node-commonjs \"perf_hooks\"","../../node_modules/@opentelemetry/core/build/esm/platform/node/sdk-info.js","../../node_modules/@opentelemetry/core/build/esm/platform/node/timer-util.js","../../node_modules/@opentelemetry/core/build/esm/propagation/composite.js","../../node_modules/@opentelemetry/core/build/esm/internal/validators.js","../../node_modules/@opentelemetry/core/build/esm/trace/TraceState.js","../../node_modules/@opentelemetry/core/build/esm/trace/W3CTraceContextPropagator.js","../../node_modules/@opentelemetry/core/build/esm/trace/suppress-tracing.js","../../node_modules/@opentelemetry/core/build/esm/utils/promise.js","../../node_modules/@opentelemetry/core/build/esm/utils/callback.js","../../node_modules/@opentelemetry/core/build/esm/platform/browser/globalThis.js","../../node_modules/@opentelemetry/core/build/esm/utils/environment.js","../../node_modules/@opentelemetry/core/build/esm/utils/lodash.merge.js","../../node_modules/@opentelemetry/core/build/esm/utils/merge.js","../../node_modules/@opentelemetry/core/build/esm/utils/sampling.js","../../node_modules/@opentelemetry/core/build/esm/version.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/Sampler.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/Span.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/enums.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/AlwaysOffSampler.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/AlwaysOnSampler.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/ParentBasedSampler.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/sampler/TraceIdRatioBasedSampler.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/config.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/node/RandomIdGenerator.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/Tracer.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/node/export/BatchSpanProcessor.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/BasicTracerProvider.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/utility.js","../../node_modules/@opentelemetry/resources/build/esm/Resource.js","../../node_modules/@opentelemetry/resources/build/esm/platform/node/default-service-name.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/MultiSpanProcessor.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/export/NoopSpanProcessor.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/export/BatchSpanProcessorBase.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/export/ConsoleSpanExporter.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/export/InMemorySpanExporter.js","../../node_modules/@opentelemetry/sdk-trace-base/build/esm/export/SimpleSpanProcessor.js","../../node_modules/@opentelemetry/semantic-conventions/build/esm/resource/SemanticResourceAttributes.js","../../node_modules/@opentelemetry/semantic-conventions/build/esm/trace/SemanticAttributes.js","../../node_modules/@roamhq/mac-ca/index.js","../../node_modules/@roamhq/mac-ca/lib/formatter.js","../../node_modules/@sinclair/typebox/compiler/compiler.js","../../node_modules/@sinclair/typebox/compiler/index.js","../../node_modules/@sinclair/typebox/errors/errors.js","../../node_modules/@sinclair/typebox/errors/index.js","../../node_modules/@sinclair/typebox/system/index.js","../../node_modules/@sinclair/typebox/system/system.js","../../node_modules/@sinclair/typebox/typebox.js","../../node_modules/@sinclair/typebox/value/guard.js","../../node_modules/@sinclair/typebox/value/hash.js","../../node_modules/agent-base/dist/src/index.js","../../node_modules/agent-base/dist/src/promisify.js","../../node_modules/applicationinsights/out/AutoCollection/AsyncHooksScopeManager.js","../../node_modules/applicationinsights/out/AutoCollection/AzureFunctionsHook.js","../../node_modules/applicationinsights/out/AutoCollection/Console.js","../../node_modules/applicationinsights/out/AutoCollection/CorrelationContextManager.js","../../node_modules/applicationinsights/out/AutoCollection/Exceptions.js","../../node_modules/applicationinsights/out/AutoCollection/HeartBeat.js","../../node_modules/applicationinsights/out/AutoCollection/HttpDependencies.js","../../node_modules/applicationinsights/out/AutoCollection/HttpDependencyParser.js","../../node_modules/applicationinsights/out/AutoCollection/HttpRequestParser.js","../../node_modules/applicationinsights/out/AutoCollection/HttpRequests.js","../../node_modules/applicationinsights/out/AutoCollection/NativePerformance.js","../../node_modules/applicationinsights/out/AutoCollection/NetworkStatsbeat.js","../../node_modules/applicationinsights/out/AutoCollection/Performance.js","../../node_modules/applicationinsights/out/AutoCollection/PreAggregatedMetrics.js","../../node_modules/applicationinsights/out/AutoCollection/RequestParser.js","../../node_modules/applicationinsights/out/AutoCollection/Statsbeat.js","../../node_modules/applicationinsights/out/AutoCollection/WebSnippet.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/Azure/EventHub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/SpanParser.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/azure-coretracing.sub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/bunyan.sub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/console.sub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/initialization.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/mongodb.sub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/mysql.sub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/postgres.sub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/redis.sub.js","../../node_modules/applicationinsights/out/AutoCollection/diagnostic-channel/winston.sub.js","../../node_modules/applicationinsights/out/Declarations/Constants.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Constants.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/AvailabilityData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/Base.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/ContextTagKeys.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/Data.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/DataPoint.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/DataPointType.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/Domain.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/Envelope.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/EventData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/ExceptionData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/ExceptionDetails.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/MessageData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/MetricData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/PageViewData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/RemoteDependencyData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/RequestData.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/SeverityLevel.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/StackFrame.js","../../node_modules/applicationinsights/out/Declarations/Contracts/Generated/index.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/DependencyDocumentQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/DocumentQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/EnvelopeQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/EventDocumentQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/ExceptionDocumentQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/MessageDocumentQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/MetricQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/RequestDocumentQuickPulse.js","../../node_modules/applicationinsights/out/Declarations/Contracts/QuickPulseTypes/index.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/AvailabilityTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/DependencyTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/EnvelopeTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/EventTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/ExceptionTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/MetricTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/NodeHttpDependencyTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/NodeHttpRequestTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/PageViewTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/RequestTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/Telemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/TelemetryType.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/TraceTelemetry.js","../../node_modules/applicationinsights/out/Declarations/Contracts/TelemetryTypes/index.js","../../node_modules/applicationinsights/out/Declarations/Contracts/index.js","../../node_modules/applicationinsights/out/Declarations/Metrics/AggregatedMetricCounters.js","../../node_modules/applicationinsights/out/Declarations/Metrics/AggregatedMetricDimensions.js","../../node_modules/applicationinsights/out/Library/AuthorizationHandler.js","../../node_modules/applicationinsights/out/Library/AzureVirtualMachine.js","../../node_modules/applicationinsights/out/Library/Channel.js","../../node_modules/applicationinsights/out/Library/Config.js","../../node_modules/applicationinsights/out/Library/ConnectionStringParser.js","../../node_modules/applicationinsights/out/Library/Context.js","../../node_modules/applicationinsights/out/Library/CorrelationIdManager.js","../../node_modules/applicationinsights/out/Library/EnvelopeFactory.js","../../node_modules/applicationinsights/out/Library/FileAccessControl.js","../../node_modules/applicationinsights/out/Library/FileSystemHelper.js","../../node_modules/applicationinsights/out/Library/Functions.js","../../node_modules/applicationinsights/out/Library/InternalAzureLogger.js","../../node_modules/applicationinsights/out/Library/JsonConfig.js","../../node_modules/applicationinsights/out/Library/Logging.js","../../node_modules/applicationinsights/out/Library/NodeClient.js","../../node_modules/applicationinsights/out/Library/PrefixHelper.js","../../node_modules/applicationinsights/out/Library/QuickPulseEnvelopeFactory.js","../../node_modules/applicationinsights/out/Library/QuickPulseSender.js","../../node_modules/applicationinsights/out/Library/QuickPulseStateManager.js","../../node_modules/applicationinsights/out/Library/QuickPulseUtil.js","../../node_modules/applicationinsights/out/Library/RequestResponseHeaders.js","../../node_modules/applicationinsights/out/Library/Sender.js","../../node_modules/applicationinsights/out/Library/SnippetInjectionHelper.js","../../node_modules/applicationinsights/out/Library/TelemetryClient.js","../../node_modules/applicationinsights/out/Library/Traceparent.js","../../node_modules/applicationinsights/out/Library/Tracestate.js","../../node_modules/applicationinsights/out/Library/Util.js","../../node_modules/applicationinsights/out/TelemetryProcessors/AzureRoleEnvironmentTelemetryInitializer.js","../../node_modules/applicationinsights/out/TelemetryProcessors/PerformanceMetricsTelemetryProcessor.js","../../node_modules/applicationinsights/out/TelemetryProcessors/PreAggregatedMetricsTelemetryProcessor.js","../../node_modules/applicationinsights/out/TelemetryProcessors/SamplingTelemetryProcessor.js","../../node_modules/applicationinsights/out/TelemetryProcessors/index.js","../../node_modules/applicationinsights/out/applicationinsights.js","../../node_modules/async-hook-jl/async-hook.js","../../node_modules/async-hook-jl/index.js","../../node_modules/async-hook-jl/patches/next-tick.js","../../node_modules/async-hook-jl/patches/promise.js","../../node_modules/async-hook-jl/patches/timers.js","../../node_modules/async-listener/es6-wrapped-promise.js","../../node_modules/async-listener/glue.js","../../node_modules/async-listener/index.js","../../node_modules/async-listener/node_modules/semver/semver.js","../../node_modules/asynckit/index.js","../../node_modules/asynckit/lib/abort.js","../../node_modules/asynckit/lib/async.js","../../node_modules/asynckit/lib/defer.js","../../node_modules/asynckit/lib/iterate.js","../../node_modules/asynckit/lib/state.js","../../node_modules/asynckit/lib/terminator.js","../../node_modules/asynckit/parallel.js","../../node_modules/asynckit/serial.js","../../node_modules/asynckit/serialOrdered.js","../../node_modules/bindings/bindings.js","../../node_modules/cls-hooked/context-legacy.js","../../node_modules/cls-hooked/context.js","../../node_modules/cls-hooked/index.js","../../node_modules/cls-hooked/node_modules/semver/semver.js","../../node_modules/combined-stream/lib/combined_stream.js","../../node_modules/continuation-local-storage/context.js","../../node_modules/crypto-js/aes.js","../../node_modules/crypto-js/cipher-core.js","../../node_modules/crypto-js/core.js","../../node_modules/crypto-js/enc-base64.js","../../node_modules/crypto-js/enc-base64url.js","../../node_modules/crypto-js/enc-utf16.js","../../node_modules/crypto-js/evpkdf.js","../../node_modules/crypto-js/format-hex.js","../../node_modules/crypto-js/hmac.js","../../node_modules/crypto-js/index.js","../../node_modules/crypto-js/lib-typedarrays.js","../../node_modules/crypto-js/md5.js","../../node_modules/crypto-js/mode-cfb.js","../../node_modules/crypto-js/mode-ctr-gladman.js","../../node_modules/crypto-js/mode-ctr.js","../../node_modules/crypto-js/mode-ecb.js","../../node_modules/crypto-js/mode-ofb.js","../../node_modules/crypto-js/pad-ansix923.js","../../node_modules/crypto-js/pad-iso10126.js","../../node_modules/crypto-js/pad-iso97971.js","../../node_modules/crypto-js/pad-nopadding.js","../../node_modules/crypto-js/pad-zeropadding.js","../../node_modules/crypto-js/pbkdf2.js","../../node_modules/crypto-js/rabbit-legacy.js","../../node_modules/crypto-js/rabbit.js","../../node_modules/crypto-js/rc4.js","../../node_modules/crypto-js/ripemd160.js","../../node_modules/crypto-js/sha1.js","../../node_modules/crypto-js/sha224.js","../../node_modules/crypto-js/sha256.js","../../node_modules/crypto-js/sha3.js","../../node_modules/crypto-js/sha384.js","../../node_modules/crypto-js/sha512.js","../../node_modules/crypto-js/tripledes.js","../../node_modules/crypto-js/x64-core.js","../../node_modules/debug/src/browser.js","../../node_modules/debug/src/common.js","../../node_modules/debug/src/index.js","../../node_modules/debug/src/node.js","../../node_modules/define-lazy-prop/index.js","../../node_modules/delayed-stream/lib/delayed_stream.js","../../node_modules/diagnostic-channel-publishers/dist/src/azure-coretracing.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/bunyan.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/console.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/index.js","../../node_modules/diagnostic-channel-publishers/dist/src/mongodb-core.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/mongodb.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/mysql.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/pg-pool.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/pg.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/redis.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/tedious.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/winston.pub.js","../../node_modules/diagnostic-channel-publishers/dist/src/ sync ^.*\\/lib\\/Connection$","../../node_modules/diagnostic-channel-publishers/dist/src/ sync ^.*\\/lib\\/Pool$","../../node_modules/diagnostic-channel/dist/src/channel.js","../../node_modules/diagnostic-channel/dist/src/patchRequire.js","../../node_modules/diagnostic-channel/node_modules/semver/semver.js","../../node_modules/diff/lib/convert/dmp.js","../../node_modules/diff/lib/convert/xml.js","../../node_modules/diff/lib/diff/array.js","../../node_modules/diff/lib/diff/base.js","../../node_modules/diff/lib/diff/character.js","../../node_modules/diff/lib/diff/css.js","../../node_modules/diff/lib/diff/json.js","../../node_modules/diff/lib/diff/line.js","../../node_modules/diff/lib/diff/sentence.js","../../node_modules/diff/lib/diff/word.js","../../node_modules/diff/lib/index.js","../../node_modules/diff/lib/patch/apply.js","../../node_modules/diff/lib/patch/create.js","../../node_modules/diff/lib/patch/merge.js","../../node_modules/diff/lib/patch/parse.js","../../node_modules/diff/lib/util/array.js","../../node_modules/diff/lib/util/distance-iterator.js","../../node_modules/diff/lib/util/params.js","../../node_modules/emitter-listener/listener.js","../../node_modules/fast-deep-equal/index.js","../../node_modules/file-uri-to-path/index.js","../../node_modules/form-data/lib/form_data.js","../../node_modules/form-data/lib/populate.js","../../node_modules/git-up/lib/index.js","../../node_modules/git-url-parse/lib/index.js","../../node_modules/has-flag/index.js","../../node_modules/http-cache-semantics/index.js","../../node_modules/https-proxy-agent/dist/agent.js","../../node_modules/https-proxy-agent/dist/index.js","../../node_modules/https-proxy-agent/dist/parse-proxy-response.js","../../node_modules/ignore/index.js","../../node_modules/is-docker/index.js","../../node_modules/is-ssh/lib/index.js","../../node_modules/is-wsl/index.js","../../node_modules/kerberos/lib/auth_processes/mongodb.js","../../node_modules/kerberos/lib/index.js","../../node_modules/kerberos/lib/kerberos.js","../../node_modules/kerberos/lib/util.js","../../node_modules/mime-db/index.js","../../node_modules/mime-types/index.js","../../node_modules/ms/index.js","../../node_modules/node-forge/lib/aes.js","../../node_modules/node-forge/lib/aesCipherSuites.js","../../node_modules/node-forge/lib/asn1-validator.js","../../node_modules/node-forge/lib/asn1.js","../../node_modules/node-forge/lib/baseN.js","../../node_modules/node-forge/lib/cipher.js","../../node_modules/node-forge/lib/cipherModes.js","../../node_modules/node-forge/lib/des.js","../../node_modules/node-forge/lib/ed25519.js","../../node_modules/node-forge/lib/forge.js","../../node_modules/node-forge/lib/hmac.js","../../node_modules/node-forge/lib/index.js","../../node_modules/node-forge/lib/jsbn.js","../../node_modules/node-forge/lib/kem.js","../../node_modules/node-forge/lib/log.js","../../node_modules/node-forge/lib/md.all.js","../../node_modules/node-forge/lib/md.js","../../node_modules/node-forge/lib/md5.js","../../node_modules/node-forge/lib/mgf.js","../../node_modules/node-forge/lib/mgf1.js","../../node_modules/node-forge/lib/oids.js","../../node_modules/node-forge/lib/pbe.js","../../node_modules/node-forge/lib/pbkdf2.js","../../node_modules/node-forge/lib/pem.js","../../node_modules/node-forge/lib/pkcs1.js","../../node_modules/node-forge/lib/pkcs12.js","../../node_modules/node-forge/lib/pkcs7.js","../../node_modules/node-forge/lib/pkcs7asn1.js","../../node_modules/node-forge/lib/pki.js","../../node_modules/node-forge/lib/prime.js","../../node_modules/node-forge/lib/prng.js","../../node_modules/node-forge/lib/pss.js","../../node_modules/node-forge/lib/random.js","../../node_modules/node-forge/lib/rc2.js","../../node_modules/node-forge/lib/rsa.js","../../node_modules/node-forge/lib/sha1.js","../../node_modules/node-forge/lib/sha256.js","../../node_modules/node-forge/lib/sha512.js","../../node_modules/node-forge/lib/ssh.js","../../node_modules/node-forge/lib/tls.js","../../node_modules/node-forge/lib/util.js","../../node_modules/node-forge/lib/x509.js","../../node_modules/open/index.js","../../node_modules/parse-path/lib/index.js","../../node_modules/parse-url/dist/index.js","../../node_modules/protocols/lib/index.js","../../node_modules/shimmer/index.js","../../node_modules/stack-chain/format.js","../../node_modules/stack-chain/index.js","../../node_modules/stack-chain/stack-chain.js","../../node_modules/supports-color/index.js",".././src/agent.ts",".././src/auth/copilotToken.ts",".././src/auth/deviceFlow.ts",".././src/auth/manager.ts",".././src/cancellation.ts",".././src/config.ts",".././src/conversation/conversationFeature.ts",".././src/conversation/conversationProgress.ts",".././src/conversation/fetchPostProcessor.ts",".././src/conversation/skillResolver.ts",".././src/conversation/turnProcessor.ts",".././src/copilotCompletionCache.ts",".././src/debug.ts",".././src/debug/debugServer.ts",".././src/editorFeatures/featureFlagsNotifier.ts",".././src/editorFeatures/logTarget.ts",".././src/editorFeatures/redirectTelemetryReporter.ts",".././src/editorFeatures/statusReporter.ts",".././src/fileSystem.ts",".././src/installationManager.ts",".././src/lspHelper.test.ts",".././src/methods/checkStatus.ts",".././src/methods/conversation/conversationCodeCopy.ts",".././src/methods/conversation/conversationCodeInsert.ts",".././src/methods/conversation/conversationCreate.ts",".././src/methods/conversation/conversationDestroy.ts",".././src/methods/conversation/conversationRating.ts",".././src/methods/conversation/conversationTurn.ts",".././src/methods/conversation/schema.ts",".././src/methods/getCompletions.ts",".././src/methods/getPanelCompletions.ts",".././src/methods/getVersion.ts",".././src/methods/methods.ts",".././src/methods/notifyAccepted.ts",".././src/methods/notifyChangeConfiguration.ts",".././src/methods/notifyRejected.ts",".././src/methods/notifyShown.ts",".././src/methods/setEditorInfo.ts",".././src/methods/signInConfirm.ts",".././src/methods/signInInitiate.ts",".././src/methods/signInWithGithubToken.ts",".././src/methods/signOut.ts",".././src/methods/telemetry/authNotifyDismissed.ts",".././src/methods/telemetry/authNotifyShown.ts",".././src/methods/telemetry/gitHubLoginSuccess.ts",".././src/methods/telemetry/newGitHubLogin.ts",".././src/methods/telemetryTrack.ts",".././src/methods/testing/alwaysAuth.ts",".././src/methods/testing/createContext.ts",".././src/methods/testing/getDocument.ts",".././src/methods/testing/getTelemetry.ts",".././src/methods/testing/neverAuth.ts",".././src/methods/testing/setCompletionDocuments.ts",".././src/methods/testing/setPanelCompletionDocuments.ts",".././src/methods/testing/setSyntheticTurns.ts",".././src/methods/testing/setTelemetryCapture.ts",".././src/methods/testing/triggerShowMessage.ts",".././src/methods/testing/useTestingToken.ts",".././src/methods/testingOptions.ts",".././src/methods/uninstall.ts",".././src/methods/verifyCertificate.ts",".././src/methods/verifyState.ts",".././src/notificationSender.ts",".././src/persist.ts",".././src/rpc.ts",".././src/schemaValidation.ts",".././src/service.ts",".././src/session.ts",".././src/symbolDefinitionProvider.ts",".././src/testing/auth.ts",".././src/testing/challengeDoc.ts",".././src/testing/context.ts",".././src/testing/notificationSender.ts",".././src/textDocument.ts",".././src/textDocumentManager.ts","../../lib/src/auth/copilotToken.ts","../../lib/src/auth/copilotTokenNotifier.ts","../../lib/src/changeTracker.ts","../../lib/src/clock.ts","../../lib/src/commitFileResolver.ts","../../lib/src/common/cache.ts","../../lib/src/common/debounce.ts","../../lib/src/common/iterableHelpers.ts","../../lib/src/common/productContext.ts","../../lib/src/config.ts","../../lib/src/constants.ts","../../lib/src/context.ts","../../lib/src/conversation/chatMLFetcher.ts","../../lib/src/conversation/conversation.ts","../../lib/src/conversation/conversationFinishCallback.ts","../../lib/src/conversation/conversations.ts","../../lib/src/conversation/followup.ts","../../lib/src/conversation/logger.ts","../../lib/src/conversation/openai/chatTokens.ts","../../lib/src/conversation/openai/config.ts","../../lib/src/conversation/openai/fetch.ts","../../lib/src/conversation/openai/openai.ts","../../lib/src/conversation/openai/stream.ts","../../lib/src/conversation/prompt/basePrompt.ts","../../lib/src/conversation/prompt/conversationPromptEngine.ts","../../lib/src/conversation/prompt/conversationSkill.ts","../../lib/src/conversation/prompt/conversationSkillCollector.ts","../../lib/src/conversation/prompt/fromHistory.ts","../../lib/src/conversation/prompt/fromMessage.ts","../../lib/src/conversation/prompt/fromSkills.ts","../../lib/src/conversation/prompt/metaPrompt.ts","../../lib/src/conversation/prompt/testFiles.ts","../../lib/src/conversation/prompt/testPrompt.ts","../../lib/src/conversation/promptTemplates.ts","../../lib/src/conversation/skills/CorrespondingSourceFileSkill.ts","../../lib/src/conversation/skills/CorrespondingTestFileSkill.ts","../../lib/src/conversation/skills/CurrentEditorSkill.ts","../../lib/src/conversation/skills/CurrentSelectionSkill.ts","../../lib/src/conversation/skills/DebugConsoleOutputSkill.ts","../../lib/src/conversation/skills/GitMetadataSkill.ts","../../lib/src/conversation/skills/ProblemInActiveDocumentSkill.ts","../../lib/src/conversation/skills/ProjectLabelsSkill.ts","../../lib/src/conversation/skills/TerminalOutputSkill.ts","../../lib/src/conversation/telemetry.ts","../../lib/src/copilotIgnore/index.ts","../../lib/src/copilotIgnore/manager.ts","../../lib/src/copilotPanel/common.ts","../../lib/src/copilotPanel/panel.ts","../../lib/src/cursorHistoryManager.ts","../../lib/src/defaultHandlers.ts","../../lib/src/documentTracker.ts","../../lib/src/error/userErrorNotifier.ts","../../lib/src/experiments/defaultExpFilters.ts","../../lib/src/experiments/expConfig.ts","../../lib/src/experiments/features.ts","../../lib/src/experiments/fetchExperiments.ts","../../lib/src/experiments/filters.ts","../../lib/src/experiments/granularityDirectory.ts","../../lib/src/experiments/granularityImplementation.ts","../../lib/src/experiments/telemetryNames.ts","../../lib/src/ghostText/completionsCache.ts","../../lib/src/ghostText/contextualFilter.ts","../../lib/src/ghostText/contextualFilterConstants.ts","../../lib/src/ghostText/contextualFilterTree.ts","../../lib/src/ghostText/copilotCompletion.ts","../../lib/src/ghostText/debounce.ts","../../lib/src/ghostText/ghostText.ts","../../lib/src/ghostText/multilineModel.ts","../../lib/src/ghostText/multilineModelWeights.ts","../../lib/src/ghostText/normalizeIndent.ts","../../lib/src/ghostText/telemetry.ts","../../lib/src/headerContributors.ts","../../lib/src/installationManager.ts","../../lib/src/language/generatedLanguages.ts","../../lib/src/language/languageDetection.ts","../../lib/src/language/languages.ts","../../lib/src/logger.ts","../../lib/src/machineId.ts","../../lib/src/network/certificateReaderCache.ts","../../lib/src/network/certificateReaders.ts","../../lib/src/network/certificates.ts","../../lib/src/network/helix.ts","../../lib/src/network/proxy.ts","../../lib/src/network/proxySockets.ts","../../lib/src/networkConfiguration.ts","../../lib/src/networking.ts","../../lib/src/notificationSender.ts","../../lib/src/openai/config.ts","../../lib/src/openai/fetch.ts","../../lib/src/openai/openai.ts","../../lib/src/openai/stream.ts","../../lib/src/postInsertion.ts","../../lib/src/postInsertionNotifier.ts","../../lib/src/progress.ts","../../lib/src/prompt/neighborFiles/cocommittedFiles.ts","../../lib/src/prompt/neighborFiles/cursorHistoryFiles.ts","../../lib/src/prompt/neighborFiles/neighborFiles.ts","../../lib/src/prompt/neighborFiles/openTabFiles.ts","../../lib/src/prompt/neighborFiles/workspaceFiles.ts","../../lib/src/prompt/parseBlock.ts","../../lib/src/prompt/prompt.ts","../../lib/src/prompt/promptLibProxy.ts","../../lib/src/prompt/repository.ts","../../lib/src/prompt/retrieval.ts","../../lib/src/prompt/symbolDefinition.ts","../../lib/src/repositoryControl/repositoryControl.ts","../../lib/src/repositoryControl/repositoryControlManager.ts","../../lib/src/suggestions/anomalyDetection.ts","../../lib/src/suggestions/editDistance.ts","../../lib/src/suggestions/mlConstants.ts","../../lib/src/suggestions/restraint.ts","../../lib/src/suggestions/suggestions.ts","../../lib/src/telemetry.ts","../../lib/src/telemetry/auth.ts","../../lib/src/telemetry/azureInsights.ts","../../lib/src/telemetry/azureInsightsReporter.ts","../../lib/src/testing/certificates.ts","../../lib/src/testing/context.ts","../../lib/src/testing/copilotToken.ts","../../lib/src/testing/fetcher.ts","../../lib/src/testing/runtimeMode.ts","../../lib/src/testing/telemetry.ts","../../lib/src/testing/telemetryFake.ts","../../lib/src/testing/telemetrySpy.ts","../../lib/src/testing/testHelpers.ts","../../lib/src/testing/testLanguageDetection.ts","../../lib/src/testing/testProductFeatures.ts","../../lib/src/testing/textDocument.ts","../../lib/src/textDocument.ts","../../lib/src/textDocumentManager.ts","../../lib/src/util/opener.ts","../../lib/src/util/pathRedaction.ts","../../lib/src/util/shortCircuit.ts","../../lib/src/workspaceFileSystem.ts","../../prompt/src/elidableText/elidableText.ts","../../prompt/src/elidableText/fromDiff.ts","../../prompt/src/elidableText/fromIndentationTrees.ts","../../prompt/src/elidableText/fromSourceCode.ts","../../prompt/src/elidableText/index.ts","../../prompt/src/elidableText/lineWithValueAndCost.ts","../../prompt/src/fileSystem.ts","../../prompt/src/indentation/classes.ts","../../prompt/src/indentation/description.ts","../../prompt/src/indentation/index.ts","../../prompt/src/indentation/java.ts","../../prompt/src/indentation/manipulation.ts","../../prompt/src/indentation/markdown.ts","../../prompt/src/indentation/parsing.ts","../../prompt/src/languageMarker.ts","../../prompt/src/lib.ts","../../prompt/src/localImportContext.ts","../../prompt/src/orchestrator.ts","../../prompt/src/parse.ts","../../prompt/src/parseBlock.ts","../../prompt/src/prompt.ts","../../prompt/src/siblingFunctions.ts","../../prompt/src/snippetInclusion/cursorContext.ts","../../prompt/src/snippetInclusion/cursorMatching.ts","../../prompt/src/snippetInclusion/jaccardMatching.ts","../../prompt/src/snippetInclusion/neighboringFiles.ts","../../prompt/src/snippetInclusion/selectRelevance.ts","../../prompt/src/snippetInclusion/snippets.ts","../../prompt/src/snippetInclusion/windowDelineations.ts","../../prompt/src/snippetProviders/language.ts","../../prompt/src/snippetProviders/path.ts","../../prompt/src/snippetProviders/snippetProvider.ts","../../prompt/src/suffixMatchCriteria.ts","../../prompt/src/tokenization/index.ts","../../prompt/src/tokenization/tokenizer.ts","../../prompt/src/wishlist.ts","../../prompt/src/workerProxy.ts","../../node_modules/uuid/dist/esm-node/rng.js","../../node_modules/uuid/dist/esm-node/regex.js","../../node_modules/uuid/dist/esm-node/validate.js","../../node_modules/uuid/dist/esm-node/stringify.js","../../node_modules/uuid/dist/esm-node/v1.js","../../node_modules/uuid/dist/esm-node/parse.js","../../node_modules/uuid/dist/esm-node/v35.js","../../node_modules/uuid/dist/esm-node/md5.js","../../node_modules/uuid/dist/esm-node/v3.js","../../node_modules/uuid/dist/esm-node/native.js","../../node_modules/uuid/dist/esm-node/v4.js","../../node_modules/uuid/dist/esm-node/v5.js","../../node_modules/uuid/dist/esm-node/sha1.js","../../node_modules/uuid/dist/esm-node/nil.js","../../node_modules/uuid/dist/esm-node/version.js","../../node_modules/vscode-uri/lib/esm/index.js","../../node_modules/web-tree-sitter/tree-sitter.js","../../node_modules/windows-ca-certs/index.js","../../prompt/dist/lib.js","../external commonjs \"@opentelemetry/instrumentation\"","../external commonjs \"applicationinsights-native-metrics\"","../external commonjs \"azure/functions-core\"","../external commonjs \"azure/opentelemetry-instrumentation-azure-sdk\"","../external node-commonjs \"assert\"","../external node-commonjs \"async_hooks\"","../external node-commonjs \"buffer\"","../external node-commonjs \"child_process\"","../external node-commonjs \"console\"","../external node-commonjs \"constants\"","../external node-commonjs \"crypto\"","../external node-commonjs \"dns\"","../external node-commonjs \"events\"","../external node-commonjs \"fs\"","../external node-commonjs \"http\"","../external node-commonjs \"http2\"","../external node-commonjs \"https\"","../external node-commonjs \"module\"","../external node-commonjs \"net\"","../external node-commonjs \"os\"","../external node-commonjs \"path\"","../external node-commonjs \"process\"","../external node-commonjs \"stream\"","../external node-commonjs \"timers\"","../external node-commonjs \"tls\"","../external node-commonjs \"tty\"","../external node-commonjs \"url\"","../external node-commonjs \"util\"","../external node-commonjs \"worker_threads\"","../external node-commonjs \"zlib\"","../../node_modules/@github/memoize/dist/esm/index.js","../external node-commonjs \"node:net\"","../external node-commonjs \"node:os\"","../../node_modules/get-port/index.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/startup"],"names":["Yallist","MAX","Symbol","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","get","self","key","doUse","node","hit","value","isStale","del","now","Date","unshiftNode","maxAge","diff","trim","walker","tail","prev","length","delete","removeNode","Entry","constructor","this","forEachStep","fn","thisp","undefined","call","module","exports","options","max","TypeError","Infinity","lc","stale","dispose","noDisposeOnSet","updateAgeOnGet","reset","mL","allowStale","mA","lengthCalculator","lC","forEach","itemCount","rforEach","head","next","keys","toArray","map","k","values","Map","dump","v","e","filter","h","dumpLru","set","len","has","item","unshift","peek","pop","load","arr","l","expiresAt","prune","ANY","Comparator","comp","parseOptions","loose","split","join","debug","parse","semver","operator","version","r","re","t","COMPARATORLOOSE","COMPARATOR","m","match","SemVer","toString","test","er","cmp","intersects","Range","includePrerelease","startsWith","includes","safeRe","range","raw","format","parseRange","c","first","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","cache","hr","HYPHENRANGELOOSE","HYPHENRANGE","replace","hyphenReplace","COMPARATORTRIM","comparatorTrimReplace","TILDETRIM","tildeTrimReplace","CARETTRIM","caretTrimReplace","rangeList","parseComparator","replaceGTE0","rangeMap","comparators","size","result","some","thisComparators","isSatisfiable","rangeComparators","every","thisComparator","rangeComparator","i","testSet","remainingComparators","slice","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","id","toLowerCase","replaceTilde","TILDELOOSE","TILDE","_","M","p","pr","ret","replaceCaret","CARETLOOSE","CARET","z","replaceXRange","XRANGELOOSE","XRANGE","gtlt","xM","xm","xp","anyX","STAR","GTE0PRE","GTE0","incPr","$0","from","fM","fm","fp","fpr","fb","to","tM","tm","tp","tpr","tb","prerelease","allowed","major","minor","patch","MAX_LENGTH","MAX_SAFE_INTEGER","compareIdentifiers","LOOSE","FULL","num","build","compare","other","compareMain","comparePre","a","b","compareBuild","inc","release","identifier","identifierBase","base","Number","Error","push","isNaN","s","eq","neq","gt","gte","lt","lte","op","String","rtl","COERCERTL","exec","index","lastIndex","COERCE","versionA","versionB","version1","version2","v1","v2","comparison","v1Higher","highVersion","lowVersion","highHasPre","prefix","throwErrors","parsed","list","sort","internalRe","constants","identifiers","valid","clean","rcompare","compareLoose","rsort","coerce","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","validRange","outside","gtr","ltr","simplifyRange","subset","src","tokens","SEMVER_SPEC_VERSION","RELEASE_TYPES","rcompareIdentifiers","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","process","env","NODE_DEBUG","args","console","error","numeric","anum","bnum","looseOption","Object","freeze","emptyOpts","R","LETTERDASHNUMBER","safeRegexReplacements","createToken","name","isGlobal","safe","token","makeSafeRegex","RegExp","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","LONETILDE","LONECARET","r1","r2","versions","maxSV","rangeObj","min","minSV","minver","setMin","comparator","compver","hilo","gtfn","ltefn","ltfn","ecomp","high","low","ranges","simplified","original","minimumVersionWithPreRelease","minimumVersion","simpleSubset","sub","dom","eqSet","Set","gtltComp","higher","lower","hasDomLT","hasDomGT","higherGT","lowerLT","add","needDomLTPre","needDomGTPre","sawNonNull","OUTER","simpleSub","simpleDom","isSub","defineProperty","ProgressType","ProgressToken","createMessageConnection","NullLogger","ConnectionOptions","ConnectionStrategy","AbstractMessageBuffer","WriteableStreamMessageWriter","AbstractMessageWriter","MessageWriter","ReadableStreamMessageReader","AbstractMessageReader","MessageReader","SharedArrayReceiverStrategy","SharedArraySenderStrategy","CancellationToken","CancellationTokenSource","Emitter","Event","Disposable","LRUCache","Touch","LinkedMap","ParameterStructures","NotificationType9","NotificationType8","NotificationType7","NotificationType6","NotificationType5","NotificationType4","NotificationType3","NotificationType2","NotificationType1","NotificationType0","NotificationType","ErrorCodes","ResponseError","RequestType9","RequestType8","RequestType7","RequestType6","RequestType5","RequestType4","RequestType3","RequestType2","RequestType1","RequestType0","RequestType","Message","RAL","MessageStrategy","CancellationStrategy","CancellationSenderStrategy","CancellationReceiverStrategy","ConnectionError","ConnectionErrors","LogTraceNotification","SetTraceNotification","TraceFormat","TraceValues","Trace","messages_1","enumerable","linkedMap_1","disposable_1","events_1","cancellation_1","sharedArrayCancellation_1","messageReader_1","messageWriter_1","messageBuffer_1","connection_1","ral_1","default","Is","None","isCancellationRequested","onCancellationRequested","Cancelled","is","candidate","boolean","shortcutEvent","callback","context","handle","timer","setTimeout","bind","MutableToken","_isCancelled","cancel","_emitter","fire","event","_token","RequestCancellationReceiverStrategy","IdCancellationReceiverStrategy","CancelNotification","ProgressNotification","StarRequestHandler","ConnectionState","type","func","warn","info","log","Off","Messages","Compact","Verbose","fromString","string","JSON","Text","code","message","super","setPrototypeOf","prototype","cancelUndispatched","kind","createCancellationTokenSource","sendCancellation","conn","sendNotification","cleanup","receiver","sender","handleMessage","cancellationStrategy","connectionStrategy","messageStrategy","messageReader","messageWriter","_logger","logger","sequenceNumber","notificationSequenceNumber","unknownResponseSequenceNumber","starRequestHandler","requestHandlers","starNotificationHandler","notificationHandlers","progressHandlers","tracer","messageQueue","responsePromises","knownCanceledRequests","requestTokens","trace","traceFormat","state","New","errorEmitter","closeEmitter","unhandledNotificationEmitter","unhandledProgressEmitter","disposeEmitter","createRequestQueueKey","_message","isListening","Listening","isClosed","Closed","isDisposed","Disposed","closeHandler","triggerMessageQueue","setImmediate","shift","processMessageQueue","isRequest","requestMessage","reply","resultOrError","method","startTime","jsonrpc","toJson","traceSendingResponse","write","catch","replyError","data","params","stringifyTrace","logLSPMessage","traceReceivedRequest","element","requestHandler","handler","tokenKey","cancellationSource","handlerResult","numberOfParams","InvalidParams","Array","isArray","parameterStructures","byName","byPosition","promise","then","InternalError","replySuccess","MethodNotFound","handleRequest","isNotification","notificationHandler","cancelId","traceReceivedNotification","handleNotification","isResponse","responseMessage","stringify","responsePromise","timerStart","traceReceivedResponse","reject","resolve","handleResponse","number","responseHandler","handleInvalidMessage","onClose","onError","toCancel","strategy","response","cancellationToken","queue","addMessageToQueue","lspMessage","isLSPMessage","timestamp","throwIfClosedOrDisposed","undefinedToNull","param","nullToUndefined","isNamedParam","computeSingleParam","auto","computeMessageParams","connection","messageParams","paramStart","paramEnd","notificationMessage","traceSendingNotification","onNotification","onProgress","_type","sendProgress","onUnhandledProgress","sendRequest","throwIfNotListening","last","disposable","Promise","traceSendingRequest","enableCancellation","async","MessageWriteError","onRequest","hasPendingResponse","_value","_tracer","sendNotificationOrTraceOptions","_sendNotification","_traceFormat","onUnhandledNotification","onDispose","end","PendingResponseRejected","listen","AlreadyListening","throwIfListening","inspect","verbose","create","_disposable","CallbackList","bucket","_callbacks","_contexts","remove","foundCallbackWithDifferentContext","splice","invoke","callbacks","contexts","apply","isEmpty","_options","_event","listener","thisArgs","disposables","onFirstListenerAdd","_noop","onLastListenerRemove","array","stringArray","elem","_a","First","AsOld","Last","AsNew","_map","_head","_tail","_size","_state","clear","touch","previous","addItemLast","addItemFirst","removeItem","callbackfn","thisArg","current","iterator","done","entries","toStringTag","trimOld","newSize","currentSize","toJSON","fromJSON","limit","ratio","_limit","_ratio","Math","checkTrim","round","encoding","_encoding","_chunks","_totalLength","append","chunk","toAppend","byteLength","tryReadHeaders","lowerCaseKeys","chunkIndex","offset","chunkBytesRead","row","buffer","_read","headers","header","indexOf","substr","tryReadBody","numberOfBytes","byteCount","emptyBuffer","asNative","allocNative","resultOffset","chunkPart","semaphore_1","ResolvedMessageReaderOptions","onPartialMessage","partialMessageEmitter","fireError","asError","fireClose","firePartialMessage","fromOptions","charset","contentDecoder","contentDecoders","contentTypeDecoder","contentTypeDecoders","decoder","applicationJson","readable","messageBuffer","_partialMessageTimeout","nextMessageLength","messageToken","readSemaphore","Semaphore","partialMessageTimeout","timeout","partialMessageTimer","onData","contentLength","parseInt","body","setPartialMessageTimer","clearPartialMessageTimer","lock","bytes","decode","waitingTime","ResolvedMessageWriterOptions","count","contentTypeEncoder","encoder","contentEncoder","writable","errorCount","writeSemaphore","msg","encode","doWrite","handleError","AbstractMessageSignature","ParseError","InvalidRequest","jsonrpcReservedErrorRangeStart","serverErrorStart","MessageReadError","ConnectionInactive","ServerNotInitialized","UnknownErrorCode","jsonrpcReservedErrorRangeEnd","serverErrorEnd","static","_parameterStructures","_ral","install","ral","capacity","_capacity","_active","_waiting","thunk","runNext","active","doRunNext","err","CancellationState","Continue","buffers","request","SharedArrayBuffer","Int32Array","$cancellationData","_conn","Atomics","store","SharedArrayBufferCancellationToken","SharedArrayBufferCancellationTokenSource","__createBinding","o","k2","desc","getOwnPropertyDescriptor","__esModule","configurable","__exportStar","hasOwnProperty","createServerSocketTransport","createClientSocketTransport","createServerPipeTransport","createClientPipeTransport","generateRandomPipeName","StreamMessageWriter","StreamMessageReader","SocketMessageWriter","SocketMessageReader","PortMessageWriter","PortMessageReader","IPCMessageWriter","IPCMessageReader","ril_1","path","os","crypto_1","net_1","api_1","eventEmitter","on","off","send","port","postMessage","socket","stream","asReadableStream","asWritableStream","destroy","XDG_RUNTIME_DIR","safeIpcPathLengths","randomSuffix","randomBytes","platform","tmpdir","pipeName","connectResolve","connected","_reject","server","createServer","close","removeListener","onConnected","createConnection","input","output","reader","read","addListener","isReadableStream","writer","isWritableStream","util_1","MessageBuffer","Buffer","TextDecoder","allocUnsafe","ReadableStreamWrapper","onEnd","WritableStreamWrapper","_ril","ms","clearTimeout","clearImmediate","setInterval","clearInterval","RIL","LSPErrorCodes","createProtocolConnection","lspReservedErrorRangeStart","RequestFailed","ServerCancelled","ContentModified","RequestCancelled","lspReservedErrorRangeEnd","vscode_jsonrpc_1","ProtocolNotificationType","ProtocolNotificationType0","ProtocolRequestType","ProtocolRequestType0","RegistrationType","MessageDirection","CallHierarchyOutgoingCallsRequest","CallHierarchyIncomingCallsRequest","CallHierarchyPrepareRequest","messageDirection","clientToServer","ColorPresentationRequest","DocumentColorRequest","ConfigurationRequest","serverToClient","DeclarationRequest","DiagnosticRefreshRequest","WorkspaceDiagnosticRequest","DocumentDiagnosticRequest","DocumentDiagnosticReportKind","DiagnosticServerCancellationData","retriggerRequest","Full","Unchanged","partialResult","WillDeleteFilesRequest","DidDeleteFilesNotification","DidRenameFilesNotification","WillRenameFilesRequest","DidCreateFilesNotification","WillCreateFilesRequest","FileOperationPatternKind","file","folder","FoldingRangeRequest","ImplementationRequest","InlayHintRefreshRequest","InlayHintResolveRequest","InlayHintRequest","InlineValueRefreshRequest","InlineValueRequest","WorkspaceSymbolRequest","CodeActionResolveRequest","CodeActionRequest","DocumentSymbolRequest","DocumentHighlightRequest","ReferencesRequest","DefinitionRequest","SignatureHelpRequest","SignatureHelpTriggerKind","HoverRequest","CompletionResolveRequest","CompletionRequest","CompletionTriggerKind","PublishDiagnosticsNotification","WatchKind","RelativePattern","FileChangeType","DidChangeWatchedFilesNotification","WillSaveTextDocumentWaitUntilRequest","WillSaveTextDocumentNotification","TextDocumentSaveReason","DidSaveTextDocumentNotification","DidCloseTextDocumentNotification","DidChangeTextDocumentNotification","TextDocumentContentChangeEvent","DidOpenTextDocumentNotification","TextDocumentSyncKind","TelemetryEventNotification","LogMessageNotification","ShowMessageRequest","ShowMessageNotification","MessageType","DidChangeConfigurationNotification","ExitNotification","ShutdownRequest","InitializedNotification","InitializeErrorCodes","InitializeRequest","WorkDoneProgressOptions","TextDocumentRegistrationOptions","StaticRegistrationOptions","PositionEncodingKind","FailureHandlingKind","ResourceOperationKind","UnregistrationRequest","RegistrationRequest","DocumentSelector","NotebookCellTextDocumentFilter","NotebookDocumentFilter","TextDocumentFilter","TypeHierarchySubtypesRequest","TypeHierarchyPrepareRequest","MonikerRequest","MonikerKind","UniquenessLevel","LinkedEditingRangeRequest","ShowDocumentRequest","SemanticTokensRegistrationType","SemanticTokensRefreshRequest","SemanticTokensRangeRequest","SemanticTokensDeltaRequest","SemanticTokensRequest","TokenFormat","WorkDoneProgressCancelNotification","WorkDoneProgressCreateRequest","WorkDoneProgress","SelectionRangeRequest","DidChangeWorkspaceFoldersNotification","WorkspaceFoldersRequest","TypeDefinitionRequest","ApplyWorkspaceEditRequest","ExecuteCommandRequest","PrepareRenameRequest","RenameRequest","PrepareSupportDefaultBehavior","DocumentOnTypeFormattingRequest","DocumentRangeFormattingRequest","DocumentFormattingRequest","DocumentLinkResolveRequest","DocumentLinkRequest","CodeLensRefreshRequest","CodeLensResolveRequest","CodeLensRequest","WorkspaceSymbolResolveRequest","DidCloseNotebookDocumentNotification","DidSaveNotebookDocumentNotification","DidChangeNotebookDocumentNotification","NotebookCellArrayChange","DidOpenNotebookDocumentNotification","NotebookDocumentSyncRegistrationType","NotebookDocument","NotebookCell","ExecutionSummary","NotebookCellKind","TypeHierarchySupertypesRequest","vscode_languageserver_types_1","protocol_implementation_1","protocol_typeDefinition_1","protocol_workspaceFolder_1","protocol_configuration_1","protocol_colorProvider_1","protocol_foldingRange_1","protocol_declaration_1","protocol_selectionRange_1","protocol_progress_1","protocol_callHierarchy_1","protocol_semanticTokens_1","protocol_showDocument_1","protocol_linkedEditingRange_1","protocol_fileOperations_1","protocol_moniker_1","protocol_typeHierarchy_1","protocol_inlineValue_1","protocol_inlayHint_1","protocol_diagnostic_1","protocol_notebook_1","language","scheme","pattern","objectLiteral","notebookType","notebook","Create","Rename","Delete","Abort","Transactional","TextOnlyTransactional","Undo","UTF8","UTF16","UTF32","hasId","documentSelector","workDoneProgress","hasWorkDoneProgress","unknownProtocolVersion","Warning","Info","Log","Incremental","isIncremental","text","rangeLength","isFull","Manual","AfterDelay","FocusOut","Created","Changed","Deleted","URI","baseUri","WorkspaceFolder","Change","Invoked","TriggerCharacter","TriggerForIncompleteCompletions","ContentChange","Identifier","document","project","group","global","$import","$export","local","Markup","Code","executionOrder","success","uinteger","equals","one","equalsMetadata","oneArray","otherArray","oneKeys","otherKeys","prop","DocumentUri","metadata","two","executionSummary","uri","cells","integer","typedArray","registrationMethod","start","deleteCount","Relative","check","node_1","TextDocument","__spreadArray","pack","arguments","ar","concat","FullTextDocument","languageId","content","_uri","_languageId","_version","_content","_lineOffsets","getText","offsetAt","substring","update","changes","_i","changes_1","change","getWellformedRange","startOffset","endOffset","startLine","line","endLine","lineOffsets","addedLineOffsets","computeLineOffsets","getLineOffsets","positionAt","character","mid","floor","position","lineOffset","nextLineOffset","mergeSort","left","right","leftIdx","rightIdx","isAtLineStart","textOffset","ch","charCodeAt","getWellformedEdit","textEdit","newText","applyEdits","edits","lastModifiedOffset","spans","sortedEdits_1","Position","Location","LocationLink","Color","ColorInformation","ColorPresentation","FoldingRangeKind","FoldingRange","DiagnosticRelatedInformation","DiagnosticSeverity","DiagnosticTag","CodeDescription","Diagnostic","Command","TextEdit","ChangeAnnotation","ChangeAnnotationIdentifier","AnnotatedTextEdit","TextDocumentEdit","CreateFile","RenameFile","DeleteFile","WorkspaceEdit","MIN_VALUE","MAX_VALUE","three","four","targetUri","targetRange","targetSelectionRange","originSelectionRange","red","green","blue","alpha","numberRange","color","label","additionalTextEdits","Comment","Imports","Region","startCharacter","endCharacter","collapsedText","defined","location","Information","Hint","Unnecessary","Deprecated","href","severity","source","relatedInformation","codeDescription","title","command","insert","needsConfirmation","description","annotation","annotationId","textDocument","OptionalVersionedTextDocumentIdentifier","overwrite","ignoreIfExists","oldUri","newUri","recursive","ignoreIfNotExists","documentChanges","TextDocumentIdentifier","VersionedTextDocumentIdentifier","TextDocumentItem","MarkupKind","MarkupContent","CompletionItemKind","InsertTextFormat","CompletionItemTag","InsertReplaceEdit","InsertTextMode","CompletionItemLabelDetails","CompletionItem","CompletionList","MarkedString","Hover","ParameterInformation","SignatureInformation","DocumentHighlightKind","DocumentHighlight","SymbolKind","SymbolTag","SymbolInformation","WorkspaceSymbol","DocumentSymbol","CodeActionKind","CodeActionTriggerKind","CodeActionContext","CodeAction","CodeLens","FormattingOptions","DocumentLink","SelectionRange","SemanticTokenTypes","SemanticTokenModifiers","SemanticTokens","InlineValueText","InlineValueVariableLookup","InlineValueEvaluatableExpression","InlineValueContext","InlayHintKind","InlayHintLabelPart","InlayHint","TextEditChangeImpl","changeAnnotations","edit","assertChangeAnnotations","manage","all","ChangeAnnotations","annotations","_annotations","_counter","idOrAnnotation","nextId","WorkspaceChange","workspaceEdit","_this","_textEditChanges","_workspaceEdit","_changeAnnotations","textEditChange","initDocumentChanges","getTextEditChange","textDocumentEdit","initChanges","createFile","optionsOrAnnotation","operation","renameFile","deleteFile","PlainText","Markdown","Method","Function","Constructor","Field","Variable","Class","Interface","Module","Property","Unit","Value","Enum","Keyword","Snippet","File","Reference","Folder","EnumMember","Constant","Struct","Operator","TypeParameter","asIs","adjustIndentation","detail","items","isIncomplete","fromPlainText","plainText","contents","documentation","parameters","Read","Write","Namespace","Package","Boolean","Key","Null","containerName","selectionRange","children","deprecated","tags","Empty","QuickFix","Refactor","RefactorExtract","RefactorInline","RefactorRewrite","Source","SourceOrganizeImports","SourceFixAll","Automatic","diagnostics","only","triggerKind","kindOrCommandOrEdit","checkKind","isPreferred","tabSize","insertSpaces","target","parent","resultId","variableName","caseSensitiveLookup","expression","frameId","stoppedLocation","Type","Parameter","tooltip","textEdits","paddingLeft","paddingRight","EOL","lineCount","sortedEdits","isLineStart","charAt","ProposedFeatures","NotebookDocuments","TextDocuments","SemanticTokensBuilder","semanticTokens_1","textDocuments_1","notebook_1","__brand","CallHierarchyFeature","vscode_languageserver_protocol_1","Base","callHierarchy","onPrepare","attachWorkDoneProgress","onIncomingCalls","attachPartialResultProgress","onOutgoingCalls","ConfigurationFeature","getConfiguration","arg","_getConfiguration","section","DiagnosticFeature","refresh","onWorkspace","FileOperationsFeature","onDidCreateFiles","onDidRenameFiles","onDidDeleteFiles","onWillCreateFiles","onWillRenameFiles","onWillDeleteFiles","InlayHintFeature","inlayHint","InlineValueFeature","inlineValue","LinkedEditingRangeFeature","onLinkedEditingRange","MonikerFeature","moniker","NotebookSyncFeature","synchronization","onDidOpenNotebookDocument","onDidChangeNotebookDocument","onDidSaveNotebookDocument","onDidCloseNotebookDocument","CellTextDocumentConnection","onDidOpenTextDocument","openHandler","openTextDocument","onDidChangeTextDocument","changeHandler","changeTextDocument","onDidCloseTextDocument","closeTextDocument","onWillSaveTextDocument","NULL_DISPOSE","onWillSaveTextDocumentWaitUntil","onDidSaveTextDocument","configurationOrTextDocuments","_cellTextDocuments","notebookDocuments","notebookCellMap","_onDidOpen","_onDidChange","_onDidSave","_onDidClose","cellTextDocuments","getCellTextDocument","cell","getNotebookDocument","getNotebookCell","findNotebookDocumentForCell","onDidOpen","onDidSave","onDidChange","onDidClose","cellTextDocumentConnection","notebooks","notebookDocument","cellTextDocument","updateCellMap","oldMetadata","metadataChanged","opened","closed","changedCells","structure","didOpen","open","didClose","cellUpdates","old","new","textContent","contentChanges","changeEvent","added","removed","changed","attachPartialResult","ProgressFeature","attachWorkDone","uuid_1","WorkDoneProgressReporterImpl","_connection","Instances","begin","percentage","cancellable","report","arg0","arg1","WorkDoneProgressServerReporterImpl","_source","NullProgressReporter","NullProgressServerReporter","ResultProgress","workDoneToken","_progressSupported","initialize","capabilities","window","progress","createWorkDoneProgress","generateUuid","ResultProgressReporterImpl","partialResultToken","SemanticTokensDiff","SemanticTokensFeature","semanticTokens","onDelta","onRange","originalSequence","modifiedSequence","computeDiff","originalLength","modifiedLength","startIndex","originalEndIndex","modifiedEndIndex","newData","_prevData","_id","_prevLine","_prevChar","_data","_dataLen","char","tokenType","tokenModifiers","pushLine","pushChar","previousResult","canBuildEdits","buildEdits","combineFeatures","combineNotebooksFeatures","combineLanguagesFeatures","combineWorkspaceFeatures","combineWindowFeatures","combineClientFeatures","combineTracerFeatures","combineTelemetryFeatures","combineConsoleFeatures","_NotebooksImpl","_LanguagesImpl","BulkUnregistration","BulkRegistration","ErrorMessageTracker","UUID","progress_1","configuration_1","workspaceFolder_1","callHierarchy_1","showDocument_1","fileOperations_1","linkedEditingRange_1","typeHierarchy_1","inlineValue_1","inlayHint_1","diagnostic_1","moniker_1","null2Undefined","_messages","sendErrors","showErrorMessage","RemoteConsoleImpl","rawAttach","_rawConnection","attach","fillServerCapabilities","_capabilities","RemoteWindowImpl","ShowDocumentFeature","actions","showWarningMessage","showInformationMessage","BulkRegistrationImpl","_registrations","_registered","registerOptions","asRegistrationParams","registrations","BulkUnregistrationImpl","unregistrations","_unregistrations","unregistration","isAttached","unregisterations","disposeSingle","_error","RemoteClientImpl","register","typeOrRegistrations","registerOptionsOrType","registerMany","registerSingle1","registerSingle2","_result","unregisterSingle","registration","RemoteWorkspaceImpl","WorkspaceFoldersFeature","applyEdit","paramOrEdit","TracerImpl","_trace","TelemetryImpl","logEvent","LanguagesImpl","TypeHierarchyFeature","NotebooksImpl","combine","telemetry","client","workspace","languages","connectionFactory","watchDog","factories","remoteWindow","allRemotes","asPromise","thenable","resolved","shutdownHandler","initializeHandler","exitHandler","protocolConnection","onInitialize","onInitialized","onShutdown","onExit","onDidChangeConfiguration","onDidChangeWatchedFiles","__textDocumentSync","sendDiagnostics","onHover","onCompletion","onCompletionResolve","onSignatureHelp","onDeclaration","onDefinition","onTypeDefinition","onImplementation","onReferences","onDocumentHighlight","onDocumentSymbol","onWorkspaceSymbol","onWorkspaceSymbolResolve","onCodeAction","onCodeActionResolve","onCodeLens","onCodeLensResolve","onDocumentFormatting","onDocumentRangeFormatting","onDocumentOnTypeFormatting","onRenameRequest","onPrepareRename","onDocumentLinks","onDocumentLinkResolve","onDocumentColor","onColorPresentation","onFoldingRanges","onSelectionRanges","onExecuteCommand","remote","textDocumentSync","shutdownReceived","exit","showDocument","configuration","_configuration","_syncedDocuments","_onDidChangeContent","_onWillSave","onDidChangeContent","onWillSave","onWillSaveWaitUntil","_willSaveWaitUntil","td","toFire","syncedDocument","reason","typeHierarchy","onSupertypes","onSubtypes","isUUID","v4","empty","ValueUUID","asHex","V4UUID","_randomHex","_oneOf","_timeHighBits","random","_chars","_UUIDPattern","_notificationIsAutoRegistered","workspaceCapabilities","workspaceFolders","_onDidChangeWorkspaceFolders","changeNotifications","getWorkspaceFolders","onDidChangeWorkspaceFolders","_unregistration","resolveModulePath","FileSystem","resolveGlobalYarnPath","resolveGlobalNodePath","uriToFilePath","url","fs","child_process_1","isWindows","moduleName","nodePath","cwd","nodePathKey","app","newEnv","existsSync","delimiter","cp","fork","execArgv","pid","npmCommand","shell","stdout","spawnSync","protocol","segments","decodeURIComponent","second","normalize","yarnCommand","results","stderr","lines","yarn","_isCaseSensitive","isCaseSensitive","__filename","toUpperCase","isParent","child","workspaceRoot","isAbsolute","Files","server_1","exitTimer","_shutdownReceived","argName","runTimer","processId","kill","ex","argv","setupExitTimer","arg2","arg3","arg4","stdin","transport","commandLineMessage","inputStream","_createConnection","inserted","Node","pushNode","res","forEachReverse","n","getReverse","mapReverse","reduce","initial","acc","reduceReverse","toArrayReverse","sliceReverse","nodes","reverse","perf","performance","AC","AbortController","signal","AS","abort","dispatchEvent","hasAbortSignal","AbortSignal","hasACAbortSignal","aborted","_listeners","onabort","f","addEventListener","ev","removeEventListener","warned","deprecatedOption","opt","instead","shouldWarn","deprecatedMethod","emitWarning","what","isPosInt","isFinite","getUintArray","pow","Uint8Array","Uint16Array","Uint32Array","ZeroArray","fill","Stack","UintArray","heap","ttl","ttlResolution","ttlAutopurge","updateAgeOnHas","disposeAfter","noUpdateTTL","maxSize","sizeCalculation","fetchMethod","fetchContext","noDeleteOnFetchRejection","noDeleteOnStaleGet","keyMap","keyList","valList","free","initialFill","disposed","initializeSizeTracking","initializeTTLTracking","getRemainingTTL","ttls","starts","setItemTTL","unref","updateItemAge","cachedNow","getNow","calculatedSize","sizes","removeItemSize","requireSize","addItemSize","evict","isValidIndex","indexes","rindexes","find","getOptions","purgeStale","deleted","entry","isBackgroundFetch","__staleWhileFetching","age","newIndex","oldVal","__abortController","moveToTail","val","backgroundFetch","ac","fetchOpts","__returned","forceRefresh","fetching","connect","field","deprecatedProperty","Readable","isBlob","obj","nm","getFooter","boundary","getHeader","isFormData","FormDataSerializer","formData","fd","_length","form","getFormDataLength","contentType","formDataIterator","maxBufferLength","pipeline","PassThrough","promisify","createGunzip","createInflate","createBrotliDecompress","Z_SYNC_FLUSH","asyncPipeline","calcSize","processed","isBuffer","keyFor","calcArraySize","calcObjectSize","curr","names","getOwnPropertySymbols","decodeStream","statusCode","readableStream","canDecode","cb","flush","finishFlush","isPlainObject","getPrototypeOf","proto","sizeof","WeakSet","streamToBuffer","passThroughStream","chunks","RequestAbortedError","http","https","ctx","agent","h1","opts","rejectUnauthorized","httpsAgent","Agent","httpAgent","getAgent","assigned","Proxy","property","inUse","_connectOptions","servername","req","onAbortSignal","once","incomingMessage","statusMessage","httpVersion","httpVersionMajor","httpVersionMinor","statusText","decoded","createResponse","pipe","setupContext","resetContext","NGHTTP2_CANCEL","SESSION_IDLE_TIMEOUT","PUSHED_STREAM_IDLE_TIMEOUT","clientHttp2Stream","hdrs","origin","pathname","search","hash","h2","ctxOpts","sessionCache","idleSessionTimeout","pushPromiseHandler","pushHandler","host","session","destroyed","connectOptions","enablePush","settings","setMaxListeners","errorCode","lastStreamID","opaqueData","flags","pushedStream","requestHeaders","pushedStreamIdleTimeout","responseHeaders","flgs","handlePush","onSessionError","rstCode","ALPN_HTTP2","ALPN_HTTP2C","ALPN_HTTP1_1","ALPN_HTTP1_0","RequestContext","api","setCA","ca","EventEmitter","locked","ee","acquire","tryAcquire","Reflect","deleteProperty","emit","tls","types","isAnyArrayBuffer","LRU","ALPN_CACHE_SIZE","ALPN_CACHE_TTL","ALPN_PROTOCOLS","DEFAULT_USER_AGENT","DEFAULT_OPTIONS","compress","socketIdCounter","connectionLock","connectTLS","hostname","secureConnecting","URL","sanitizeHeaders","userAgent","URLSearchParams","accept","socketFactory","requestOptions","alpns","isSecure","secOpts","ALPNProtocols","secureSocket","alpnProtocol","getProtocolAndSocketFromFactory","alpnProtocols","alpnCache","_rejectUnauthorized","h1Opts","h2Opts","determineProtocol","alpnCacheTTL","alpnCacheSize","SIGNAL_INTERNALS","handlerName","defineProperties","TimeoutSignal","isInteger","timerId","CONTROLLER_INTERNALS","FetchError","FetchBaseError","EMPTY_BUFFER","alloc","INTERNALS","consume","disturbed","Body","bodyUsed","buf","byteOffset","arrayBuffer","json","cloneStream","clonedStream","guessContentType","Headers","Response","CacheableResponse","init","bufferedBody","clone","status","counter","cacheableResponse","systemError","errno","erroredSysCall","syscall","AbortError","validateHeaderName","validateHeaderValue","normalizeName","normalizeValue","plain","fromEntries","Request","CachePolicy","CACHEABLE_METHODS","PUSH_EVENT","fetch","follow","redirect","initBody","coreResp","abortHandler","locationURL","cacheResponse","maxCacheSize","policy","shared","storable","cacheable","timeToLive","createUrl","qs","urlWithQuery","searchParams","timeoutSignal","FetchContext","reqHeaders","noCache","keepAlive","h1NoCache","keepAliveNoCache","onPush","offPush","clearCache","cacheStats","satisfiesWithoutRevalidation","resp","fromCache","cachingFetch","cachedResponse","convertRequest","convertResponse","parsedURL","respBody","ok","redirected","RangeError","ValidPhaseNames","HttpPipeline","policies","_policies","_orderedPolicies","addPolicy","phase","afterPhase","removePolicy","removedPolicies","policyDescriptor","httpClient","getOrderedPolicies","reduceRight","orderPolicies","policyMap","createPhase","hasRun","hasAfterPolicies","serializePhase","noPhase","deserializePhase","retryPhase","signPhase","orderedPhases","getPhase","descriptor","policyName","dependsOn","dependants","afterPolicies","afterPolicyName","afterNode","beforePolicies","beforePolicyName","beforeNode","walkPhase","dependant","walkPhases","iteration","initialResultLength","createEmptyPipeline","debugEnvVariable","DEBUG","enabledString","enabledNamespaces","skippedNamespaces","debuggers","enable","debugObj","assign","namespace","createDebugger","enabled","disable","namespaces","wildcard","namespaceList","ns","instance","endsWith","skipped","enabledNamespace","newDebugger","extend","registeredLoggers","logLevelFromEnv","AZURE_LOG_LEVEL","azureLogLevel","AzureLogger","AZURE_LOG_LEVELS","isAzureLogLevel","level","shouldEnable","setLogLevel","levelMap","warning","createClientLogger","clientRootLogger","patchLogMethod","createLogger","logLevel","isObject","RedactedString","defaultAllowedHeaderNames","defaultAllowedQueryParameters","Sanitizer","additionalAllowedHeaderNames","allowedHeaderNames","additionalAllowedQueryParameters","allowedQueryParameters","sanitize","seen","sanitizeUrl","sanitizeQuery","sanitized","logPolicyName","logPolicy","sanitizer","redirectPolicyName","allowedRedirect","redirectPolicy","maxRetries","handleRedirect","currentRetries","locationHeader","SDK_VERSION","getUserAgentValue","runtimeInfo","defaultAgent","telemetryInfo","parts","getUserAgentString","UserAgentHeaderName","userAgentPolicyName","userAgentPolicy","userAgentValue","userAgentPrefix","decompressResponsePolicyName","decompressResponsePolicy","listenersMap","WeakMap","abortedMap","none","listeners","abortSignal","parentSignals","_signal","parentSignal","delay","delayInMs","onAborted","rejectOnAbort","abortErrorMsg","removeListeners","parseHeaderValueAsNumber","headerName","valueAsNum","RetryAfterHeader","AllRetryAfterHeaders","getRetryAfterInMs","retryAfterValue","retryAfterHeader","throttlingRetryStrategy","retry","retryAfterInMs","skipStrategy","exponentialRetryStrategy","_b","retryInterval","retryDelayInMs","maxRetryInterval","maxRetryDelayInMs","retryCount","responseError","matchedSystemError","ignoreSystemErrors","isExponential","isExponentialRetryResponse","ignoreExponentialResponse","ignoreHttpStatusCodes","unknownResponse","isThrottlingRetryResponse","errorToThrow","exponentialDelay","clampedExponentialDelay","ceil","retryPolicyLogger","retryPolicy","strategies","retryRequest","requestId","strategiesLoop","strategyLogger","modifiers","redirectTo","defaultRetryPolicy","formDataPolicyName","formDataPolicy","urlSearchParams","subValue","wwwFormUrlEncode","requestForm","formKey","formValue","getBoundary","getLength","prepareFormData","isNode","proxyPolicyName","globalNoProxyList","noProxyListLoaded","globalBypassedMap","getEnvironmentValue","getDefaultProxySettings","proxyUrl","httpsProxy","allProxy","httpProxy","loadEnvironmentProxyValue","parsedUrl","username","password","getProxyAgentOptions","proxySettings","tlsSettings","parsedProxyUrl","proxyAgentOptions","auth","proxyPolicy","noProxy","loadNoProxy","cachedAgents","noProxyList","bypassedMap","isBypassedFlag","isBypassed","customNoProxyList","isInsecure","httpProxyAgent","HttpProxyAgent","httpsProxyAgent","HttpsProxyAgent","setProxyAgentOnRequest","setClientRequestIdPolicyName","setClientRequestIdPolicy","requestIdHeaderName","tlsPolicyName","tlsPolicy","knownContextKeys","span","for","createTracingContext","TracingContextImpl","parentContext","setValue","initialContext","_contextMap","newContext","getValue","deleteValue","instrumenterImplementation","getInstrumenter","createRequestHeaders","parseTraceparentHeader","startSpan","_name","spanOptions","isRecording","recordException","setAttribute","setStatus","tracingContext","withContext","_context","callbackArgs","isError","hasName","hasMessage","getErrorMessage","stringified","custom","errorSanitizer","RestError","isRestError","REQUEST_SEND_ERROR","PARSE_ERROR","tracingPolicyName","tracingPolicy","tracingClient","packageName","packageVersion","operationOptions","startSpanResult","tracingOptions","updatedOptions","withSpan","traceparentHeader","createTracingClient","tryCreateTracingClient","spanKind","spanAttributes","tryCreateSpan","serviceRequestId","tryProcessResponse","tryProcessError","createPipelineFromOptions","tlsOptions","proxyOptions","userAgentOptions","retryOptions","redirectOptions","loggingOptions","HttpHeadersImpl","rawHeaders","_headersMap","preserveCase","normalizedName","headerIterator","createHttpHeaders","DEFAULT_TLS_SETTINGS","isStreamComplete","isArrayBuffer","ReportTransform","Transform","progressCallback","loadedBytes","_transform","NodeHttpClient","cachedHttpsAgents","_c","abortController","abortListener","acceptEncoding","shouldDecompress","responseStream","bodyLength","getBodyLength","onUploadProgress","uploadReportStream","makeRequest","getResponseHeaders","resume","contentEncoding","unzip","inflate","getDecodedResponseStream","onDownloadProgress","downloadReportStream","streamResponseStatusCodes","POSITIVE_INFINITY","readableStreamBody","bodyAsText","uploadStreamDone","downloadStreamDone","allowInsecureConnection","getOrCreateAgent","abortError","ArrayBuffer","isView","disableKeepAlive","cachedHttpAgent","createDefaultHttpClient","rnds8Pool","poolPtr","rng","byteToHex","uuid","rnds","PipelineRequestImpl","_d","_e","_f","_g","withCredentials","enableBrowserStreams","createPipelineRequest","exponentialRetryPolicyName","exponentialRetryPolicy","systemErrorRetryPolicyName","systemErrorRetryPolicy","throttlingRetryPolicyName","throttlingRetryPolicy","DEFAULT_CYCLER_OPTIONS","forcedRefreshWindowInMs","retryIntervalInMs","refreshWindowInMs","bearerTokenAuthenticationPolicyName","defaultAuthorizeRequest","scopes","getAccessToken","getTokenOptions","accessToken","bearerTokenAuthenticationPolicy","credential","challengeCallbacks","authorizeRequest","authorizeRequestOnChallenge","tokenCyclerOptions","tenantId","refreshWorker","cycler","isRefreshing","shouldRefresh","expiresOnTimestamp","mustRefresh","refreshTimeout","tryGetAccessToken","finalToken","beginRefresh","getToken","tokenOptions","claims","createTokenCycler","challenge","getChallenge","ndJsonPolicyName","ndJsonPolicy","emitter","onEvent","__awaiter","_arguments","P","generator","fulfilled","step","rejected","__importDefault","mod","tls_1","url_1","debug_1","once_1","agent_base_1","_opts","proxy","secureProxy","setHeader","_header","endOfHeaders","_implicitHeader","outputData","agent_1","createHttpProxyAgent","webSnippet","__read","NoopContextManager","with","API_NAME","NOOP_CONTEXT_MANAGER","ContextAPI","getInstance","_instance","setGlobalContextManager","contextManager","_getContextManager","DiagComponentLogger","props","_namespace","logProxy","funcName","DiagAPI","_logProxy","setLogger","optionsOrLogLevel","stack","oldLogger","newLogger","maxLevel","_filterFunc","theLevel","theFunc","createLogLevelDiagLogger","suppressOverrideMessage","createComponentLogger","__values","BaggageImpl","_entries","getEntry","getAllEntries","setEntry","newBaggage","removeEntry","removeEntries","e_1","keys_1","keys_1_1","e_1_1","return","baggageEntryMetadataSymbol","createBaggage","baggageEntryMetadataFromString","str","__TYPE__","createContextKey","ROOT_CONTEXT","BaseContext","_currentContext","diag","DiagLogLevel","extendStatics","ValueType","consoleMap","DiagConsoleLogger","_consoleFunc","__extends","d","__proto__","__","NoopMeter","createHistogram","NOOP_HISTOGRAM_METRIC","createCounter","NOOP_COUNTER_METRIC","createUpDownCounter","NOOP_UP_DOWN_COUNTER_METRIC","createObservableGauge","NOOP_OBSERVABLE_GAUGE_METRIC","createObservableCounter","NOOP_OBSERVABLE_COUNTER_METRIC","createObservableUpDownCounter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","addBatchObservableCallback","_callback","_observables","removeBatchObservableCallback","NoopMetric","NoopCounterMetric","_super","_attributes","NoopUpDownCounterMetric","NoopHistogramMetric","record","NoopObservableMetric","addCallback","removeCallback","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","NOOP_METER","createNoopMeter","VALID_KEY_CHAR_RANGE","VALID_KEY_REGEX","VALID_VALUE_BASE_REGEX","INVALID_VALUE_COMMA_EQUAL_REGEX","TraceStateImpl","rawTraceState","_internalState","_parse","traceState","_clone","unset","serialize","_keys","agg","part","listMember","validateKey","validateValue","createTraceState","NOOP_METER_PROVIDER","NoopMeterProvider","getMeter","metrics","MetricsAPI","setGlobalMeterProvider","provider","getMeterProvider","propagation","_globalThis","globalThis","VERSION","isCompatible","ownVersion","acceptedVersions","rejectedVersions","myVersionMatch","ownVersionParsed","globalVersion","_accept","globalVersionMatch","globalVersionParsed","_makeCompatibilityCheck","GLOBAL_OPENTELEMETRY_API_KEY","_global","registerGlobal","allowOverride","getGlobal","unregisterGlobal","NoopTextMapPropagator","inject","_carrier","extract","fields","BAGGAGE_KEY","getBaggage","getActiveBaggage","setBaggage","baggage","deleteBaggage","NOOP_TEXT_MAP_PROPAGATOR","PropagationAPI","setGlobalPropagator","propagator","carrier","setter","_getGlobalPropagator","getter","defaultTextMapGetter","defaultTextMapSetter","TraceAPI","_proxyTracerProvider","ProxyTracerProvider","wrapSpanContext","isSpanContextValid","deleteSpan","getSpan","getActiveSpan","getSpanContext","setSpan","setSpanContext","setGlobalTracerProvider","setDelegate","getTracerProvider","getTracer","NonRecordingSpan","_spanContext","spanContext","_key","setAttributes","addEvent","_status","updateName","_endTime","_exception","_time","contextApi","NoopTracer","root","parentFromContext","startActiveSpan","contextWithSpanSet","NOOP_TRACER","ProxyTracer","_provider","_getTracer","_fn","_delegate","getDelegateTracer","NOOP_TRACER_PROVIDER","NoopTracerProvider","getDelegate","delegate","SamplingDecision","SPAN_KEY","INVALID_SPANID","INVALID_TRACEID","INVALID_SPAN_CONTEXT","traceId","spanId","traceFlags","SpanKind","VALID_TRACEID_REGEX","VALID_SPANID_REGEX","isValidTraceId","isValidSpanId","SpanStatusCode","TraceFlags","ExportResultCode","BAGGAGE_KEY_PAIR_SEPARATOR","BAGGAGE_PROPERTIES_SEPARATOR","BAGGAGE_ITEMS_SEPARATOR","BAGGAGE_HEADER","BAGGAGE_MAX_NAME_VALUE_PAIRS","BAGGAGE_MAX_PER_NAME_VALUE_PAIRS","BAGGAGE_MAX_TOTAL_LENGTH","W3CBaggagePropagator","keyPairs","getKeyPairs","pair","headerValue","serializeKeyPairs","baggageString","keyPair","parsePairKeyValue","baggageEntry","hValue","encodeURIComponent","valueProps","keyPairPart","parseKeyPairsIntoRecord","sanitizeAttributes","attributes","out","isAttributeKey","isAttributeValue","e_2","arr_1","arr_1_1","isValidPrimitiveAttributeValue","e_2_1","isHomogeneousAttributeValueArray","delegateHandler","setGlobalErrorHandler","globalErrorHandler","loggingErrorHandler","getOwnPropertyNames","propertyName","flattenException","stringifyException","MILLISECONDS_TO_NANOSECONDS","SECOND_TO_NANOSECONDS","millisToHrTime","epochMillis","epochSeconds","trunc","getTimeOrigin","timeOrigin","timing","fetchStart","hrTime","performanceNow","addHrTimes","timeInputToHrTime","time","isTimeInputHrTime","getTime","hrTimeDuration","endTime","seconds","nanos","hrTimeToTimeStamp","tmp","repeat","nanoString","toISOString","hrTimeToNanoseconds","hrTimeToMilliseconds","hrTimeToMicroseconds","isTimeInput","time1","time2","AnchoredClock","systemClock","monotonicClock","_monotonicClock","_epochMillis","_performanceMillis","delta","intValue","charCode","buf8","buf16","hexToBase64","hexStr","hi","lo","writeUInt8","RandomIdGenerator","generateTraceId","getIdGenerator","generateSpanId","SHARED_BUFFER","writeUInt32BE","RPCType","RPC_METADATA_KEY","setRPCMetadata","meta","deleteRPCMetadata","getRPCMetadata","AlwaysOffSampler","shouldSample","decision","AlwaysOnSampler","ParentBasedSampler","config","_root","_remoteParentSampled","remoteParentSampled","_remoteParentNotSampled","remoteParentNotSampled","_localParentSampled","localParentSampled","_localParentNotSampled","localParentNotSampled","spanName","links","isRemote","TraceIdRatioBasedSampler","_normalize","_upperBound","_accumulate","accumulation","pos","TimeoutError","callWithTimeout","timeoutHandle","timeoutPromise","_resolve","race","urlMatches","urlToMatch","isUrlIgnored","ignoredUrls","ignoredUrls_1","ignoredUrls_1_1","isWrapped","__original","__unwrap","__wrapped","internal","_export","exporter","export","getEnv","processEnv","HOSTNAME","otperformance","require","SDK_INFO","Te","unrefTimer","CompositePropagator","_propagators","propagators","_fields","x","y","TraceState","TRACE_PARENT_HEADER","TRACE_STATE_HEADER","TRACE_PARENT_REGEX","parseTraceParent","traceParent","W3CTraceContextPropagator","traceParentHeader","traceStateHeader","SUPPRESS_TRACING_KEY","suppressTracing","unsuppressTracing","isTracingSuppressed","Deferred","_promise","BindOnceFuture","_that","_isCalled","_deferred","ENVIRONMENT_BOOLEAN_KEYS","isEnvVarABoolean","ENVIRONMENT_NUMBERS_KEYS","isEnvVarANumber","ENVIRONMENT_LISTS_KEYS","isEnvVarAList","DEFAULT_ATTRIBUTE_VALUE_LENGTH_LIMIT","DEFAULT_ATTRIBUTE_COUNT_LIMIT","DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT","DEFAULT_ENVIRONMENT","OTEL_SDK_DISABLED","CONTAINER_NAME","ECS_CONTAINER_METADATA_URI_V4","ECS_CONTAINER_METADATA_URI","KUBERNETES_SERVICE_HOST","NAMESPACE","OTEL_BSP_EXPORT_TIMEOUT","OTEL_BSP_MAX_EXPORT_BATCH_SIZE","OTEL_BSP_MAX_QUEUE_SIZE","OTEL_BSP_SCHEDULE_DELAY","OTEL_BLRP_EXPORT_TIMEOUT","OTEL_BLRP_MAX_EXPORT_BATCH_SIZE","OTEL_BLRP_MAX_QUEUE_SIZE","OTEL_BLRP_SCHEDULE_DELAY","OTEL_EXPORTER_JAEGER_AGENT_HOST","OTEL_EXPORTER_JAEGER_AGENT_PORT","OTEL_EXPORTER_JAEGER_ENDPOINT","OTEL_EXPORTER_JAEGER_PASSWORD","OTEL_EXPORTER_JAEGER_USER","OTEL_EXPORTER_OTLP_ENDPOINT","OTEL_EXPORTER_OTLP_TRACES_ENDPOINT","OTEL_EXPORTER_OTLP_METRICS_ENDPOINT","OTEL_EXPORTER_OTLP_HEADERS","OTEL_EXPORTER_OTLP_TRACES_HEADERS","OTEL_EXPORTER_OTLP_METRICS_HEADERS","OTEL_EXPORTER_OTLP_TIMEOUT","OTEL_EXPORTER_OTLP_TRACES_TIMEOUT","OTEL_EXPORTER_OTLP_METRICS_TIMEOUT","OTEL_EXPORTER_ZIPKIN_ENDPOINT","OTEL_LOG_LEVEL","OTEL_NO_PATCH_MODULES","OTEL_PROPAGATORS","OTEL_RESOURCE_ATTRIBUTES","OTEL_SERVICE_NAME","OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT","OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT","OTEL_SPAN_EVENT_COUNT_LIMIT","OTEL_SPAN_LINK_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT","OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT","OTEL_TRACES_EXPORTER","OTEL_TRACES_SAMPLER","OTEL_TRACES_SAMPLER_ARG","OTEL_LOGS_EXPORTER","OTEL_EXPORTER_OTLP_INSECURE","OTEL_EXPORTER_OTLP_TRACES_INSECURE","OTEL_EXPORTER_OTLP_METRICS_INSECURE","OTEL_EXPORTER_OTLP_CERTIFICATE","OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE","OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE","OTEL_EXPORTER_OTLP_COMPRESSION","OTEL_EXPORTER_OTLP_TRACES_COMPRESSION","OTEL_EXPORTER_OTLP_METRICS_COMPRESSION","OTEL_EXPORTER_OTLP_CLIENT_KEY","OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY","OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY","OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE","OTEL_EXPORTER_OTLP_PROTOCOL","OTEL_EXPORTER_OTLP_TRACES_PROTOCOL","OTEL_EXPORTER_OTLP_METRICS_PROTOCOL","OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE","parseBoolean","environment","parseNumber","parseStringList","separator","givenValue","logLevelMap","ALL","VERBOSE","INFO","WARN","ERROR","NONE","setLogLevelFromEnv","parseEnvironment","getEnvWithoutDefaults","transform","funcToString","objectCtorString","getPrototype","objectProto","symToStringTag","nativeObjectToString","isObjectLike","isOwn","tag","unmasked","getRawTag","objectToString","baseGetTag","Ctor","merge","objects","mergeTwoObjects","takeValue","isPrimitive","isFunction","j","shouldMerge","twoValue","obj1","obj2","wasObjectReferenced","arr1","arr2","TracesSamplerValues","Span","parentTracer","parentSpanId","_deprecatedClock","events","_droppedAttributesCount","_droppedEventsCount","_droppedLinksCount","_ended","_duration","_performanceStartTime","_performanceOffset","_startTimeProvided","_getTime","resource","instrumentationLibrary","_spanLimits","getSpanLimits","_spanProcessor","getActiveSpanProcessor","onStart","_attributeValueLengthLimit","attributeValueLengthLimit","_isSpanEnded","attributeCountLimit","_truncateToSize","attributesOrStartTime","timeStamp","eventCountLimit","droppedAttributesCount","inp","msDuration","exception","SemanticAttributes","_truncateToLimitUtil","NOT_RECORD","RECORD_AND_SAMPLED","FALLBACK_OTEL_TRACES_SAMPLER","loadDefaultConfig","sampler","buildSamplerFromEnv","forceFlushTimeoutMillis","generalLimits","spanLimits","linkCountLimit","attributePerEventCountLimit","attributePerLinkCountLimit","getSamplerProbabilityFromEnv","probability","ForceFlushState","Tracer","_tracerProvider","userConfig","perInstanceDefaults","DEFAULT_CONFIG","localConfig","_sampler","_generalLimits","_idGenerator","idGenerator","parentSpan","parentSpanContext","link","samplingResult","initAttributes","getGeneralLimits","__assign","Resource","asyncAttributesPromise","asyncAttributesPending","_syncAttributes","_asyncAttributesPromise","asyncAttributes","EMPTY","SemanticResourceAttributes","argv0","waitForAsyncAttributes","g","sent","trys","ops","verb","__generator","mergedSyncAttributes","mergedAttributesPromise","thisAsyncAttributes","otherAsyncAttributes","MultiSpanProcessor","_spanProcessors","forceFlush","promises","spanProcessor","e_3","e_3_1","shutdown","e_4","e_4_1","NoopSpanProcessor","_span","BatchSpanProcessorBase","_exporter","_finishedSpans","_droppedSpansCount","_maxExportBatchSize","maxExportBatchSize","_maxQueueSize","maxQueueSize","_scheduledDelayMillis","scheduledDelayMillis","_exportTimeoutMillis","exportTimeoutMillis","_shutdownOnce","_shutdown","isCalled","_flushAll","_parentContext","_addToBuffer","_maybeStartTimer","_flushOneBatch","_clearTimer","doExport","ExportResult","pendingResources","_timer","BatchSpanProcessor","BasicTracerProvider","_registeredSpanProcessors","_tracers","mergedConfig","_h","_j","_k","_l","_m","parsedEnvConfig","reconfigureLimits","_config","defaultExporter","_buildExporterFromEnv","batchProcessor","activeSpanProcessor","schemaUrl","addSpanProcessor","_buildPropagatorFromEnv","timeoutInterval","errors","_getPropagator","_registeredPropagators","_getSpanExporter","_registeredExporters","uniquePropagatorNames","validPropagators","exporterName","ConsoleSpanExporter","resultCallback","_sendSpans","_exportInfo","parentId","duration","spans_1","spans_1_1","dir","depth","InMemorySpanExporter","_stopped","getFinishedSpans","SimpleSpanProcessor","_unresolvedExports","exportPromise_1","CLOUD_PROVIDER","CLOUD_ACCOUNT_ID","CLOUD_REGION","CLOUD_AVAILABILITY_ZONE","CLOUD_PLATFORM","AWS_ECS_CONTAINER_ARN","AWS_ECS_CLUSTER_ARN","AWS_ECS_LAUNCHTYPE","AWS_ECS_TASK_ARN","AWS_ECS_TASK_FAMILY","AWS_ECS_TASK_REVISION","AWS_EKS_CLUSTER_ARN","AWS_LOG_GROUP_NAMES","AWS_LOG_GROUP_ARNS","AWS_LOG_STREAM_NAMES","AWS_LOG_STREAM_ARNS","CONTAINER_ID","CONTAINER_RUNTIME","CONTAINER_IMAGE_NAME","CONTAINER_IMAGE_TAG","DEPLOYMENT_ENVIRONMENT","DEVICE_ID","DEVICE_MODEL_IDENTIFIER","DEVICE_MODEL_NAME","FAAS_NAME","FAAS_ID","FAAS_VERSION","FAAS_INSTANCE","FAAS_MAX_MEMORY","HOST_ID","HOST_NAME","HOST_TYPE","HOST_ARCH","HOST_IMAGE_NAME","HOST_IMAGE_ID","HOST_IMAGE_VERSION","K8S_CLUSTER_NAME","K8S_NODE_NAME","K8S_NODE_UID","K8S_NAMESPACE_NAME","K8S_POD_UID","K8S_POD_NAME","K8S_CONTAINER_NAME","K8S_REPLICASET_UID","K8S_REPLICASET_NAME","K8S_DEPLOYMENT_UID","K8S_DEPLOYMENT_NAME","K8S_STATEFULSET_UID","K8S_STATEFULSET_NAME","K8S_DAEMONSET_UID","K8S_DAEMONSET_NAME","K8S_JOB_UID","K8S_JOB_NAME","K8S_CRONJOB_UID","K8S_CRONJOB_NAME","OS_TYPE","OS_DESCRIPTION","OS_NAME","OS_VERSION","PROCESS_PID","PROCESS_EXECUTABLE_NAME","PROCESS_EXECUTABLE_PATH","PROCESS_COMMAND","PROCESS_COMMAND_LINE","PROCESS_COMMAND_ARGS","PROCESS_OWNER","PROCESS_RUNTIME_NAME","PROCESS_RUNTIME_VERSION","PROCESS_RUNTIME_DESCRIPTION","SERVICE_NAME","SERVICE_NAMESPACE","SERVICE_INSTANCE_ID","SERVICE_VERSION","TELEMETRY_SDK_NAME","TELEMETRY_SDK_LANGUAGE","TELEMETRY_SDK_VERSION","TELEMETRY_AUTO_VERSION","WEBENGINE_NAME","WEBENGINE_VERSION","WEBENGINE_DESCRIPTION","CloudProviderValues","ALIBABA_CLOUD","AWS","AZURE","GCP","CloudPlatformValues","ALIBABA_CLOUD_ECS","ALIBABA_CLOUD_FC","AWS_EC2","AWS_ECS","AWS_EKS","AWS_LAMBDA","AWS_ELASTIC_BEANSTALK","AZURE_VM","AZURE_CONTAINER_INSTANCES","AZURE_AKS","AZURE_FUNCTIONS","AZURE_APP_SERVICE","GCP_COMPUTE_ENGINE","GCP_CLOUD_RUN","GCP_KUBERNETES_ENGINE","GCP_CLOUD_FUNCTIONS","GCP_APP_ENGINE","AwsEcsLaunchtypeValues","EC2","FARGATE","HostArchValues","AMD64","ARM32","ARM64","IA64","PPC32","PPC64","X86","OsTypeValues","WINDOWS","LINUX","DARWIN","FREEBSD","NETBSD","OPENBSD","DRAGONFLYBSD","HPUX","AIX","SOLARIS","Z_OS","TelemetrySdkLanguageValues","CPP","DOTNET","ERLANG","GO","JAVA","NODEJS","PHP","PYTHON","RUBY","WEBJS","AWS_LAMBDA_INVOKED_ARN","DB_SYSTEM","DB_CONNECTION_STRING","DB_USER","DB_JDBC_DRIVER_CLASSNAME","DB_NAME","DB_STATEMENT","DB_OPERATION","DB_MSSQL_INSTANCE_NAME","DB_CASSANDRA_KEYSPACE","DB_CASSANDRA_PAGE_SIZE","DB_CASSANDRA_CONSISTENCY_LEVEL","DB_CASSANDRA_TABLE","DB_CASSANDRA_IDEMPOTENCE","DB_CASSANDRA_SPECULATIVE_EXECUTION_COUNT","DB_CASSANDRA_COORDINATOR_ID","DB_CASSANDRA_COORDINATOR_DC","DB_HBASE_NAMESPACE","DB_REDIS_DATABASE_INDEX","DB_MONGODB_COLLECTION","DB_SQL_TABLE","EXCEPTION_TYPE","EXCEPTION_MESSAGE","EXCEPTION_STACKTRACE","EXCEPTION_ESCAPED","FAAS_TRIGGER","FAAS_EXECUTION","FAAS_DOCUMENT_COLLECTION","FAAS_DOCUMENT_OPERATION","FAAS_DOCUMENT_TIME","FAAS_DOCUMENT_NAME","FAAS_TIME","FAAS_CRON","FAAS_COLDSTART","FAAS_INVOKED_NAME","FAAS_INVOKED_PROVIDER","FAAS_INVOKED_REGION","NET_TRANSPORT","NET_PEER_IP","NET_PEER_PORT","NET_PEER_NAME","NET_HOST_IP","NET_HOST_PORT","NET_HOST_NAME","NET_HOST_CONNECTION_TYPE","NET_HOST_CONNECTION_SUBTYPE","NET_HOST_CARRIER_NAME","NET_HOST_CARRIER_MCC","NET_HOST_CARRIER_MNC","NET_HOST_CARRIER_ICC","PEER_SERVICE","ENDUSER_ID","ENDUSER_ROLE","ENDUSER_SCOPE","THREAD_ID","THREAD_NAME","CODE_FUNCTION","CODE_NAMESPACE","CODE_FILEPATH","CODE_LINENO","HTTP_METHOD","HTTP_URL","HTTP_TARGET","HTTP_HOST","HTTP_SCHEME","HTTP_STATUS_CODE","HTTP_FLAVOR","HTTP_USER_AGENT","HTTP_REQUEST_CONTENT_LENGTH","HTTP_REQUEST_CONTENT_LENGTH_UNCOMPRESSED","HTTP_RESPONSE_CONTENT_LENGTH","HTTP_RESPONSE_CONTENT_LENGTH_UNCOMPRESSED","HTTP_SERVER_NAME","HTTP_ROUTE","HTTP_CLIENT_IP","AWS_DYNAMODB_TABLE_NAMES","AWS_DYNAMODB_CONSUMED_CAPACITY","AWS_DYNAMODB_ITEM_COLLECTION_METRICS","AWS_DYNAMODB_PROVISIONED_READ_CAPACITY","AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY","AWS_DYNAMODB_CONSISTENT_READ","AWS_DYNAMODB_PROJECTION","AWS_DYNAMODB_LIMIT","AWS_DYNAMODB_ATTRIBUTES_TO_GET","AWS_DYNAMODB_INDEX_NAME","AWS_DYNAMODB_SELECT","AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES","AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES","AWS_DYNAMODB_EXCLUSIVE_START_TABLE","AWS_DYNAMODB_TABLE_COUNT","AWS_DYNAMODB_SCAN_FORWARD","AWS_DYNAMODB_SEGMENT","AWS_DYNAMODB_TOTAL_SEGMENTS","AWS_DYNAMODB_COUNT","AWS_DYNAMODB_SCANNED_COUNT","AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS","AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES","MESSAGING_SYSTEM","MESSAGING_DESTINATION","MESSAGING_DESTINATION_KIND","MESSAGING_TEMP_DESTINATION","MESSAGING_PROTOCOL","MESSAGING_PROTOCOL_VERSION","MESSAGING_URL","MESSAGING_MESSAGE_ID","MESSAGING_CONVERSATION_ID","MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES","MESSAGING_MESSAGE_PAYLOAD_COMPRESSED_SIZE_BYTES","MESSAGING_OPERATION","MESSAGING_CONSUMER_ID","MESSAGING_RABBITMQ_ROUTING_KEY","MESSAGING_KAFKA_MESSAGE_KEY","MESSAGING_KAFKA_CONSUMER_GROUP","MESSAGING_KAFKA_CLIENT_ID","MESSAGING_KAFKA_PARTITION","MESSAGING_KAFKA_TOMBSTONE","RPC_SYSTEM","RPC_SERVICE","RPC_METHOD","RPC_GRPC_STATUS_CODE","RPC_JSONRPC_VERSION","RPC_JSONRPC_REQUEST_ID","RPC_JSONRPC_ERROR_CODE","RPC_JSONRPC_ERROR_MESSAGE","MESSAGE_TYPE","MESSAGE_ID","MESSAGE_COMPRESSED_SIZE","MESSAGE_UNCOMPRESSED_SIZE","DbSystemValues","OTHER_SQL","MSSQL","MYSQL","ORACLE","DB2","POSTGRESQL","REDSHIFT","HIVE","CLOUDSCAPE","HSQLDB","PROGRESS","MAXDB","HANADB","INGRES","FIRSTSQL","EDB","ADABAS","FIREBIRD","DERBY","FILEMAKER","INFORMIX","INSTANTDB","INTERBASE","MARIADB","NETEZZA","PERVASIVE","POINTBASE","SQLITE","SYBASE","TERADATA","VERTICA","H2","COLDFUSION","CASSANDRA","HBASE","MONGODB","REDIS","COUCHBASE","COUCHDB","COSMOSDB","DYNAMODB","NEO4J","GEODE","ELASTICSEARCH","MEMCACHED","COCKROACHDB","DbCassandraConsistencyLevelValues","EACH_QUORUM","QUORUM","LOCAL_QUORUM","ONE","TWO","THREE","LOCAL_ONE","SERIAL","LOCAL_SERIAL","FaasTriggerValues","DATASOURCE","HTTP","PUBSUB","TIMER","OTHER","FaasDocumentOperationValues","INSERT","EDIT","DELETE","FaasInvokedProviderValues","NetTransportValues","IP_TCP","IP_UDP","IP","UNIX","PIPE","INPROC","NetHostConnectionTypeValues","WIFI","WIRED","CELL","UNAVAILABLE","UNKNOWN","NetHostConnectionSubtypeValues","GPRS","EDGE","UMTS","CDMA","EVDO_0","EVDO_A","CDMA2000_1XRTT","HSDPA","HSUPA","HSPA","IDEN","EVDO_B","LTE","EHRPD","HSPAP","GSM","TD_SCDMA","IWLAN","NR","NRNSA","LTE_CA","HttpFlavorValues","HTTP_1_0","HTTP_1_1","HTTP_2_0","SPDY","QUIC","MessagingDestinationKindValues","QUEUE","TOPIC","MessagingOperationValues","RECEIVE","PROCESS","RpcGrpcStatusCodeValues","OK","CANCELLED","INVALID_ARGUMENT","DEADLINE_EXCEEDED","NOT_FOUND","ALREADY_EXISTS","PERMISSION_DENIED","RESOURCE_EXHAUSTED","FAILED_PRECONDITION","ABORTED","OUT_OF_RANGE","UNIMPLEMENTED","INTERNAL","DATA_LOSS","UNAUTHENTICATED","MessageTypeValues","SENT","RECEIVED","formatter","each","child_process","splitPattern","systemRootCertsPath","allTrusted","allRoot","globalAgent","cert","der2","validFormats","forge","packageJson","formats","der","pem","txt","asn1","myASN","pki","pemToDer","crt","fromDer","serial","hasSerial","tagClass","CONTEXT_SPECIFIC","constructed","slicedCrt","issuer","subject","rdn","date","savedTime","toTimeString","toLocaleDateString","txtFormat","certificateFromPem","TypeCompiler","TypeCompilerTypeGuardError","TypeCompilerDereferenceError","TypeCompilerUnknownTypeError","TypeCheck","index_1","Types","ValueErrors","ValueHash","ValueGuard","schema","references","checkFunc","Errors","Check","Character","MemberExpression","DollarSign","IsUnderscore","IsAlpha","IsNumeric","Encode","object","IsFirstCharacterNumeric","IsAccessor","EscapeHyphen","$id","$ref","IsAnyOrUnknown","Kind","IsExactOptionalProperty","TypeSystem","ExactOptionalPropertyTypes","Visit","useHoisting","references_","IsString","schema_","functionName","CreateFunctionName","functions","functionCode","CreateFunction","TUnknown","parameter","accumulator","CreateParameter","IsNumber","minItems","maxItems","elementExpression","CreateExpression","TypeGuard","TSchema","contains","minContains","maxContains","checkCount","Never","uniqueItems","block","TArray","TAsyncIterator","IsBigInt","multipleOf","exclusiveMinimum","exclusiveMaximum","minimum","maximum","TBigInt","TBoolean","returns","TConstructor","exclusiveMinimumTimestamp","exclusiveMaximumTimestamp","minimumTimestamp","maximumTimestamp","TDate","TFunction","TInteger","check1","allOf","unevaluatedProperties","keyCheck","CreateVariable","KeyResolver","ResolvePattern","check2","TIntersect","TIterator","const","TLiteral","TNever","not","TNot","TNull","AllowNaN","IsNumberCheck","TNumber","AllowArrayObjects","IsObjectCheck","minProperties","maxProperties","knownKeys","properties","knownKey","memberExpression","required","ExtendsUndefined","additionalProperties","TObject","TPromise","IsRecordCheck","patternKey","patternSchema","patternProperties","TRecord","findIndex","foreign","TRef","minLength","maxLength","variable","TString","TSymbol","TTemplateLiteral","TThis","TTuple","TUndefined","expressions","anyOf","TUnion","maxByteLength","minByteLength","TUint8Array","AllowVoidNull","IsVoidCheck","TVoid","TypeRegistry","Has","TKind","variables","newline","pad","padStart","CreateReturns","defaults","IsArray","Build","Compile","generatedCode","checkFunction","compiledFunction","Get","FormatRegistry","Hash","ValueErrorType","ValueErrorsDereferenceError","ValueErrorsUnknownTypeError","ValueErrorIterator","IsDefined","IsObject","isNumber","ArrayMinItems","hashed","ArrayUniqueItems","containsSchema","containsCount","ArrayContains","ArrayMinContains","ArrayMaxContains","IsAsyncIterator","AsyncIterator","BigInt","BigIntMultipleOf","BigIntExclusiveMinimum","BigIntExclusiveMaximum","BigIntMinimum","BigIntMaximum","IsBoolean","IsDate","DateExclusiveMinimumTimestamp","DateExclusiveMaximumTimestamp","DateMinimumTimestamp","DateMaximumTimestamp","IsFunction","IsInteger","Integer","IntegerMultipleOf","IntegerExclusiveMinimum","IntegerExclusiveMaximum","IntegerMinimum","IntegerMaximum","inner","Intersect","valueKey","IntersectUnevaluatedProperties","Iterator","Literal","Not","IsNull","NumberMultipleOf","NumberExclusiveMinimum","NumberExclusiveMaximum","NumberMinimum","NumberMaximum","ObjectMinProperties","ObjectMaxProperties","requiredKeys","unknownKeys","ObjectRequiredProperties","requiredKey","ObjectAdditionalProperties","IsPromise","IsRecordObject","regex","propertyKey","propertyValue","propertyPath","StringMinLength","StringMaxLength","StringPattern","StringFormat","StringFormatUnknown","IsSymbol","TupleZeroLength","TupleLength","Undefined","variantErrors","Union","IsUint8Array","Uint8ArrayMaxByteLength","Uint8ArrayMinByteLength","isUndefined","IsUndefined","IsVoid","Void","TypeSystemDuplicateFormat","TypeSystemDuplicateTypeKind","Unsafe","Format","TypeExtendsResult","TypeExtends","TypeClone","IndexedAccessor","ObjectMap","KeyArrayResolver","UnionResolver","TemplateLiteralPattern","TemplateLiteralResolver","TemplateLiteralParser","TemplateLiteralFinite","TemplateLiteralGenerator","TemplateLiteralDslParser","StandardType","ExtendedTypeBuilder","StandardTypeBuilder","TypeBuilder","TemplateLiteralParserError","TypeGuardUnknownTypeError","PatternStringExact","PatternNumberExact","PatternBooleanExact","PatternString","PatternNumber","PatternBoolean","Optional","Readonly","Entries","Clear","IsPattern","IsControlCharacterFree","IsAdditionalProperties","IsOptionalBoolean","IsOptionalBigInt","IsOptionalNumber","IsOptionalString","IsOptionalSchema","TAny","TKindOf","TLiteralString","TLiteralNumber","IsOptionalFormat","additionalItems","TUnsafe","TLiteralBoolean","TUnionLiteral","TReadonly","TOptional","IntoBooleanResult","False","True","IsStructuralRight","StructuralRight","TNeverRight","TIntersectRight","TUnionRight","TUnknownRight","TAnyRight","TBooleanRight","TIntegerRight","UnwrapTNot","Unknown","TNumberRight","IsObjectPropertyCount","IsObjectStringLike","IsObjectArrayLike","IsObjectSymbolLike","IsObjectNumberLike","IsObjectBooleanLike","TObjectRight","IsObjectDateLike","IsObjectConstructorLike","IsObjectFunctionLike","RecordKey","RecordValue","TRecordRight","TStringRight","Resolve","IsArrayOfTuple","Any","IsObjectPromiseLike","VoidRight","TArrayRight","TTupleRight","Extends","ArrayType","ObjectType","Clone","OptionalUnwrap","ResolveOptional","optional","IsIntersectOptional","ResolveIntersect","IsUnionOptional","ResolveUnion","indexed","sets","outer","includePatterns","ResolveKeys","UnwrapPattern","ParseExact","Generate","union","kinds","template","literals","IsNonEscaped","IsOpenParen","IsCloseParen","IsSeparator","Parse","IsGroup","InGroup","IsPrecedenceOr","expr","Or","IsPrecedenceAnd","Group","scan","And","Reduce","Const","ParseUnion","literal","ParseTerminal","L","ParseLiteral","template_dsl","TypeOrdinal","Discard","rest","Strict","ReadonlyOptional","Capitalize","Composite","intersect","Index","trueType","falseType","Exclude","unionType","excludedMembers","narrowed","Extract","unresolved","cloned","clonedUnevaluatedProperties","KeyOf","Lowercase","propertyKeys","optionalKeys","clonedAdditionalProperties","clonedProperties","Omit","Partial","Pick","Record","Recursive","thisType","Ref","Required","Rest","TemplateLiteral","Tuple","clonedItems","Uncapitalize","toLocaleLowerCase","clonedAnyOf","Uppercase","Awaited","AwaitedRest","ConstructorParameters","clonedReturns","clonedParameters","InstanceType","Parameters","RegEx","ReturnType","IsValueType","IsPlainObject","HasPropertyKey","IsTypedArray","IsIterator","asyncIterator","ByteMarker","ValueHashError","Accumulator","Prime","Size","Bytes","F64","Float64Array","F64In","DataView","F64Out","FNV1A64","BooleanType","setBigInt64","byte","BigIntType","DateType","setFloat64","NumberType","StringType","SymbolType","Uint8ArrayType","promisify_1","isSecureEndpoint","createAgent","maxFreeSockets","maxSockets","maxTotalSockets","sockets","freeSockets","requests","defaultPort","explicitDefaultPort","explicitProtocol","addRequest","secureEndpoint","_defaultAgent","_last","shouldKeepAlive","timedOut","timeoutId","timeoutMs","onerror","_hadError","ontimeout","callbackError","onsocket","freeSocket","onSocket","promisifiedCallback","rtn","AsyncScopeManager","OpenTelemetryScopeManagerWrapper","CorrelationContextManager_1","CorrelationContextManager","getCurrentContext","_activeSymbol","correlationContext","_spanToContext","runWithContext","wrapCallback","wrapEmitter","aiContext","spanToContextObject","AzureFunctionsHook","Logging","_client","_autoGenerateIncomingRequests","_functionsCoreModule","funcProgModel","getProgrammingModel","_addPreInvocationHook","_addPostInvocationHook","isEnabled","_removeInvocationHooks","_preInvocationHook","registerHook","preInvocationContext","extractedContext","invocationContext","startOperation","customProperties","setProperty","invocationId","traceContext","functionCallback","_isHttpTrigger","hookData","appInsightsExtractedContext","appInsightsStartTime","_postInvocationHook","postInvocationContext","request_1","startTime_1","response_1","extractedContext_1","inputs","_getAzureFunctionResponse","_createIncomingRequestTelemetry","parsedVal","trackRequest","resultCode","httpOutputBinding","bindingDefinitions","direction","bindings","DiagChannel","AutoCollectConsole","INSTANCE","collectConsoleLog","IsInitialized","isInitialized","_isInitialized","_methodNames","Traceparent","Tracestate","HttpRequestParser","Util","CONTEXT_NAME","generateContextObject","operationId","operationName","correlationContextHeader","traceparent","tracestate","CustomPropertiesImpl","traceFlag","formatOpenTelemetryTraceFlags","DEFAULT_TRACE_FLAG","dumpObj","bindEmitter","forceClsHooked","isNodeVersionCompatible","hasEverEnabled","cls","shouldUseClsHooked","createNamespace","registerContextPreservation","azureFnRequest","parser","getCorrelationContextHeader","getOperationName","nodeVer","canUseClsHooked","greater800","less820","greater470","addHeaderData","keyvals","keyval","serializeToHeader","getProperty","bannedCharacters","AutoCollectExceptions","_canUseUncaughtExceptionMonitor","_exceptionListenerHandle","reThrow","_FALLBACK_ERROR_MESSAGE","exceptionTelemetry","contextObjects","trackException","isAppCrashing","UNCAUGHT_EXCEPTION_MONITOR_HANDLER_NAME","UNCAUGHT_EXCEPTION_HANDLER_NAME","_rejectionListenerHandle","UNHANDLED_REJECTION_HANDLER_NAME","_RETHROW_EXIT_MESSAGE","crypto","Constants","Context","HeartBeat","_collectionInterval","_isEnabled","_handle","trackHeartBeat","sdkVersion","_uniqueProcessId","WEBSITE_SITE_NAME","WEBSITE_HOME_STAMPNAME","WEBSITE_HOSTNAME","WEBSITE_OWNER_NAME","WEBSITE_RESOURCE_GROUP","WEBSITE_SLOT_NAME","trackMetric","HeartBeatMetricName","__spreadArrays","il","jl","RequestResponseHeaders","HttpDependencyParser","CorrelationIdManager","AutoCollectHttpDependencies","_initialize","originalRequest","originalHttpsRequest","clientRequestPatch","shouldCollect","disableCollectionRequestOption","alreadyAutoCollectedFlag","userAgentHeader","w3cEnabled","generateRequestId","getRootId","requestArgs","uniqueRequestId","uniqueTraceparent","requestParser","currentContext","updateSpanId","getBackCompatRequestId","requestNumber","canIncludeCorrelationHeader","getUrl","correlationId","correlationHeader","requestContextHeader","safeIncludeCorrelationHeader","requestIdHeader","ignoreLegacyHeaders","parentIdHeader","rootIdHeader","isProcessed","onResponse","dependencyTelemetry","getDependencyTelemetry","trackDependency","Contracts","RequestParser","_getUrlFromRequestOptions","_setStatus","getCorrelationContextTarget","requestContextTargetKey","baseTelemetry","dependencyId","dependencyName","remoteDependencyType","RemoteDependencyDataConstants","TYPE_HTTP","remoteDependencyTarget","urlObject","TYPE_AI","correlationIdPrefix","_isSuccess","dependencyTypeName","originalOptions_1","parsedQuery","_getAbsoluteUrl","socketRemoteAddress","remoteAddress","parseHeaders","connectionRemoteAddress","legacySocketRemoteAddress","ellapsedMilliseconds","getRequestTelemetry","requestTelemetry","sourceCorrelationId","getRequestTags","newTags","locationIp","_getIp","sessionId","_getId","userId","userAuthUserId","operationParentId","getOperationParentId","getOperationId","pathName","getRequestId","getTraceparent","getTracestate","getLegacyRootId","legacyRootId","encrypted","baseUrl","requestUrl","ipMatch","ip","cookie","parseId","getCookie","setBackCompatFromThisTraceContext","requestContextSourceKey","tracestateHeader","legacy_parentId","legacy_rootId","cookieValue","cookieParts","ContextTagKeys","AutoCollectPerformance","AutoCollectHttpRequests","_isAutoCorrelating","useAutoCorrelation","isAutoCorrelating","_generateCorrelationContext","_registerRequest","HANDLER_READY","wrapOnRequestHandler","wrapServerEventHandler","originalAddListener","eventType","eventHandler","originalHttpServer","param1","param2","originalHttpsServer","trackRequestSync","addResponseCorrelationIdHeader","endRequest","_requestParser","headersSent","tagOverrides","AutoCollectNativePerformance","_disabledMetrics","disabledMetrics","collectionInterval","_metricsAvailable","NativeMetricsEmitters","_trackNativeMetrics","parseEnabled","collectExtendedMetrics","customConfig","disableAll","disableAllExtendedMetrics","individualOptOuts","extendedMetricDisablers","optOutsArr","optOutsArr_1","shouldSendAll","_trackGarbageCollection","_trackEventLoop","_trackHeapUsage","gc","gcData","getGCData","name_1","stdDev","sqrt","sumSquares","total","internalSdkVersion","loop","getLoopData","loopUsage","memoryUsage","heapUsed","heapTotal","rss","NetworkStatsbeat","endpoint","totalRequestCount","totalSuccesfulRequestCount","totalFailedRequestCount","exceptionCount","throttleCount","intervalRequestExecutionTime","lastIntervalRequestExecutionTime","lastTime","lastRequestCount","enableLiveMetricsCounters","_lastIntervalRequestExecutionTime","_lastIntervalDependencyExecutionTime","_lastRequests","_lastDependencies","totalDependencyCount","totalFailedDependencyCount","_lastExceptions","totalExceptionCount","_enableLiveMetricsCounters","_lastCpus","cpus","_totalRequestCount","_totalFailedRequestCount","_totalDependencyCount","_totalFailedDependencyCount","_totalExceptionCount","cpuUsage","_lastAppCpuUsage","_lastHrtime","hrtime","trackPerformance","countRequest","durationMs","_intervalRequestExecutionTime","countException","countDependency","_intervalDependencyExecutionTime","_trackCpu","_trackMemory","_trackNetwork","_trackDependencyRate","_trackExceptionRate","totalUser","totalSys","totalNice","totalIdle","totalIrq","cpu","lastCpu","times","model","speed","lastTimes","user","sys","nice","idle","irq","appCpuPercent","appCpuUsage","totalApp","system","combinedTotal","PerformanceCounter","PROCESSOR_TIME","PROCESS_TIME","freeMem","freemem","usedMem","committedMemory","totalmem","PRIVATE_BYTES","AVAILABLE_BYTES","QuickPulseCounter","COMMITTED_BYTES","lastRequests","intervalRequests","intervalFailedRequests","elapsedMs","elapsedSeconds","averageRequestExecutionTime","requestsPerSec","failedRequestsPerSec","REQUEST_RATE","REQUEST_DURATION","REQUEST_FAILURE_RATE","lastDependencies","dependencies","intervalDependencies","intervalFailedDependencies","averageDependencyExecutionTime","dependenciesPerSec","failedDependenciesPerSec","DEPENDENCY_RATE","DEPENDENCY_FAILURE_RATE","DEPENDENCY_DURATION","lastExceptions","exceptions","intervalExceptions","exceptionsPerSec","EXCEPTION_RATE","AggregatedMetricCounters_1","AggregatedMetricDimensions_1","AutoCollectPreAggregatedMetrics","_dependencyCountersCollection","_requestCountersCollection","_exceptionCountersCollection","_traceCountersCollection","trackPreAggregatedMetrics","dimensions","_getAggregatedCounter","totalCount","countTrace","intervalExecutionTime","_trackRequestMetrics","_trackDependencyMetrics","_trackExceptionMetrics","_trackTraceMetrics","counterCollection","notMatch","dim","newCounter","AggregatedMetricCounter","currentCounter","lastTotalCount","lastIntervalExecutionTime","_trackPreAggregatedMetric","aggregationInterval","metricType","MetricId","REQUESTS_DURATION","DEPENDENCIES_DURATION","EXCEPTIONS_COUNT","intervalTraces","TRACES_COUNT","metric","metricProperties","PreaggregatedMetricPropertyNames","EnvelopeFactory","Sender","Vm","Config","Network","Statsbeat","_attach","StatsbeatAttach","sdk","_feature","StatsbeatFeature","_instrumentation","StatsbeatInstrumentation","_statbeatMetrics","_networkStatsbeatCollection","statsbeatConnectionString","_getConnectionString","_statsbeatConfig","samplingPercentage","_sender","_shutdownStatsbeat","_getCustomProperties","trackShortIntervalStatsbeats","STATS_COLLECTION_SHORT_INTERVAL","_longHandle","trackLongIntervalStatsbeats","STATS_COLLECTION_LONG_INTERVAL","setCodelessAttach","codeless","addFeature","feature","removeFeature","addInstrumentation","instrumentation","removeInstrumentation","_getNetworkStatsbeatCounter","currentStatusCounter","statusCounter","exceptionType","currentErrorCounter","exceptionCounter","countThrottle","countRetry","networkProperties","error_1","_getResourceProvider","_os","_resourceProvider","_cikey","_runtimeVersion","_language","_sdkVersion","_trackRequestDuration","_trackRequestsCount","_sendStatsbeats","TAG","commonProperties","attachProperties","instrumentationProperties","featureProperties","error_2","_resourceIdentifier","StatsbeatCounter","ATTACH","StatsbeatFeatureType","Instrumentation","FEATURE","Feature","shortHost","_getShortHost","totalRequestExecutionTime","originalHost","_loop_1","this_1","REQUEST_SUCCESS","REQUEST_FAILURE","RETRY_COUNT","THROTTLE_COUNT","EXCEPTION_COUNT","envelopes","statsbeat","envelope","createEnvelope","TelemetryType","Metric","StatsbeatTelemetryName","instrumentationKey","waiting","StatsbeatResourceProvider","unknown","appsvc","FUNCTIONS_WORKER_RUNTIME","_isVM","AzureVirtualMachine","getAzureComputeMetadata","vmInfo","isVM","vm","subscriptionId","osType","currentEndpoint","endpointUrl","euEndpoints","EU_CONNECTION_STRING","NON_EU_CONNECTION_STRING","zlib","snippetInjectionHelper","prefixHelper","ConnectionStringParser","applicationinsights_web_snippet_1","WebSnippet","_isIkeyValid","_aiUrl","WEB_INSTRUMENTATION_DEFAULT_SOURCE","_aiDeprecatedUrl","WEB_INSTRUMENTATION_DEPRECATED_SOURCE","clientWebIkey","_getWebSnippetIkey","webInstrumentationConnectionString","_webInstrumentationIkey","_clientWebInstrumentationConfig","webInstrumentationConfig","_clientWebInstrumentationSrc","webInstrumentationSrc","_statsbeat","getStatsbeat","_snippet","_getWebInstrumentationReplacedStr","WEB_SNIPPET","connectionString","iKey","iKeyCode","instrumentationkey","isIkeyValid","configStr","_getClientWebInstrumentationConfigStr","osStr","getOsPrefix","rpStr","getResourceProvider","snippetReplacedStr","replacedSnippet","requestListener","originalRequestListener","originalResponseWrite","isGetRequest","getContentEncodingFromHeaders","writeBufferType","ValidateInjection","InjectWebSnippet","encodeType","originalResponseEnd","endBufferType","httpsRequestListener","originalHttpsRequestListener","isGetHttpsRequest","originalHttpsResponseWrite","originalHttpsResponseEnd","isContentTypeHeaderHtml","inputStr","bufferEncodeType","removeHeader","_getInjectedCompressBuffer","html","newHtml","insertSnippetByIndex","bufferType","isBufferType","encodedString","contentEncodingMethod","GZIP","gunzipBuffer","gunzipSync","injectedGunzipBuffer","gzipSync","DEFLATE","inflateBuffer","inflateSync","injectedInflateBuffer","deflateSync","BR","BrotliDecompressSync","getBrotliDecompressSync","BrotliCompressSync","getBrotliCompressSync","decompressBuffer","parseEventHubSpan","core_1","semantic_conventions_1","Constants_1","AzNamespace","peerAddress","messageBusDestination","MessageBusDestination","CLIENT","PRODUCER","DependencyTypeName","QueueMessage","CONSUMER","measurements","TIME_SINCE_ENQUEUED","countEnqueueDiffs","sumEnqueueDiffs","startTimeMs","enqueuedTime","ENQUEUED_TIME","parseFloat","getTimeSinceEnqueued","spanToTelemetryContract","EventHub_1","httpUrl","httpScheme","httpTarget","httpHost","netPeerPort","netPeerName","netPeerIp","getDependencyTarget","peerService","remoteDependency","InProc","httpMethod","dbSystem","rpcSystem","Http","httpStatusCode","isSqlDB","dbStatement","dbOperation","dbName","Grpc","grpcStatusCode","createDependencyData","SERVER","requestData","httpRoute","createRequestData","operation_Id","createPropertiesFromSpan","MicrosoftEventHub","diagnostic_channel_1","SpanParser","AsyncHooksScopeManager_1","clients","span_1","telemetry_1","channel","subscribe","trueFilter","AZURE_CORE_TRACING","unsubscribe","Contracts_1","bunyanToAILevelMap","SeverityLevel","Critical","subscriber","AIlevel","bunyanError","enableLoggerErrorToTrace","trackTrace","BUNYAN","lastIndexOf","CONSOLE","JsonConfig_1","JsonConfig","noDiagnosticChannel","publishers","unpatchedModules","noPatchModules","modules","bunyan","mongodb","mongodbCore","mysql","redis","pg","pgPool","winston","azuresdk","addContextPreservation","commandName","startedData","databaseName","succeeded","queryObj","query","sqlString","sql","connectionConfig","socketPath","q","preparable","plan","database","POSTGRES","commandObj","address","winstonToAILevelMap","syslog","og","emerg","alert","crit","notice","npm","silly","levelKind","WINSTON","StatsbeatNetworkCategory","TelemetryTypeStringToQuickPulseDocumentType","TelemetryTypeStringToQuickPulseType","QuickPulseType","QuickPulseDocumentType","PerformanceToQuickPulseCounter","DEFAULT_LIVEMETRICS_HOST","DEFAULT_LIVEMETRICS_ENDPOINT","DEFAULT_BREEZE_ENDPOINT","APPLICATION_INSIGHTS_SDK_VERSION","Exception","Dependency","Availability","PageView","EventData","ExceptionData","MessageData","MetricData","RequestData","RemoteDependencyData","AvailabilityData","PageViewData","Sql","domainSupportsProperties","Generated_1","domain","ver","applicationVersion","deviceId","deviceLocale","deviceModel","deviceOEMName","deviceOSVersion","deviceType","operationSyntheticSource","operationCorrelationVector","sessionIsFirst","userAccountId","cloudRole","cloudRoleInstance","internalAgentVersion","internalNodeName","Data","DataPointType","Measurement","sampleRate","hasFullStack","parsedStack","DataPoint","Domain","Envelope","ExceptionDetails","StackFrame","TelemetryTypeString","baseTypeToTelemetryType","telemetryTypeToBaseType","baseType","cloudRoleName","operationSynthetic","requestSuccess","requestResultCode","dependencyType","dependencyTarget","dependencySuccess","dependencyResultCode","traceSeverityLevel","azureCore","emptySendRequest","_request","AuthorizationHandler","_azureTokenPolicy","addAuthorizationHeader","authHeaderName","webResource","AIMS_URI","virtualMachineData_1","_requestTimedOut","HTTP_TIMEOUT","Channel","isDisabled","getBatchSize","getBatchIntervalMs","_buffer","_lastSend","_isDisabled","_getBatchSize","_getBatchIntervalMs","setUseDiskRetryCaching","resendInterval","maxBytesOnDisk","setDiskRetryMode","triggerSend","_timeoutHandle","isNodeCrashing","bufferIsEmpty","isNodeExit","saveOnCrash","setupString","_endpointBase","_mergeConfig","connectionStringEnv","_connectionString","csCode","csEnv","instrumentationKeyEnv","_instrumentationKey","ingestionendpoint","maxBatchSize","maxBatchIntervalMs","disableAppInsights","correlationIdRetryIntervalMs","enableWebInstrumentation","enableAutoWebSnippetInjection","correlationHeaderExcludedDomains","profileQueryEndpoint","ENV_profileQueryEndpoint","quickPulseHost","liveendpoint","ENV_quickPulseHost","_webInstrumentationConnectionString","webSnippetConnectionString","_profileQueryEndpoint","_validateInstrumentationKey","jsonConfig","disableStatsbeat","distributedTracingMode","enableAutoCollectConsole","enableAutoCollectDependencies","enableAutoCollectIncomingRequestAzureFunctions","enableAutoCollectExceptions","enableAutoCollectExtendedMetrics","enableAutoCollectExternalLoggers","enableAutoCollectHeartbeat","enableAutoCollectPerformance","enableAutoCollectPreAggregatedMetrics","enableAutoCollectRequests","enableAutoDependencyCorrelation","enableInternalDebugLogging","enableInternalWarningLogging","enableResendInterval","enableMaxBytesOnDisk","enableSendLiveMetrics","enableUseAsyncHooks","enableUseDiskRetryCaching","proxyHttpUrl","proxyHttpsUrl","ENV_azurePrefix","ENV_iKey","legacy_ENV_iKey","_FIELDS_SEPARATOR","kv","kvParts","_FIELD_KEY_VALUE_SEPARATOR","endpointsuffix","locationPrefix","packageJsonPath","_loadApplicationContext","_loadDeviceContext","_loadInternalContext","__dirname","appVersion","readFileSync","DefaultRoleName","WEBSITE_INSTANCE_ID","arch","queryCorrelationId","cancelCorrelationIdQuery","suffix","currentRootId","appendSuffix","generateRootId","endIndex","w3cTraceId","requestIdMaxLength","trimPosition","randomu32","telemetryType","createTraceData","createEventData","createExceptionData","createMetricData","createAvailabilityData","createPageViewData","baseData","addAzureFunctionsCorrelationProperties","validateStringMap","getTags","truncateProperties","propertiesKeys","propertiesValues","isDate","severityLevel","msToTimeSpan","exceptionDetails","typeName","parseStack","responseCode","Aggregation","availabilityData","runLocation","pageViewData","frames","totalSizeInBytes","frame","_StackFrame","parsedFrame","sizeInBytes","acceptedLeft","acceptedRight","howMany","assembly","matches","fileName","baseSize","FileAccessControl","checkFileProtection","OS_PROVIDES_FILE_PROTECTION","OS_FILE_PROTECTION_CHECKED","USE_ICACLS","ICACLS_PATH","applyACLRules","directory","identity","ex_1","ACLED_DIRECTORIES","_getACLIdentity","_runICACLS","_getACLArguments","applyACLRulesSync","_runICACLSSync","_getACLIdentitySync","aclProc","spawn","windowsHide","ACL_IDENTITY","psProc","POWERSHELL_PATH","stdio","systemdrive","getShallowFileSize","getShallowDirectorySizeSync","getShallowDirectorySize","confirmDirExists","unlinkAsync","readdirAsync","readFileAsync","writeFileAsync","appendFileAsync","accessAsync","mkdirAsync","lstatAsync","statAsync","stat","lstat","mkdir","access","appendFile","writeFile","readFile","readdir","unlink","err_1","mkdirErr_1","isDirectory","files","totalSize","files_1","fileStats","isFile","readdirSync","statSync","filePath","FileSystemHelper","InternalAzureLogger","_cleanupTimeOut","_logToFile","_logToConsole","logDestination","APPLICATIONINSIGHTS_LOG_DESTINATION","maxSizeBytes","maxHistory","_logFileName","logFilePath","APPLICATIONINSIGHTS_LOGDIR","_tempDir","_fileFullPath","_backUpNameFormat","_fileCleanupTimer","_fileCleanupTask","optionalParams","_storeToDisk","appendError_1","err_3","F_OK","_createBackupFile","backupPath","err_4","totalFiles","pathToDelete","err_5","basename","aCreationDate","bCreationDate","ENV_instrumentationKey","ENV_legacyInstrumentationKey","noHttpAgentKeepAlive","_loadJsonFile","rootPath","tempDir","configFile","enableDebug","disableWarnings","TelemetryClient","ServerRequestTracking","ClientRequestTracking","NodeClient","trackNodeHttpRequestSync","trackNodeHttpRequest","trackNodeHttpDependency","isFunctionApp","isWebApp","isLinux","StreamId","QuickPulseEnvelopeFactory","createQuickPulseEnvelope","documents","machineName","roleName","Documents","InstrumentationKey","Metrics","InvariantVersion","Timestamp","Version","MachineName","Instance","RoleName","createQuickPulseMetric","Name","Weight","telemetryEnvelopeToQuickPulseDocument","createQuickPulseEventDocument","createQuickPulseExceptionDocument","createQuickPulseTraceDocument","createQuickPulseDependencyDocument","createQuickPulseRequestDocument","createQuickPulseDocument","exceptionMessage","ExceptionMessage","ExceptionType","Success","Duration","ResponseCode","OperationName","Target","ResultCode","CommandName","OperationId","documentType","__type","DocumentType","Properties","aggregateProperties","meas","QuickPulseUtil","QuickPulseConfig","QuickPulseSender","getAuthorizationHandler","_consecutiveErrors","_getAuthorizationHandler","ping","redirectedHostEndpoint","pingHeaders","_submitData","post","postOrPing","additionalHeaders","payload","authHandler","authError_1","getTransmissionTime","tlsRestrictedAgent","shouldPOSTData","redirectHeader","_onError","pollingIntervalHint","MAX_QPS_FAILURES_BEFORE_WARN","QuickPulseStateManager","_isCollectingData","_lastSuccessTime","_lastSendSucceeded","_metrics","_documents","_collectors","_redirectedHost","_pollingIntervalHint","addCollector","collector","_addMetric","addDocument","document_1","_goQuickPulse","enableCollectors","_resetQuickPulseBuffer","pingInterval","currentTimeout","_post","_ping","PING_INTERVAL","POST_INTERVAL","MAX_POST_WAIT_TIME","FALLBACK_INTERVAL","MAX_PING_WAIT_TIME","_quickPulseDone","shouldPOST","redirectedHost","FileAccessControl_1","RESPONSE_CODES_INDICATING_REACHED_BREEZE","onSuccess","isStatsbeatSender","shutdownStatsbeat","_onSuccess","_enableDiskRetryMode","_resendInterval","WAIT_BETWEEN_RESEND","_maxBytesOnDisk","MAX_BYTES_ON_DISK","_numConsecutiveFailures","_numConsecutiveRedirects","_resendTimer","TEMPDIR_PREFIX","_isStatsbeatSender","_failedToIngestCounter","_statsbeatHasReachedIngestionAtLeastOnce","_logWarn","DISK_RETRY","CLEANUP_TIMEOUT","endpointHost","errorMsg","batch_1","payload_1","AAD_HANDLING","gzip","dataToSend","_logInfo","setEncoding","responseString","_statsbeatFailedToIngest","Breeze","_sendFirstFileOnDisk","_isRetriable","breezeResponse","filteredEnvelopes_1","MAX_CONNECTION_FAILURES_BEFORE_WARN","_onErrorHelper","_storeToDiskSync","ex_2","ex_3","fileFullPath","ex_4","mode","mkdirSync","dirSize","writeFileSync","firstFile","fileCreationDate","err_2","FILE_RETEMPTION_PERIOD","isSupportedContentEncoding","findBufferEncodingType","getBrotliDecompressAsync","getBrotliCompressAsync","inflateAsync","deflateAsync","gunzipAsync","gzipAsync","isBrotliSupperted","bufferEncodingTypes","majVer","gunzip","deflate","zlibObject","brotliCompress","brotliCompressSync","brotliDecompress","brotliDecompressSync","encodingType","isEncoding","encodingMethod","contentEncodingHeaders","supportedContentEncoding","snippet","isHtml","TelemetryProcessors","_telemetryProcessors","authorizationHandler","trackAvailability","track","trackPageView","trackEvent","accepted","runTelemetryProcessors","samplingTelemetryProcessor","preAggregatedMetricsTelemetryProcessor","performanceMetricsTelemetryProcessor","quickPulseClient","setAutoPopulateAzureProperties","aadTokenCredential","addTelemetryProcessor","telemetryProcessor","clearTelemetryProcessors","telemetryProcessorsCount","processor","DEFAULT_VERSION","traceparentArr","formattedFlags","fieldmap","parseHeader","fieldarr","validateKeyChars","keyParts","tenant","vendor","tenantValid","vendorValid","keydeduper","parts_1","strict","_addCloseHandler","cookieName","cookies","int32ArrayToBase64","toChar","fromCharCode","random32","hexValues","oct","clockSequenceHi","w3cSpanId","isValidW3CId","propType","totalms","sec","toFixed","hour","days","extractError","looseError","extractObject","origProperty","stringTarget","MAX_PROPERTY_LENGTH","excludedDomains","contextHeaders","keyValues","keyValue","requestCallback","useProxy","useAgent","requestUrlParsed","proxyUrlParsed","Host","isHttps","_useKeepAlive","keepAliveAgent","addCorrelationIdHeaderFromString","objectTypeDump","components","_listenerAttached","secureOptions","SSL_OP_NO_SSLv2","SSL_OP_NO_SSLv3","SSL_OP_NO_TLSv1","SSL_OP_NO_TLSv1_1","azureRoleEnvironmentTelemetryProcessor","remoteDependencyData","AutoCollecPreAggregatedMetrics","exceptionData","exceptionDimensions","traceData","traceDimensions","requestDimensions","dependencyDimensions","getSamplingHashCode","csharpMax","abs","Configuration","wrapWithCorrelationContext","getCorrelationContext","setup","liveMetricsClient","defaultClient","DistributedTracingModes","QuickPulseClient","NativePerformance_1","AzureFunctionsHook_1","azureFunctionsTypes","_forceClsHooked","_disabledExtendedMetrics","_console","_exceptions","_performance","_preAggregatedMetrics","_heartbeat","_webSnippet","_nativePerformance","_serverRequests","_clientRequests","_azureFunctions","_performanceLiveMetrics","defaultConfig","_isConsole","_isConsoleLog","_isLoggerErrorToTrace","_isExceptions","_isPerformance","_isPreAggregatedMetrics","_isHeartBeat","_isRequests","_isDependencies","_isDiskRetry","_isCorrelating","_isSendingLiveMetrics","_isNativePerformance","_isSnippetInjection","_isAzureFunctions","_diskRetryInterval","_diskRetryMaxBytes","_webSnippetConnectionString","_isStarted","extendedMetricsConfig","_initializeConfig","setDistributedTracingMode","AI_AND_W3C","setAutoCollectConsole","setAutoCollectExceptions","setAutoCollectPerformance","setAutoCollectPreAggregatedMetrics","setAutoCollectHeartbeat","WebSnippetConnectionString","setAutoCollectRequests","setAutoCollectDependencies","setAutoDependencyCorrelation","useAsyncHooks","setInternalLogging","enableDebugLogging","enableWarningLogging","setAutoCollectIncomingRequestAzureFunctions","setSendLiveMetrics","asyncWrap","binding","TIMERWRAP","Providers","patchs","ignoreUIDs","State","Hooks","initFns","preFns","postFns","destroyFns","uid","parentUid","parentHandle","hook","pre","didThrow","removeElement","AsyncHook","_hooks","providers","setupHooks","hooks","addHooks","removeHooks","_asyncHook","callSite","filename","getFileName","NextTickWrap","oldNextTick","nextTick","listenerCount","PromiseWrap","oldThen","makeWrappedHandler","isOnFulfilled","makeUnhandledResolutionHandler","makeUnhandledRejectionHandler","onFulfilled","onRejected","timers","TimeoutWrap","IntervalWrap","ImmediateWrap","timeoutMap","intervalMap","ImmediateMap","activeCallback","clearedInCallback","patchTimer","setFn","clearFn","Handle","timerMap","singleCall","oldSetFn","oldClearFn","ensureAslWrapper","executor","asyncCatcher","wrap","inAsyncTick","listenerStack","dest","destLength","addedLength","returned","missing","_fatalException","errorValues","inErrorTick","handled","before","after","errorThrew","threw","_originalNextTick","AsyncListener","createAsyncListener","addAsyncListener","registered","removeAsyncListener","simpleWrap","shimmer","massWrap","util","v6plus","v7plus","v8plus","v11plus","net","wrapSetUpListenHandle","onread","onconnection","patchOnRead","_originalOnread","_normalizeArgs","_normalizeConnectArgs","Server","Socket","childProcess","wrapChildProcess","activatorFirst","onexit","ChildProcess","processors","_nextDomainTick","_tickDomainCallback","activator","asynchronizers","patchGlobalTimers","dns","resolveNaptr","lchown","lchmod","ftruncate","Deflate","toWrap","instrumentPromise","promiseListener","fallback","cbIdx","wrappedPromise","__asl_wrapper","propagateAslWrapper","nextResult","returnVal","errorVal","wrapThen","inherits","chain","wrapPromise","defaultResult","rangeTmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","compRe","parallel","serialOrdered","jobs","defer","isAsync","runJob","sortMethod","isNamedList","initState","keyedList","iterate","terminator","ascending","iteratorHandler","descending","fileURLToPath","dirname","exists","accessSync","arrow","NODE_BINDINGS_ARROW","compiled","NODE_BINDINGS_COMPILED_DIR","nodePreGyp","try","module_root","extname","requireFunc","tries","calling_file","origPST","prepareStackTrace","origSTL","stackTraceLimit","dummy","st","captureStackTrace","getRoot","assert","asyncHook","CONTEXTS_SYMBOL","ERROR_SYMBOL","invertedProviders","DEBUG_CLS_HOOKED","currentUid","_set","getNamespace","destroyNamespace","debug2","_rawDebug","getFunctionName","enter","createContext","_ns_name","run","runAndReturn","runPromise","thisSymbol","unwrapped","wrapped","unwrappedContexts","fromException","stackChain","modifier","_modifiers","deattach","async_hooks","_indent","createHook","asyncId","triggerId","executionAsyncId","showHidden","colors","triggerAsyncId","triggerIdContext","asyncHooksCurrentId","indentStr","currentId","Stream","DelayedStream","CombinedStream","dataSize","maxDataSize","pauseStreams","_released","_streams","_currentStream","_insideLoop","_pendingNext","combinedStream","option","isStreamLike","newStream","pauseStream","_checkDataSize","_handleErrors","pause","_getNext","_realGetNext","_pipeNext","_emitError","_reset","_updateDataSize","storage","CryptoJS","C","BlockCipher","lib","C_algo","algo","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","x2","x4","x8","RCON","AES","_doReset","_nRounds","_keyPriorReset","keyWords","words","keySize","sigBytes","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","encryptBlock","_doCryptBlock","decryptBlock","nRounds","s0","s1","s2","s3","t0","t1","t2","t3","_createHelper","C_lib","WordArray","BufferedBlockAlgorithm","C_enc","Base64","EvpKDF","Cipher","C_mode","BlockCipherMode","CBC","Pkcs7","CipherParams","OpenSSLFormatter","SerializableCipher","OpenSSLKdf","PasswordBasedCipher","enc","Utf8","cfg","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","dataUpdate","_append","_process","finalize","_doFinalize","ivSize","selectCipherStrategy","cipher","encrypt","decrypt","ciphertext","StreamCipher","blockSize","iv","Encryptor","Decryptor","_cipher","_iv","xorBlock","_prevBlock","processBlock","thisBlock","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","modeCreator","_minBufferSize","_mode","__creator","_doProcessBlock","finalProcessedBlocks","cipherParams","mixIn","OpenSSL","salt","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","kdf","execute","compute","derivedParams","msCrypto","cryptoSecureRandomInt","getRandomValues","readInt32LE","F","subtype","overrides","$super","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","hexChars","bite","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","escape","utf8Str","unescape","_nDataBytes","doFlush","processedWords","dataWords","dataSigBytes","nBlocksReady","nWordsReady","nBytesReady","Hasher","messageUpdate","hasher","_createHmacHelper","HMAC","base64Chars","triplet","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","bitsCombined","parseLoop","Base64url","urlSafe","_safe_map","swapEndian","word","Utf16","Utf16BE","utf16Chars","codePoint","utf16Str","utf16StrLength","Utf16LE","MD5","iterations","derivedKey","derivedKeyWords","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","_iKey","oKeyWords","iKeyWords","innerHash","superInit","subInit","Int8Array","Uint8ClampedArray","Int16Array","Float32Array","typedArrayByteLength","T","sin","_hash","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","HmacMD5","CFB","generateKeystreamAndEncrypt","keystream","CTRGladman","incWord","b1","b2","b3","incCounter","CTR","ECB","OFB","_keystream","AnsiX923","lastBytePos","Ansix923","Iso10126","Iso97971","ZeroPadding","NoPadding","SHA1","PBKDF2","hmac","blockIndex","blockIndexWords","blockWords","blockWordsLength","intermediate","intermediateWords","S","C_","G","RabbitLegacy","K","X","_X","_C","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","gx","ga","gb","gh","gl","Rabbit","RC4","keySigBytes","_S","keyByteIndex","keyByte","generateKeystreamWord","keystreamWord","RC4Drop","drop","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","al","bl","cl","dl","el","br","cr","dr","hl","zl","zr","sl","sr","f1","f2","f3","f4","f5","rotl","HmacRIPEMD160","W","HmacSHA1","SHA256","SHA224","HmacSHA224","isPrime","sqrtN","factor","getFractionalBits","nPrime","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","HmacSHA256","X64Word","x64","Word","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","newY","LFSR","roundConstantMsw","roundConstantLsw","bitPosition","SHA3","outputLength","nBlockSizeLanes","M2i","M2i1","lane","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","HmacSHA3","C_x64","X64WordArray","SHA512","SHA384","HmacSHA384","X64Word_create","H0","H1","H3","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","ah","bh","dh","eh","fh","fl","hh","Wil","Wih","Wi","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","t1l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Ki","Kih","Kil","t1h","t2l","toX32","HmacSHA512","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","keyBits","keyBitPos","subKeys","_subKeys","nSubKey","subKey","bitShift","invSubKeys","_invSubKeys","_lBlock","_rBlock","exchangeLR","exchangeRL","lBlock","rBlock","mask","TripleDES","key1","key2","key3","_des1","_des2","_des3","X32WordArray","x64Words","x64WordsLength","x32Words","x64Word","wordsLength","formatArgs","useColors","humanize","lastC","save","setItem","getItem","__nwjs","navigator","documentElement","style","WebkitAppearance","firebug","table","$1","localStorage","localstorage","formatters","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","selectColor","newDebug","toNamespace","regexp","skips","browser","tty","inspectOpts","colorCode","hideDate","isatty","deprecate","supportsColor","O","define","_maxDataSizeExceeded","_bufferedEvents","delayedStream","realEmit","_handleEmit","_checkIfMaxDataSizeExceeded","azureCoreTracing","AzureMonitorSymbol","publisherName","isPatched","versionSpecifier","coreTracing","tracing","defaultProvider","defaultTracer","setTracer","setTracerOriginal_1","startSpanOriginal","originalEnd","publish","setGlobalTracerProviderOriginal_1","tracerProvider","getTracerOriginal","tracerName","startSpanOriginal_1","openTelemetryInstr","azureSdkInstr","registerInstrumentations","instrumentations","createAzureSdkInstrumentation","registerMonkeyPatch","originalBunyan","originalEmit","_emit","rec","noemit","stream_1","originalConsole","aiLoggingOutStream","Writable","aiLoggingErrStream","aiLoggingConsole","Console","originalMethod","consoleMethods_1","tedious","consolePub","mongoCore","originalMongoCore","originalConnect","originalWrite","pool","cbidx","bindToContext","originalLogout","logout","mongo330","mongo3","mongo2","originalMongo","instrument","operationIdGenerator","eventMap","contextMap","coreTopology","mongodbcorePatchFunction","originalMysql","originalMysqlPath","patchObjectFunction","cbWrapper","originalFunc","resultContainer","startDate","patchClassMemberFunction","classObject","connectionClass","hrDuration","poolClass","postgresPool1","originalPgPool","postgres","postgres6","originalPg","originalPgPath","originalClientQuery","Client","diagnosticOriginalFunc","queryResult","connectionParameters","patchCallback","trackingCallback","rowCount","callbackProvided","cursor","_Promise","originalRedis","originalSend","RedisClient","internal_send_command","cb_1","pubsubBound","address_1","startDate_1","originalTedious","originalMakeRequest","Connection","getPatchedCallback","origCallback","rows","parametersByName","statement","__rest","propertyIsEnumerable","winston2","winston3","originalWinston","AppInsightsTransport","splat","levels","mapLevelToKind","Transport","patchedConfigure","lastLevel","origCreate","origConfigure","configure","origRootConfigure","curLevels","originalLog","Logger","loggingFilter","filters","webpackEmptyContext","ContextPreservingEventEmitter","makePatchingRequire","patchRequire_1","patchRequire_2","publishing","subscribers","contextPreservationFunction","knownPatches","modulesPatched","currentlyPublishing","shouldPublish","standardEvent_1","patched","checkIfModuleIsAlreadyPatched","preserver","previousPreservationStack","patcher","getPatchesObject","addPatchedModule","module_2","diagnosticsSource","channel_1","moduleModule","nativeModules","originalRequire","patchedModules","moduleId","originalModule","modulePath","_resolveFilename","moduleVersion","prereleaseTagIndex","modifiedModule","modulePatcher","convertChangesToDMP","convertChangesToXML","diffArrays","oldArr","newArr","arrayDiff","tokenize","removeEmpty","Diff","buildValues","newString","oldString","useLongestToken","componentPos","componentLen","newPos","oldPos","component","oldValue","lastComponent","clonePath","castInput","newLen","oldLen","editLength","maxEditLength","bestPath","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","_oldPos","canAdd","canRemove","pushComponent","commonCount","ignoreCase","chars","diffChars","oldStr","newStr","characterDiff","diffCss","cssDiff","diffJson","oldObj","newObj","jsonDiff","canonicalize","_base","_line","_typeof","objectPrototypeToString","replacementStack","replacer","canonicalizedObj","sortedKeys","lineDiff","_this$options","undefinedReplacement","_this$options$stringi","stringifyReplacer","diffLines","diffTrimmedLines","_params","generateOptions","ignoreWhitespace","retLines","linesAndNewlines","newlineIsToken","diffSentences","sentenceDiff","diffWords","wordDiff","diffWordsWithSpace","extendedWordChars","reWhitespace","_character","_word","_sentence","_css","_json","_array","_apply","applyPatch","applyPatches","parsePatch","_merge","_create","structuredPatch","createTwoFilesPatch","createPatch","_dmp","_xml","uniDiff","currentIndex","processIndex","complete","loadFile","updatedContent","_distanceIterator","removeEOFNL","addEOFNL","delimiters","hunks","compareLine","lineNumber","patchContent","fuzzFactor","minLine","hunkFits","hunk","toPos","maxLine","oldLines","localOffset","oldStart","diffOffset","_hunk","_toPos","newLines","linedelimiters","previousOperation","formatPatch","oldHeader","newHeader","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","oldFileName","newFileName","oldRangeStart","newRangeStart","curRange","oldLine","newLine","_loop","_curRange","contextLines","_curRange2","_curRange3","contextSize","newStart","oldEOFNewline","newEOFNewline","noNlBeforeAdds","calcLineCount","mine","theirs","loadPatch","fileNameChanged","selectField","mineIndex","theirsIndex","mineOffset","theirsOffset","mineCurrent","theirsCurrent","hunkBefore","cloneHunk","mergedHunk","mergeLines","_calcOldNewLineCount","calcOldNewLineCount","conflict","mineLines","theirOffset","theirLines","their","insertLeading","theirCurrent","_hunk$lines","collectChange","_hunk$lines2","removal","mutualChange","insertTrailing","myChanges","theirChanges","allRemoves","_hunk$lines3","_hunk$lines4","arrayStartsWith","skipRemoveSuperset","arrayEqual","_hunk$lines5","swap","_hunk$lines6","matchChanges","merged","matchIndex","contextChanges","conflicted","collectContext","removeChanges","changeContent","myCount","theirCount","diffstr","parseIndex","parseFileHeader","parseHunk","fileHeader","keyPrefix","chunkHeaderIndex","chunkHeader","addCount","removeCount","wantForward","backwardExhausted","forwardExhausted","unwrap","SYMBOL","_events","_wrap","visit","onAddListener","onEmit","adding","existing","unprocessed","_findAndProcess","remover","equal","valueOf","sep","decodeURI","firstSlash","parseUrl","mime","asynckit","populate","FormData","_overheadLength","_valueLength","_valuesToMeasure","LINE_BREAK","DEFAULT_CONTENT_TYPE","_multiPartHeader","footer","_multiPartFooter","_trackLength","valueLength","knownLength","_lengthRetriever","fileSize","contentDisposition","_getContentDisposition","_getContentType","filepath","_httpMessage","lookup","_lastBoundary","getHeaders","userHeaders","formHeaders","setBoundary","_boundary","_generateBoundary","getBuffer","dataBuffer","getLengthSync","hasKnownLength","submit","responce","dst","isSsh","protocols","gitUp","gitUrlParse","urlInfo","sourceParts","splits","git_suffix","owner","organization","full_name","ref","nameIndex","dashIndex","blobIndex","treeIndex","commitIndex","srcIndex","rawIndex","editIndex","commit","filepathtype","offsetNameIndex","at","maybeGitSuffix","buildToken","buildPath","flag","terminatorPos","statusCodeCacheableByDefault","understoodStatuses","errorStatusCodes","hopByHopHeaders","te","trailer","upgrade","excludedFromRevalidationUpdate","toNumberOrZero","parseCacheControl","cc","formatCacheControl","cacheHeuristic","immutableMinTimeToLive","ignoreCargoCult","_fromObject","_assertRequestHasHeaders","_responseTime","_isShared","_cacheHeuristic","_immutableMinTtl","_resHeaders","_rescc","_method","_url","_host","_noAuthorization","authorization","_reqHeaders","vary","_reqcc","expires","pragma","_hasExplicitExpiration","private","_allowsStoringAuthenticated","public","requestCC","_requestMatches","allowHeadMethod","_varyMatches","_copyWithoutHopByHopHeaders","inHeaders","warnings","toUTCString","serverDate","_ageValue","immutable","defaultMinTtl","lastModified","staleIfErrorAge","staleWhileRevalidateAge","_useStaleIfError","useStaleWhileRevalidate","sh","imm","resh","rescc","u","reqh","reqcc","toObject","revalidationHeaders","incomingReq","etag","etags","revalidatedPolicy","isErrorResponse","modified","newResponse","assert_1","parse_proxy_response_1","secure","isDefaultPort","proxyResponsePromise","buffered","omit","fakeSocket","createHttpsProxyAgent","buffersLength","firstLine","ondata","onclose","onend","makeArray","REGEX_TEST_BLANK_LINE","REGEX_INVALID_TRAILING_BACKSLASH","REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION","REGEX_REPLACE_LEADING_EXCAPED_HASH","REGEX_SPLITALL_CRLF","REGEX_TEST_INVALID_PATH","TMP_KEY_IGNORE","KEY_IGNORE","REGEX_REGEXP_RANGE","RETURN_FALSE","REPLACERS","p1","p2","leadEscape","endEscape","slashes","cleanRangeBackSlash","sanitizeRange","regexCache","isString","IgnoreRule","negative","throwError","checkPath","originalPath","doThrow","isNotRelative","convert","Ignore","ignorecase","allowRelativePaths","_rules","_ignoreCase","_allowRelativePaths","_initCache","_ignoreCache","_testCache","_addPattern","_added","checkPattern","rule","makeRegex","createRule","addPattern","_testOne","checkUnignored","ignored","unignored","_test","slices","_t","ignores","createFilter","paths","factory","isPathValid","IGNORE_TEST_WIN32","makePosix","REGIX_IS_WINDOWS_PATH_ABSOLUTE","isDocker","hasDockerEnv","hasDockerCGroup","prots","urlPortPattern","isWsl","__IS_WSL_TEST__","kerberos","MongoAuthProcess","serviceName","gssapiServiceName","canonicalizeHostName","gssapiCanonicalizeHostName","_transition","retries","transition","fourthTransition","thirdTransition","secondTransition","resolveCname","performGssapiCanonicalizeHostName","initOptions","service","initializeClient","Kerberos","processes","KerberosClient","KerberosServer","defineOperation","checkPassword","principalDetails","mechOID","initializeServer","GSS_C_DELEG_FLAG","GSS_C_MUTUAL_FLAG","GSS_C_REPLAY_FLAG","GSS_C_SEQUENCE_FLAG","GSS_C_CONF_FLAG","GSS_C_INTEG_FLAG","GSS_C_ANON_FLAG","GSS_C_PROT_READY_FLAG","GSS_C_TRANS_FLAG","GSS_C_NO_OID","GSS_MECH_OID_KRB5","GSS_MECH_OID_SPNEGO","validateParameter","specs","specIndex","spec","paramType","def","paramDefs","argIdx","extensions","preference","db","EXTRACT_TYPE_REGEXP","TEXT_TYPE_REGEXP","charsets","extension","exts","plural","msAbs","isPlural","long","fmtShort","registerAlgorithm","aes","Algorithm","startEncrypting","_createCipher","createEncryptionCipher","startDecrypting","createDecryptionCipher","inBlock","outBlock","_updateBlock","_w","_init","createBuffer","putByte","getInt32","encryptOp","_expandKey","modes","ecb","cbc","cfb","ofb","ctr","gcm","sbox","isbox","rcon","mix","imix","xtime","e2","e4","e8","sx2","me","ime","ei","temp","w","iNk","Nk","m0","m1","m2","m3","wnew","wi","a2","c2","Nr","createDecipher","createCipher","ByteBuffer","initConnectionState","sp","entity","ConnectionEnd","cipherState","server_write_key","client_write_key","server_write_IV","client_write_IV","cipherFunction","decrypt_aes_cbc_sha1","encrypt_aes_cbc_sha1","macLength","mac_length","macFunction","hmac_sha1","rval","mac","macKey","fragment","putBytes","updateSequenceNumber","Versions","TLS_1_0","getBytesSync","TLS_1_1","finish","encrypt_aes_cbc_sha1_padding","fillWithByte","decrypt_aes_cbc_sha1_padding","paddingLength","truncate","getBytes","macLen","mac2","mac1","digest","compareMacs","CipherSuites","initSecurityParameters","bulk_cipher_algorithm","BulkCipherAlgorithm","cipher_type","CipherType","enc_key_length","block_length","fixed_iv_length","record_iv_length","mac_algorithm","MACAlgorithm","mac_key_length","privateKeyValidator","UNIVERSAL","SEQUENCE","INTEGER","capture","OID","OCTETSTRING","publicKeyValidator","captureAsn1","BITSTRING","composed","captureBitStringValue","_checkBufferLength","remaining","available","requested","_fromDer","getByte","bitStringContents","longFormBytes","getInt","_getValueLength","decodeBitStrings","savedRead","savedRemaining","unused","used","tc","BMPSTRING","getInt16","asn1Options","APPLICATION","PRIVATE","BOOLEAN","NULL","ODESC","EXTERNAL","REAL","ENUMERATED","EMBEDDED","ROID","SET","PRINTABLESTRING","IA5STRING","UTCTIME","GENERALIZEDTIME","copy","excludeBitStringContents","includeBitStringContents","getBerValueLength","parseAllBytes","toDer","useBitStringContents","putBuffer","putInt16","lenBytes","oidToDer","oid","valueBytes","derToOid","utcTimeToDate","utc","year","MM","DD","mm","ss","setUTCFullYear","setUTCHours","setTime","generalizedTimeToDate","gentime","YYYY","fff","isUTC","setFullYear","setHours","dateToUtcTime","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","dateToGeneralizedTime","integerToDer","putSignedInt","derToInteger","getSignedInt","validate","captureBitStringContents","_nonLatinRegex","prettyPrint","indentation","indent","IA5String","subvalues","oids","bytesToHex","decodeUtf8","_reverseAlphabets","alphabet","maxline","digits","carry","_encodeWithByteBuffer","algorithms","getAlgorithm","_finish","_input","_op","_decrypt","compact","overflow","afterFinish","transformIV","ints","blocks","inc32","from64To32","_ints","_inBlock","_outBlock","putInt32","_prev","_partialBlock","_partialOutput","_partialBytes","inputLength","partialBytes","_R","additionalData","_cipherLength","_tagLength","tagLength","_tag","_hashBlock","_hashSubkey","componentBits","generateHashTable","ivLength","_j0","ghash","_aDataLength","_s","lengths","multiply","z_i","v_i","lsb","tableMultiply","x_i","bits","multiplier","perInt","shft","generateSubHashTable","half","m_i","m_j","des","pc2bytes0","pc2bytes1","pc2bytes2","pc2bytes3","pc2bytes4","pc2bytes5","pc2bytes6","pc2bytes7","pc2bytes8","pc2bytes9","pc2bytes10","pc2bytes11","pc2bytes12","pc2bytes13","shifts","lefttmp","righttmp","_createKeys","spfunction1","spfunction2","spfunction3","spfunction4","spfunction5","spfunction6","spfunction7","spfunction8","looping","endloop","loopinc","right1","right2","asn1Validator","BigInteger","jsbn","NativeBuffer","ed25519","messageToNativeBuffer","md","PUBLIC_KEY_BYTE_LENGTH","PRIVATE_KEY_BYTE_LENGTH","SEED_BYTE_LENGTH","SIGN_BYTE_LENGTH","HASH_BYTE_LENGTH","generateKeyPair","seed","pk","sk","gf","sha512","scalarbase","crypto_sign_keypair","publicKey","privateKey","privateKeyFromAsn1","privateKeyOid","ed25519Oid","EdDSA25519","privateKeyBytes","publicKeyFromAsn1","publicKeyOid","publicKeyBytes","ed25519PublicKey","publicKeyFromPrivateKey","sign","signedMsg","sm","subarray","modL","crypto_sign","sig","verify","signature","chk","den","den2","den4","den6","set25519","gf1","unpack25519","D","Z","A","pow2523","neq25519","I","par25519","gf0","unpackneg","scalarmult","crypto_verify_32","crypto_sign_open","D2","Y","msgLen","cswap","sel25519","tx","ty","zi","inv25519","pack25519","car25519","yi","vn","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","usePureJavaScript","_md","_ipadding","_opadding","keylen","blockLength","getMac","dbits","fromNumber","nbi","am3","xl","xh","am","appName","DB","DM","DV","FV","F1","F2","rr","vv","BI_RC","int2char","intAt","nbv","fromInt","nbits","Classic","Montgomery","mp","invDigit","mpl","mph","um","mt2","op_and","op_or","op_xor","op_andnot","lbit","cbit","NullExp","nNop","Barrett","q3","dlShiftTo","mu","divide","compareTo","revert","divRemTo","mulTo","multiplyTo","sqrTo","squareTo","ZERO","subTo","copyTo","u0","drShiftTo","fromRadix","mi","lShiftTo","bs","cbs","bm","ds","rShiftTo","pm","pt","ts","nsh","ys","y0","yt","d1","d2","qd","isEven","exp","negate","toRadix","km","bitLength","modPowInt","multiplyUpperTo","multiplyLowerTo","dAddOffset","lowprimes","lplim","chunkSize","LN2","signum","cs","dMultiply","testBit","bitwiseTo","shiftLeft","isProbablePrime","nextBytes","changeBit","addTo","modInt","millerRabin","n1","subtract","getLowestSetBit","shiftRight","prng","modPow","byteValue","shortValue","toByteArray","and","or","xor","andNot","bitCount","setBit","clearBit","flipBit","remainder","divideAndRemainder","k1","g2","is1","modInverse","gcd","kem","_createKDF","counterStart","digestLength","generate","rsa","keyLength","zeros","hexToBytes","fillString","encapsulation","kdf1","kdf2","sLevelInfo","sLoggers","sConsoleLogger","LEVEL_LOCKED","NO_LEVEL_CHECK","INTERPOLATE","logMessage","messageLevelIndex","prepareStandard","standard","category","prepareFull","full","prepareStandardFull","standardFull","makeLogger","logFunction","setLevel","addLogger","levelHandlers","consoleLogger","md5","_initialized","_padding","_r","messageLength","fullMessageLength","messageLengthSize","messageLength64","int32s","h0","h3","encodeUtf8","_update","finalBlock","putInt32Le","getInt32Le","mgf","mgf1","maskLen","_IN","_I_","pbe","encryptedPrivateKeyValidator","PBES2AlgorithmsValidator","pkcs12PbeParamsValidator","prfOidToMessageDigest","prfOid","prfAlgorithm","supported","prfAlgorithmToMessageDigest","encryptPrivateKeyInfo","saltSize","dkLen","encryptionAlgorithm","encryptedData","countBytes","ivLen","encOid","cipherFn","dk","pkcs5","pbkdf2","createPbkdf2Params","saltBytes","generatePkcs12Key","decryptPrivateKeyInfo","encryptionOid","getCipher","encryptionParams","encryptedPrivateKeyToPem","epki","encryptedPrivateKeyFromPem","headerType","procType","encryptRsaPrivateKey","rsaKey","legacy","wrapRsaPrivateKey","privateKeyToAsn1","opensslDeriveBytes","dekInfo","decryptRsaPrivateKey","rc2","sha1","passBuf","Slen","Plen","B","Inew","setAt","getCipherForPBES2","getCipherForPKCS12PBE","supportedOids","kdfOid","kdfSalt","kdfIterationCount","encIv","dIvLen","digests","isNodejs","pbkdf2Sync","hLen","prf","u_c","u_c1","int32ToBytes","xorBytes","foldHeader","insertSpace","ltrim","contentDomain","encode64","rMessage","rHeader","rCRLF","decode64","li","nl","vi","pkcs1","rsa_mgf1","maskLength","encode_rsa_oaep","mgf1Md","lHash","PS","PS_length","seedLength","dbMask","maskedDB","seedMask","maskedSeed","decode_rsa_oaep","em","expectedLength","lHashPrime","in_ps","is_0","error_mask","p12","pkcs12","contentInfoValidator","pfxValidator","safeBagValidator","attributeValidator","certBagValidator","_getBagsByAttribute","safeContents","attrName","attrValue","bagType","safeBags","bag","_decodePkcs7Data","_decryptSafeContents","pkcs7","encryptedDataValidator","encAlgorithm","encParameter","encryptedContentAsn1","_decodeSafeContents","safeBag","validator","bagId","_decodeBagAttributes","bagAttributes","bagAsn1","bagValue","pkcs8ShroudedKeyBag","keyBag","certBag","certId","x509Certificate","certAsn1","certificateFromAsn1","decodedAttrs","pkcs12FromAsn1","pfx","getBags","localKeyId","localKeyIdHex","friendlyName","getBagsByFriendlyName","getBagsByLocalKeyId","macKeyBytes","macAlgorithm","sha256","sha384","macSalt","macIterations","generateKey","macDigest","authSafe","contentInfo","_decodeAuthenticatedSafe","toPkcs12Asn1","useMac","generateLocalKeyId","bagAttrs","pairedCert","certificateToAsn1","attrs","certSafeBags","certBagAttrs","certSafeBag","certSafeContents","certCI","pkAsn1","keySafeContents","keyCI","macData","macValue","p7","_recipientFromAsn1","recipientInfoValidator","RDNAttributesAsArray","serialNumber","toHex","encryptedContent","encKey","_recipientsToAsn1","recipients","distinguishedNameToAsn1","_signerToAsn1","digestAlgorithm","authenticatedAttributesAsn1","signatureAlgorithm","unauthenticatedAttributes","attrsAsn1","attr","_attributeToAsn1","messageDigest","signingTime","jan_1_1950","jan_1_2050","_fromAsn1","rawCapture","_decryptContent","ciph","messageFromPem","messageFromAsn1","messageToPem","pemObj","toAsn1","envelopedData","createEnvelopedData","createEncryptedData","signedData","createSignedData","fromAsn1","certificates","crls","signers","digestAlgorithmIdentifiers","signerInfos","signedDataValidator","certs","addSigner","signer","certificate","privateKeyFromPem","authenticatedAttributes","rsaEncryption","detached","detachedContent","mds","ai","_signersToAsn1","addSignerInfos","addDigestAlgorithmIds","addCertificate","addCertificateRevokationList","crl","envelopedDataValidator","infos","_recipientsFromAsn1","recipientInfos","ec","findRecipient","sAttr","rAttr","recipient","privKey","desCBC","addRecipient","keyLen","ciphFn","p7v","pkcs7asn1","encryptedContentInfoValidator","signerValidator","privateKeyToPem","privateKeyInfoToPem","prime","GCD_30_DELTA","THIRTY","generateProbablePrime","Worker","primeincFindPrimeWithoutWorkers","generateRandom","numWorkers","workers","workLoad","workerScript","estimateCores","cores","workerMessage","found","terminate","hex","primeincFindPrimeWithWorkers","primeincFindPrime","mrTests","getMillerRabinTests","millerRabinTests","maxBlockTime","_primeinc","deltaIdx","bits1","_crypto","plugin","reseeds","generated","keyBytes","pools","_reseedSync","_seed","needed","collect","seedFileSync","_2powK","seedBytes","formatKey","formatSeed","defaultSeedFile","globalScope","entropy","QuotaExceededError","generateSync","increment","seedFile","_reseed","collectInt","registerWorker","worker","pss","saltLength","sLen","salt_","pssobj","modBits","emBits","emLen","mHash","m_","ps","checkLen","jQuery","prng_aes","_prng_aes_output","_prng_aes_buffer","spawnPrng","_ctx","_navBytes","mousemove","clientX","clientY","keypress","createInstance","piTable","rol","ror","expandKey","effKeyBits","T1","T8","TM","mixRound","mashRound","_output","getInt16Le","runPlan","putInt16Le","ptr","rsaPrivateKeyValidator","rsaPublicKeyValidator","digestInfoValidator","emsaPkcs1v15encode","oidBytes","digestInfo","_modPow","pub","dP","dQ","qInv","xq","_encodePkcs1_v1_5","bt","eb","padByte","padNum","numZeros","padBytes","_decodePkcs1_v1_5","ml","_generateKeyPair","getPrime","pBits","qBits","q1","phi","setPrivateKey","setPublicKey","_bnToBytes","_getMillerRabinTests","_detectNodeCrypto","_detectSubtleCrypto","subtle","_detectSubtleMsCrypto","_intToUint8Array","yhex","ed","expected","xhex","createKeyPairGenerationState","eInt","pqState","stepKeyPairGenerationState","modulusLength","publicExponent","publicKeyEncoding","privateKeyEncoding","priv","publicKeyFromPem","exportKey","pkcs8","setRsaPublicKey","genOp","oncomplete","exportOp","keypair","generateKeyPairSync","schemeOptions","_parseAllDigestBytes","algorithmIdentifier","md2","sha224","setRsaPrivateKey","privateKeyModulus","privateKeyPublicExponent","privateKeyPrivateExponent","privateKeyPrime1","privateKeyPrime2","privateKeyExponent1","privateKeyExponent2","privateKeyCoefficient","privateKeyToRSAPrivateKey","rsaPublicKey","publicKeyModulus","publicKeyExponent","publicKeyToAsn1","publicKeyToSubjectPublicKeyInfo","publicKeyToRSAPublicKey","h4","h5","h6","h7","_states","messageLength128","hlen","t1_hi","t1_lo","t2_hi","t2_lo","s0_hi","s0_lo","s1_hi","ch_hi","maj_hi","maj_lo","a_hi","a_lo","b_hi","b_lo","c_hi","c_lo","d_hi","d_lo","e_hi","e_lo","f_hi","f_lo","g_hi","g_lo","h_hi","h_lo","w2","w7","w15","w16","ssh","_addBigIntegerToBuffer","hexVal","_addStringToBuffer","putString","_sha1","sha","privateKeyToPutty","passphrase","comment","ppk","pubbuffer","privbuffer","encLen","aeskey","mackey","macbuffer","publicKeyToOpenSSH","privateKeyToOpenSSH","getPublicKeyFingerprint","prf_TLS1","secret","idx","slen","md5itr","sha1itr","md5bytes","sha1bytes","readVector","getInt24","writeVector","putInt","TLS_1_2","SupportedVersions","MaxFragment","PRFAlgorithm","tls_prf_sha256","rc4","des3","aead","hmac_md5","hmac_sha256","hmac_sha384","hmac_sha512","CompressionMethod","ContentType","change_cipher_spec","handshake","application_data","heartbeat","HandshakeType","hello_request","client_hello","server_hello","server_key_exchange","certificate_request","server_hello_done","certificate_verify","client_key_exchange","finished","Alert","Level","fatal","Description","close_notify","unexpected_message","bad_record_mac","decryption_failed","record_overflow","decompression_failure","handshake_failure","bad_certificate","unsupported_certificate","certificate_revoked","certificate_expired","certificate_unknown","illegal_parameter","unknown_ca","access_denied","decode_error","decrypt_error","export_restriction","protocol_version","insufficient_security","internal_error","user_canceled","no_renegotiation","HeartbeatMessageType","heartbeat_request","heartbeat_response","getCipherSuite","twoBytes","handleUnexpected","handleHelloRequest","handshaking","handshakes","createAlert","parseHelloMessage","session_id","cipher_suite","compression_method","cipher_suites","compression_methods","ext","snl","server_name","serverNameList","cipherSuite","compressionMethod","createSecurityParameters","msgRandom","cRandom","client_random","sRandom","createRandom","prf_algorithm","compression_algorithm","pre_master_secret","master_secret","server_random","handleServerHello","fail","expect","SCC","resuming","SCE","handleClientHello","getSession","clientHelloVersion","CCC","verifyClient","CCE","CKE","createRecord","createServerHello","createChangeCipherSpec","pending","createConnectionState","createFinished","createCertificate","createServerKeyExchange","createCertificateRequest","createServerHelloDone","handleCertificate","certificate_list","cause","SKE","serverCertificate","clientCertificate","verifyCertificateChain","handleServerKeyExchange","SCR","handleClientKeyExchange","enc_pre_master_secret","getPrivateKey","CCV","handleCertificateRequest","certificate_types","certificate_authorities","certificateRequest","SHD","handleCertificateVerify","msgBytes","handleServerHelloDone","createClientKeyExchange","SER","createCertificateVerify","getClientSignature","handleChangeCipherSpec","SFI","CFI","handleFinished","vd","SAD","CAD","peerCertificate","isConnected","handleAlert","handleHandshake","fragmented","hsTable","handleApplicationData","dataReady","handleHeartbeat","createHeartbeat","expectedHeartbeatPayload","heartbeatReceived","R0","R1","R2","R3","R4","ctTable","H8","H9","generateKeys","tls10","client_write_MAC_key","server_write_MAC_key","createMode","compressionState","compressFunction","getTimezoneOffset","createClientHello","cipherSuites","cSuites","compressionMethods","cMethods","virtualHost","serverName","snList","extLength","putInt24","hint","getCertificate","certList","certBuffer","getSignature","certTypes","cAs","caStore","dn","byteBuffer","payloadLength","plaintextLength","records","tlsData","tlsDataReady","_certErrorToAlertDesc","certificateError","verifyOptions","vfd","_alertDescToCertError","createSessionCache","setSession","order","createCaStore","cn","dpth","cts","clearFail","ready","compatibleVersion","_readRecordHeader","_readRecord","aligned","handlers","prepare","prepareHeartbeatRequest","prf_tls1","seqNum","baseN","_checkBitsParam","ByteStringBuffer","isArrayBufferView","_constructedStringLength","stopPropagation","MutationObserver","div","createElement","observe","oldSetImmediate","_optimizeConstructedString","putInt24Le","getInt24Le","DataBuffer","readOffset","growSize","writeOffset","accommodate","amount","setUint8","view","binary","base64","utf16","setInt16","setInt8","setInt32","getInt8","getUint8","utf8","_base64","_base64Idx","_base58","chr1","chr2","chr3","enc1","enc2","enc3","enc4","base58","_setStorageObject","_getStorageObject","_setItem","_getItem","_removeItem","_clearItems","_callStorageFunction","clearItems","argi","formatNumber","decimals","dec_point","thousands_sep","formatSize","bytesFromIP","bytesFromIPv4","bytesFromIPv6","blanks","bytesToIP","bytesToIPv4","bytesToIPv6","zeroGroups","zeroMaxGroup","hardwareConcurrency","Blob","blobUrl","createObjectURL","et","sample","samples","avg","revokeObjectURL","overlaps","overlap","_shortNames","x509CertificateValidator","rsassaPssParameterValidator","certificationRequestInfoValidator","certificationRequestValidator","_getAttribute","shortName","si","valueTagClass","CRIAttributesAsArray","seq","extensionRequest","certificateExtensionFromAsn1","_readSignatureParameters","fillDefaults","algorithmOid","hashOid","maskGenOid","maskGenHashOid","_createSignatureDigest","signatureOid","_verifySignature","sha1WithRSAEncryption","sha1WithRSASignature","signatureParameters","_dnToAsn1","_fillMissingFields","attribute","valueConstructed","certificateExtensionToAsn1","_fillMissingExtensionFields","digitalSignature","nonRepudiation","keyEncipherment","dataEncipherment","keyAgreement","keyCertSign","cRLSign","encipherOnly","decipherOnly","cA","pathLenConstraint","email","objsign","reserved","sslCA","emailCA","objCA","altNames","altName","ski","generateSubjectKeyIdentifier","subjectKeyIdentifier","keyIdentifier","authorityCertIssuer","subSeq","fullNameGeneralNames","_signatureParametersToAsn1","_CRIAttributesToAsn1","csr","computeHash","certificateToPem","publicKeyToPem","publicKeyToRSAPublicKeyPem","certificationRequestFromPem","certificationRequestFromAsn1","certificationRequestToPem","certificationRequestToAsn1","siginfo","validity","notBefore","notAfter","getField","sn","addField","setSubject","uniqueId","setIssuer","setExtensions","getExtension","tbsCertificate","getTBSCertificate","issued","expectedIssuer","actualIssuer","isIssuer","iattr","sattr","verifySubjectKeyIdentifier","certVersion","certSerialNumber","certSignatureOid","certSignatureParams","certinfoSignatureOid","certinfoSignatureParams","certSignature","certValidity1UTCTime","certValidity2GeneralizedTime","certValidity3UTCTime","certValidity4GeneralizedTime","imd","ibytes","certIssuer","certIssuerUniqueId","smd","sbytes","certSubject","certSubjectUniqueId","certExtensions","certificateExtensionsFromAsn1","subjectPublicKeyInfo","extseq","critical","gn","createCertificationRequest","csrVersion","csrSignatureOid","csrSignatureParams","csrSignature","certificationRequestInfo","certificationRequestInfoSubject","getAttribute","addAttribute","certificationRequestInfoAttributes","getCertificationRequestInfo","cri","_dateToAsn1","tbs","certificateExtensionsToAsn1","getBySubject","ensureSubjectHasHash","getIssuer","hasCertificate","der1","listAllCertificates","removeCertificate","validityCheckDate","selfSigned","parents","verified","se","keyUsage","basicConstraints","bcExt","keyUsageExt","fsConstants","defineLazyProperty","localXdgOpenPath","cachedResult","getWslDrivesMountPoint","defaultMountPoint","mountPoint","configFilePath","isConfigFileExists","configContent","configMountPoint","groups","pTryEach","mapper","latestError","baseOpen","wait","background","newInstance","allowNonzeroExitCode","singleApp","appArguments","cliArguments","childProcessOptions","hasContainerEnv","SYSTEMROOT","windowsVerbatimArguments","encodedArguments","isBundled","exeLocalXdgOpen","X_OK","electron","subprocess","exitCode","detectArchBinary","archBinary","detectPlatformBinary","platformBinary","wsl","apps","darwin","win32","linux","ia32","openApp","parse_failed","_interopDefaultLegacy","parsePath__default","testParameter","GIT_RE","throwErr","subject_url","MAX_INPUT_LENGTH","stripHash","urlString","defaultProtocol","normalizeProtocol","forceHttp","forceHttps","stripAuthentication","stripTextFragment","stripWWW","removeQueryParameters","removeTrailingSlash","removeSingleSlash","removeDirectoryIndex","sortQueryParameters","mediaType","isBase64","mimeType","normalizedMediaType","normalizeDataURL","hasRelativeProtocol","protocolRegex","protocolAtIndex","pathComponents","oldUrlString","stripProtocol","normalizeUrl","matched","funktion","nodule","wrapper","nodules","massUnwrap","FormatErrorString","_stackChain","defaultFormater","TraceModifier","StackFormater","SHORTCIRCUIT_CALLSITE","collectCallSites","callSites","_modify","_formater","_previous","formater","restore","_backup","_roolback","SHORTCIRCUIT_FORMATER","originalFrames","isExtensible","mutated","hasFlag","forceColor","getSupportLevel","isTTY","osRelease","CI_NAME","TEAMCITY_VERSION","COLORTERM","TERM_PROGRAM_VERSION","TERM_PROGRAM","TERM","hasBasic","has256","has16m","translateLevel","FORCE_COLOR","createAgentContext","createProductionContext","AgentConfigProvider","persistenceManager","makeXdgPersistenceManager","PersistenceManager","tokenManager","AgentCopilotTokenManager","authManager","AuthManager","GitHubDeviceFlow","CopilotTokenManager","EditorSession","agentEditorSession","EditorAndPluginInfo","AgentEditorInfo","MethodHandlers","getAllMethods","NotificationHandlers","CopilotCompletionCache","LocationFactory","AgentLocationFactory","agentFileSystem","CopilotIgnoreManager","NoOPCopilotIgnoreManager","registerDefaultHandlers","WrappedConnection","notificationSender","ConnectionNotificationSender","NotificationSender","AgentNotificationSender","StatusReporter","NotificationStatusReporter","FeatureFlagsNotifier","textDocumentManager","AgentTextDocumentManager","TextDocumentManager","NetworkConfiguration","DefaultNetworkConfiguration","SymbolDefinitionProvider","AgentSymbolDefinitionProvider","CopilotRepositoryControlManager","NoOPCopilotRepositoryControlManager","activateConversationFeature","TelemetryReporters","deactivate","CopilotService","main","redirectTelemetry","setupRedirectingTelemetryReporters","setupTelemetryReporters","AgentInstallationManager","startup","LogLevel","CopilotTokenManagerFromGitHubTokenBase","getGitHubToken","CLIENT_ID","requestDeviceFlowStage2","deviceCode","Accept","editorVersionHeaders","client_id","device_code","grant_type","Fetcher","getDeviceFlowCompletionUrl","requestUserInfo","telemetryGitHubLoginSuccess","getUserInfoUrl","Authorization","getTokenUnguarded","telemetryGitHubLoginFailed","UserErrorNotifier","notifyUser","stage1","telemetryNewGitHubLogin","scope","getDeviceFlowStartUrl","requestDeviceFlowStage1","stage2Promise","expiresIn","expires_in","stage2","interval","access_token","login","oauth_token","waitForAuth","_copilotTokenManager","_pendingSignIn","getCopilotTokenManager","setPendingSignIn","getPendingSignIn","localChecksOnly","authRecord","CODESPACES","GITHUB_TOKEN","GITHUB_USER","getAuthRecord","resetCopilotToken","checkTokenResult","checkCopilotToken","getAuthAuthority","gitHubToken","dev_override","devOverride","copilotTokenUrl","copilot_token_url","notificationUrl","notification_url","overrideCopilotTokenManager","authResult","checkAndUpdateStatus","ErrorCode","NoCopilotToken","requestCtx","forceSet","cancelled","_parentListener","InMemoryConfigProvider","DefaultsOnlyConfigProvider","setOverridesFromEnvironment","getOptionalConfig","isDefaultSettingOverwritten","getConfig","envKey","setConfig","ConfigKey","setEditorAndPluginInfo","editorInfo","editorPluginInfo","_editorInfo","_editorPluginInfo","getEditorInfo","getEditorPluginInfo","ConversationFeature","activate","Conversations","ConversationPromptEngine","ConversationOptionsProvider","SyntheticTurns","registerSkills","maxMessageTokens","getHiddenConfig","ConversationMaxMessageTokens","maxResponseTokens","ConversationMaxResponseTokens","temperature","ConversationTemperature","topP","ConversationTopP","engine","ConversationEngine","additionalPromptContext","ConversationAdditionalPromptContext","basePrompt","chatBasePrompt","rejectionMessage","registry","ConversationSkillRegistry","registerSkill","ProjectLabelsSkill","AgentSkillResolver","ProjectLabelsSkillId","ProjectLabelsSchema","CurrentEditorSkill","CurrentEditorSkillId","CurrentEditorSchema","CurrentSelectionSkill","CurrentSelectionSkillId","CurrentSelectionSchema","GitMetadataSkill","GitMetadataSkillId","GitMetadataSchema","ProblemsInActiveDocumentSkill","ProblemsInActiveDocumentSkillId","ProblemsInActiveDocumentSchema","DebugConsoleOutputSkill","DebugConsoleOutputSkillId","DebugConsoleOutputSchema","TerminalOutputSkill","TerminalOuputSkillId","TerminalOutputSchema","CorrespondingTestFileSkill","CorrespondingTestFileSkillId","CorrespondingTestFileSchema","CorrespondingSourceFileSkill","CorrespondingSourceFileSkillId","CorrespondingSourceFileSchema","ConversationProgressType","conversation","turn","conversationId","turnId","followUps","cancellationReason","chatFetcher","conversationOptions","fetchResult","appliedText","baseUserTelemetry","doc","createUserMessageTelemetryData","CopilotUiKind","ConversationPanel","processSuccessfulFetchResult","processOffTopicFetchResult","responseIsFiltered","responseIsIncomplete","cancelationToken","baseModelTelemetry","createTelemetryWithId","markAsDisplayed","telemetryMessageId","createModelMessageTelemetryData","followups","computeFollowups","messageId","telemetryProperties","conversationFollowUp","ConversationFollowUp","followUp","enrichFollowup","conversationLogger","suggestionId","suggestionType","createSuggestionShownTelemetryData","baseOffTopicTelemetry","createOffTopicMessageTelemetryData","skillId","requestType","resultValidation","createValidation","conversationProgress","ConversationProgress","ChatMLFetcher","postProcessor","ChatFetchResultPostProcessor","syntheticTurn","processWithSyntheticTurns","processWithModel","errorMessage","determineAndApplyTemplateUsed","collectSkillsToUse","conversationPrompt","buildConversationPrompt","createSuggestionMessageTelemetryData","extendUserMessageTelemetryData","fetchConversationResponse","messages","messageSource","templateId","getTemplateIdFromRequest","templates","userQuestion","getUserSpecificPartForTemplateRequest","templateInstructions","intstruction","spaceIndex","skillCollector","ConversationSkillCollector","skills","collectTurnSkills","skill","promptOption","maxTokens","computeMaxRequestTokens","toPrompt","finishCallback","ConversationFinishCallback","fetchResponse","isFinishedAfterText","ChatUiKind","intent","postProcess","resolveSyntheticSkill","processSyntheticChunks","endSyntheticProgress","filteredSkills","resolver","resolvedSkill","resolveSkill","LRUCacheMap","writerStream","debugPort","GH_COPILOT_DEBUG_UI_PORT","DebugServer","wrapStdout","RuntimeMode","recordInput","stamp","inLogName","outLogName","writeData","stdoutEmitter","writeHead","notificationEndpoint","CopilotTokenNotifier","ssc","getTokenValue","rt","chat","chat_enabled","notification","NotificationLogger","LogTarget","debugMode","logIt","metadataStr","extra","toPlainText","shouldLog","RedirectTelemetryReporter","codeSnippets","notificationName","sendTelemetryEvent","eventName","sendTelemetryErrorEvent","sendTelemetryException","serializableError","container","deactivation","setReporter","setSecureReporter","setProgress","removeProgress","forceNormal","setInactive","setWarning","warningMessage","setError","AgentFileSystem","mtimeMs","ctime","ctimeMs","mtime","InstallationManager","hasPersistedSettings","listSettings","wasPreviouslyInstalled","knownVersion","markInstalled","uninstall","listKeys","deleteSetting","FakeMessageReader","sendMessage","FakeMessageWriter","FakeWrappedConnection","ParamsSchema","TestingOptions","schemaValidation","uncheckedParams","testingCtx","getTestingContext","CopyKind","codeBlockIndex","copyType","copiedCharacters","totalCharacters","copiedText","DocumentSchema","createRequestContext","getTextDocumentChecked","cursorLocation","telemetryUserAction","newFile","startTurn","TurnProcessor","rating","getCapabilities","relativePath","ifInserted","cancellationTokenSource","handleGetCompletionsHelper","serverToken","isCycling","telemetryData","TelemetryData","createAndMarkAsIssued","MergedToken","testingDocs","CompletionDocuments","numCompletions","completions","challengeDoc","cursorLine","parseChallengeDoc","completion","displayText","docVersion","requestedDocumentVersion","actualDocumentVersion","telemetryVersionMismatch","raiseVersionMismatchIfNotCanceled","docPosition","AgentTextDocument","endRange","completionsActive","positionAndContentForCompleting","logCompletionLocation","resultWithTelemetry","getGhostText","isAbortError","mkCanceledResultTelemetry","cancelledNetworkRequest","getGhostTextWithAbortHandling","handleGhostTextResultTelemetry","resultArray","resultType","rawCompletions","completionsFromGhostTextResults","rawCompletion","panelId","AgentSolutionManager","startPosition","completionContext","solutionCountTarget","savedTelemetryData","reportCancelled","getCancellationToken","reportSolutions","nextSolutionPromise","reportNotificationsDone","nextSolution","unformattedSolution","normalizedText","normalizeCompletionText","completionText","score","meanProb","solutionId","makeSolution","solution","reportDone","ListCount","PanelCompletionDocuments","headerRequestId","getNextSolution","solutionIndex","completionId","created","serverExperiments","deploymentId","meanLogProb","choiceIndex","prependToCompletion","produceEmptySolutions","completionContextForDocument","solutionManager","launchSolutions","getVersion","methods","handleGetCompletions","handleGetCompletionsCycling","handleGetPanelCompletions","handleSetEditorInfo","notifyShown","notifyAccepted","notifyRejected","telemetryExceptionMethod","handleVerifyState","handleVerifyCertificate","handleVerifyWorkspaceState","postInsertionTasks","NetworkProxy","EditorConfigurationSettings","showEditorCompletions","enableAutoCompletions","delayCompletions","filterCompletions","disabledLanguages","kerberosServicePrincipal","AuthProvider","networkProxy","authProvider","applySettingsToConfiguration","ConfigProvider","ShowEditorCompletions","DelayCompletions","EnableAutoCompletions","FilterCompletions","KerberosServicePrincipal","languageEnablement","setLanguageEnablement","applyNetworkProxyConfiguration","authentication","proxyAuth","updateBaseUrl","uuids","flatMap","rejectionInput","completionTelemetryData","postRejectionTasks","ResultType","telemetryShown","NameAndVersionParam","editorConfiguration","getProxyFromEnvironment","proxySettingFromUrl","initializeLateDependencies","pendingSignIn","DeviceFlowFailed","currentStatus","deviceFlow","authed","setAuthRecord","userCode","user_code","verificationUri","verification_uri","githubToken","githubUser","deleteAuthRecord","telemetryAuthNotifyDismissed","authSource","telemetryAuthNotifyShown","authType","stacktrace","telemetryException","AlwaysAuthManager","newTestingContext","getTextDocument","serializableExceptions","reporters","standardReporter","getReporter","restrictedReporter","getSecureReporter","TelemetrySpy","PromiseQueue","TestPromiseQueue","awaitPromises","restricted","NotAuthManager","PanelCompletionDocument","SyntheticTurn","turns","telemetryCapture","FakeAuthManager","getTestingCopilotTokenManager","mgr","expectedCertificate","getRootCertificateReader","getAllRootCAs","normalizeNewlines","expectedCert","asReadableCert","tdm","notificationType","setting","contentsJSON","rm","XDG_CONFIG_HOME","USERPROFILE","HOME","SchemaValidationError","schemaErrors","createErrorMessage","typeCheck","wrappedConnection","initialized","compositeLogTarget","MultiLog","isDebugEnabled","messageHandler","clientWorkspace","isRunningInTest","registerDocumentTracker","openClose","notifyChangeConfiguration","ContextNotInitialized","maybeResult","maybeErr","getMachineId","docInfo","FixedCopilotTokenManager","cursorPosition","percentSign","caretOne","caretTwo","testingContexts","nextTestingId","TestTextDocumentManager","_textDocuments","onDidFocusTextDocument","onDidChangeCursor","textDocuments","setTextDocument","findNotebook","TestAgentEditorInfo","_createBaselineContext","createAgentEditorInfo","TestAgentNotificationSender","sentNotifications","sentMessages","setNotificationNames","x1","y1","y2","newDocument","knownDocuments","_textDocument","fsPath","_relativePath","lineAt","isEmptyOrWhitespace","getWordRangeAtPosition","AgentTextDocumentsConfiguration","primeLanguageDetectionCache","updates","rangeOffset","agentTextDocument","_textDocumentConfiguration","_textDocumentListener","registerWorkspaceFolder","unregisterWorkspaceFolder","agentDoc","getRelativePath","authLogger","refreshRunningCount","nowSeconds","authFromGitHubToken","getTokenUrl","fetchCopilotToken","telemetryError","tokenInfo","user_notification","status_text","error_details","expires_at","refresh_in","organization_list","tokenEnvelope","copilotToken","CopilotToken","sku","adjusted_expires_at","current_time","TOKEN_REFRESHED_EVENT","recentNotifications","showUrl","ackNotification","urlWithContext","UrlOpener","notification_id","getNotificationUrl","sendNotificationResultToGitHub","tokenMap","parseToken","firstPart","tokenRefreshEventEmitter","wasReset","force","httpError","getGitHubSession","tokenResult","refreshToken","refreshIn","getCopilotToken","time_taken","refresh_count","_offset","fileURI","insertionOffset","_referenceCount","_isDisposed","documentManager","_tracker","action","prompt","valueMap","lruKeys","sizeLimit","maybeKeyToDelete","touchKeyInLRU","removeKeyFromLRU","returnValue","selector","predicate","configProvider","Clock","BuildInfo","fromEnvironment","LogVerbose","isVerboseLoggingEnabled","ConsoleLog","setupRudimentaryLogging","CompletionsCache","CertificateReaderCache","RootCertificateReader","ProxySocketFactory","getProxySocketFactory","HelixFetcher","LanguageDetection","getLanguageDetection","Features","PostInsertionNotifier","TelemetryUserConfig","TelemetryEndpointUrl","HeaderContributors","ContextualFilterManager","OpenAIFetcher","LiveOpenAIFetcher","BlockModeConfig","ConfigBlockModeConfig","RealUrlOpener","ExpConfigMaker","ExpConfigNone","SnippetOrchestrator","BlockMode","BuildType","Enable","InlineSuggestEnable","DisplayStyle","SecretKey","SolutionLength","Stops","Temperature","TopP","IndentationMode","InlineSuggestCount","DebugOverrideProxyUrl","DebugTestOverrideProxyUrl","DebugOverrideEngine","DebugShowScores","DebugOverrideLogLevels","DebugFilterLogCategories","ConversationLoggingEnabled","blockMode","Parsing","ParsingAndServer","toApplicableBlockMode","isSupportedLanguageId","getLanguageConfig","overrideBlockMode","getConfigDefaultForKey","contributes","CopilotConfigPrefix","getConfigDefaultForObjectKey","objectKey","dumpConfig","baseConfigProvider","override","keyAsString","isProduction","getBuildType","buildType","getBuild","getName","formatNameAndVersion","machineId","baseContext","constructionStack","instances","ctor","tryGet","assertIsInstance","inst","stackEntry","fetcher","OpenAIChatMLFetcher","stop","finishedCb","uiKind","intentParams","ourRequestId","postOptions","max_tokens","chatParams","repoInfo","engineUrl","getChatURL","extendedBy","fetchAndStreamChat","processSuccessfulResponse","processCanceledResponse","processFailedResponse","processError","postProcessed","asyncIterableMapFilter","chatCompletions","chatCompletion","finishReason","isRepetitive","extendWithRequestId","extended","Conversation","primer","skillResolvers","turnsCopy","conversationCopy","addTurn","FINISHED","deltaApplier","appliedLength","toApply","ConversationHolder","conversations","Turn","getHolder","holder","telemetryPropertiesToUse","ConversationLogger","minLoggedLevel","conversationLoggingEnabled","tokenizer","getTokenizer","TokenizerName","cushman002","numTokens","getProxyURLWithPath","fetchLogger","baseTelemetryData","statusReporter","fetchWithParameters","createTelemetryData","finishedCompletions","SSEProcessor","processSSE","asyncIterableMap","prepareChatCompletionForReturn","getProcessingTime","engineName","extractEngineName","stops","getTemperatureForSamples","top_p","githubNWO","tryGetGitHubNWO","intent_model","intent_tokenizer","intent_threshold","secretKey","requestStart","ConversationInline","uiKindToIntent","postRequest","modelRequestId","totalTimeMs","warningTelemetry","finally","logEngineMessages","fetchWithInstrumentation","ChatRole","jsonData","blockFinished","modelInfo","streamChoicesLogger","messageContent","finishOffset","convertToAPIJsonData","role","Assistant","convertToChatCompletion","basePromptTokens","userInput","userInputTokens","history","elidableHistory","elidableSkills","ElidableText","makePrompt","toConversationPrompt","User","countMessagesTokens","fromHistory","fromSkills","getSkill","getDescriptors","metaPromptFetcher","MetaPromptFetcher","conversationCapabilities","messageText","turnSkills","metaPromptSkillIds","fetchPromptContext","filteredSkillIds","filterSkillIds","conversationSkills","templateSkills","requiredSkills","skillIds","filterTurns","fromMessage","inCodeBlock","codeBlockLines","elidableTextForSourceCode","safelyElideSkill","processedSkill","processSkill","elidedSkill","skillDescriptors","metaPrompt","generateMetaPrompt","promptContext","conversationCallback","System","handleResult","telemetryErrror","parseFromResponse","promptTelemetryData","telemetryErrorData","TestSuffixTypes","TestPrefixTypes","testFileHints","js","go","java","php","dart","rb","py","ps1","fileExists","sourceFile","sourceFilePath","sourceFileName","sourceFileExtension","fileHint","testFileNames","testName","testFolder","determineTestFolder","testFileName","testFilePath","testFileExtension","implFileNames","implName","implFolder","determineImplFolder","implFileName","implFilePath","findExampleTestFile","testFiles","findFiles","_readdir","testPath","withFileTypes","dirent","getRelativeTestFolder","relativeFolder","potentialTestFile","testHint","implFile","workspaceFolder","getWorkspaceFolder","fileExistFn","finder","TestFileFinder","correspondingTestFile","findTestFileForSourceFile","activeDocumentIsTest","isTestFile","asTestFilePrompt","exampleTestFile","asExampleFilePrompt","testFile","correspondingImplFile","findImplFileForTestFile","asImplFilePrompt","fileAsPrompt","StaticPromptTemplate","userMessage","GenerateTestsTemplate","docs","activeDoc","sortByAccessTimes","SimplifyTemplate","FixTemplate","ExplainTemplate","testUri","CorrespondingSourceFileSkillProcessor","PromptForTestGeneration","fromTestFile","_resolver","implUri","CorrespondingTestFileSkillProcessor","fromImplementationFile","visibleRange","selection","CurrentEditorSkillProcessor","excerptLine","CurrentSelectionSkillProcessor","activeDocument","activeDocumentSelection","selectedText","fileContext","DebugConsoleSkillProcessor","upstream","isRebasing","remotes","GitMetadataSkillProcessor","problems","ProblemsInActiveDocumentSkillProcessor","problem","labels","ProjectLabelsSkillProcessor","TerminalOutputSkillProcessor","telemetryMessage","restrictedProperties","documentLength","standardTelemetryData","restrictedTelemetryData","telemetryPrefixForUiKind","getCodeBlocks","textLines","codeBlockLanguages","languageStack","promptTokenLen","suggestion","turnIndex","messageCharLen","offTopic","numCodeBlocks","userMessageId","telemetryDataWithPrompt","messagesJson","isDescendant","descendant","copilotIgnoreLogger","COPILOT_IGNORE_FILE","setPattern","ignoreFile","removePattern","removeWorkspace","fileCount","isIgnored","ignoreIterations","searchRank","cur","rel","relative","endTimeMs","ignoreFileCount","deltaMs","toRank","measure","CopilotIgnore","setIgnoredStatus","onDidWorkspaceRemove","onDidIgnorePatternMove","oldPath","newPath","onDidIgnorePatternDelete","onDidIgnorePatternCreate","isCopilotIgnoreFile","CompletionType","CopilotPanelScheme","OPEN_COPILOT","CompletionContext","insertPosition","completionType","appendToCompletion","contextObj","returnPosition","remain","completionContextPrimer","fromJSONParse","solutionsLogger","generateSolutionsStream","solutions","locationFactory","getDocument","promptResponse","extractPrompt","trailingWs","completionTypeToString","telemetrizePromptLength","solutionCount","promptEndPos","forLanguage","isSupportedLanguage","contextIndent","contextIndentation","next_indent","prompt_tokens","prefixTokens","suffix_tokens","suffixTokens","extractRepoInfoInBackground","completionParams","getEngineURL","getDogFood","getUserKind","Panel","requestLogProbs","force_indent","trim_by_indentation","parsingBlockFinished","fetchAndStreamCompletions","choices","choice","choiceCopy","trimRight","prependChoices","cleanupIndentChoices","postProcessChoice","apiChoice","display","displayBefore","displayStartPos","getNodeStart","trimLastLine","lineCursorHistory","fileCursorHistory","singleFile","numFocused","clickCount","lastClickTime","getDocs","docTime","sortedDocsByClickTime","sortedDocsByClickCount","handleException","isHandlingRejection","accessTimes","aAccessTime","cursorHistoryManager","CursorHistoryManager","registerCursorTracker","selections","textEditor","anchor","CERTIFICATE_ERRORS","notifiedErrorCodes","supportsSSC","didNotifyBefore","displayCertificateErrorNotification","learnMoreLink","certificateErrorMessage","showCertificateWarningMessage","learnMoreAction","userResponse","EditorExperimentFilters","trimVersionSuffix","features","registerStaticFilters","defaultFilters","buildInfo","editorSession","Filter","ApplicationVersion","ClientId","ExtensionName","ExtensionVersion","TargetPopulation","Public","createDefaultFilters","addEditorSpecificFilters","createAllFilters","registerDynamicFilter","CopilotOverrideEngine","ExpTreatmentVariables","ExpConfig","assignmentContext","telemetryExpProblem","createEmptyConfig","addToTelemetry","ExpServiceTelemetryNames","featuresTelemetryPropertyName","assignmentContextTelemetryPropertyName","FilterSettingsToExpConfigs","task","Task","fetchExperiments","toHeaders","getCachedExpConfig","producer","expirationMs","storeResult","staticFilters","dynamicFilters","upcomingDynamicFilters","assignments","getDynamicFilterValues","registerUpcomingDynamicFilter","requestFilters","granularityDirectory","getGranularityDirectory","preGranularityFilters","makeFilterSettings","rememberedGranularityExtension","extendFilters","expAccordingToRememberedExtension","getExpConfig","newFilterSettings","GranularityByCallBuckets","NaN","GranularityTimePeriodSizeInH","currentGranularityExtension","backgroundQueue","upcomingDynamicFilterCheckDelayMs","upcomingFilter","otherFilterSettingsToPrefetch","prepareForUpcomingFilters","filtersAndExp","GranularityDirectory","FilterSettings","fetchExpConfig","createFallbackConfig","getMinutes","upcomingTimeBucketMinutes","withChange","defaultExpConfig","getAssignment","DebounceMs","DebouncePredict","ContextualFilterEnable","ContextualFilterEnableTree","ContextualFilterAcceptThreshold","contextualFilterAcceptThreshold","ContextualFilterExplorationTraffic","contextualFilterExplorationTraffic","disableLogProb","OverrideBlockMode","FastCancellation","OverrideNumGhostCompletions","reasons","DropCompletionReasons","repoNwo","fileType","userKind","dogFood","CopilotRepository","CopilotFileType","CopilotUserKind","CopilotDogfood","CustomEngine","BeforeRequestWaitMs","MultiLogitBias","RequestMultilineExploration","SuffixPercent","SuffixMatchThreshold","FimSuffixLengthThreshold","SuffixStartMode","Cursor","CursorTrimStart","SiblingBlock","SiblingBlockTrimStart","cushman001","mock","NumberOfSnippets","DEFAULT_NUM_OF_SNIPPETS","SnippetPercent","NeighboringTabsOption","Conservative","Medium","Eager","EagerButLittle","EagerButMedium","EagerButMuch","RetrievalComparable","NeighboringSnippetTypes","NeighboringSnippetType","NeighboringFunctions","NeighboringSnippets","CursorHistoryMatcher","NeighboringFileType","CursorMostRecent","CursorMostCount","WorkspaceSharingSameFolder","WorkspaceSmallestPathDist","OpenTabsAndCocommitted","OpenTabs","CursorSnippetsPickingStrategy","CursorOnly","JaccardCursor","CursorJaccard","RetrievalStrategy","RetrievalServerRoute","SymbolDefinitionStrategy","MaxPromptCompletionTokens","HybridInference","HybridInferenceThreshold","RequestMultiOnNewLine","RequestMultiModel","RequestMultiModelThreshold","filterHeaders","SyntaxError","annotatedError","vscodeConfig","Configs","Id","AssignmentContext","telmetryNames","CopilotClientTimeBucket","extends","otherFilterSettings","telemetryName","BUCKETFILTER","clock","defaultGranularity","DEFAULT_GRANULARITY","selectGranularity","rememberedFilters","granularity","byCallBuckets","timePeriodSizeInH","newGranularity","TimeBucketGranularity","setByCallBuckets","setTimePeriod","implementation","upcomingValues","getCurrentAndUpComingValues","GranularityImplementation","getUpcomingValues","ConstantGranularity","fetchBeforeFactor","lengthMs","timePeriodLengthMs","numBuckets","numByCallBuckets","getTimePeriodBucketString","timeHash","dateToTimePartString","upcomingTimePeriodBucketStrings","getUpcomingTimePeriodBucketStrings","upcomingByCallBucketStrings","getUpcomingByCallBucketStrings","upcomingTimePeriodBucketString","upcomingByCallBucketString","inABit","_cache","promptKey","previousLabel","previousLabelTimestamp","probabilityAccept","getLastLineLength","contextualFilterEnableTree","cfManager","yt_1","acw","dt_1","ln_dt_1","ln_promptLastLineLength","promptLastCharIndex","promptPrefix","promptLastChar","contextualFilterCharacterMap","ln_promptLastLineRstripLength","promptLastRstripCharIndex","promptPrefixRstrip","trimEnd","promptLastRstripChar","ln_documentLength","ln_promptEndPos","relativeEndPos","languageIndex","contextualFilterLanguageMap","treeScore","sum","contextualFilterIntercept","contextualFilterWeights","javascript","typescript","typescriptreact","python","vue","javascriptreact","css","cpp","scss","markdown","csharp","rust","ruby","$","E","J","N","Q","U","V","var0","var1","var2","var3","var4","var5","var6","var7","var8","var9","var10","var11","var12","var13","var14","var15","var16","var17","var18","var19","var20","var21","var22","var23","var24","var25","var26","var27","var28","var29","var30","var31","var32","var33","var34","var35","var36","var37","var38","var39","var40","var41","var42","var43","var44","var45","var46","var47","var48","var49","var50","var51","var52","var53","var54","var55","var56","var57","var58","var59","var60","var61","var62","var63","var64","var65","var66","var67","var68","var69","var70","var71","var72","var73","var74","var75","var76","var77","var78","var79","var80","var81","var82","var83","var84","var85","var86","var87","var88","var89","var90","var91","var92","var93","var94","var95","var96","var97","var98","var99","var100","sigmoid","completionResults","textEditorOptions","lastShownCompletionIndex","currentLine","normalizeIndentCharacter","displayNeedsWsOffset","wordRange","isMiddleOfTheLine","rangeFromStart","textBefore","coversSuffix","completionIndex","TypingAsSuggested","lastShownCompletion","restCompletions","expDebounce","debouncePredict","acceptProbability","sigmoidShift","sigmoidSlope","debounceMs","lastPrefix","lastSuffix","lastPromptHash","genericGetCompletionsFromNetwork","requestContext","processChoices","ghostTextLogger","numGhostCompletions","overrideNumGhostCompletions","shouldDoParsingTrimming","multiline","getNumGhostCompletions","shouldDoServerTrimming","multiLogitBias","newProperties","GhostText","logit_bias","newMeasurements","engineURL","delayMs","mkBasicResultTelemetry","shouldFailForDebugPurposes","makeGhostAPIChoice","ghostChoice","forceSingleLine","ghostTextDebouncer","Debouncer","recordLastSuccessfulCompletionContext","promptHash","appendToCache","newContents","keyForPrompt","getCachedChoices","adjustLeadingWhitespace","ws","textLeftWs","trimLeft","telemetryWithAddData","compCharLen","numLines","meanAlternativeLogProb","extendedTelemetry","confidence","ghostTextScoreConfidence","quantile","ghostTextScoreQuantile","telemetryPerformance","performanceKind","processingTimeMs","requestTimeMs","completionCharLen","preIssuedTelemetryData","inlineSuggestion","isMiddleOfLine","selectionPosition","isValidMiddleOfLine","endOfLine","isValidMiddleOfTheLinePosition","isInlineSuggestion","statusBarItem","featuresFilterArgs","requestMultilineExploration","requestMultilineOnNewLine","requestMultiOnNewLine","requestMultiModel","requestMultiModelThreshold","ghostTextStrategy","requestMultiline","isCyclingRequest","isEmptyBlockStartDocumentPosition","isEmptyBlockStart","isEmptyBlockStartDocumentPositionRangeEnd","documentLineCount","positionLine","multiLineOnNewLineExp","multiModelScore","requestMultilineScore","multiLineOnModel","multiLineOnModelScore","requestMultilineExperiment","shouldRequestMultiline","adjustedPosition","getGhostTextStrategy","choicesTyping","prefixMatches","suffixMatches","lastCachedCompletion","remainingPrefix","completionsToReturn","completionToReturn","getCompletionsForUserTyping","choicesCache","cachedChoice","getCompletionsFromCache","Cache","getLocalInlineSuggestion","beforeRequestWaitMs","contextualFilterEnable","computeContextualFilterScore","detectedLanguage","detectLanguage","lineBeforeCursor","restOfLine","beforeCursorWhitespace","afterCursorWhitespace","detectedLanguageId","fileExtension","promptChoices","promptBackground","typeFileHashCode","neighborSource","typeFiles","promptComputeTimeMs","computeTimeMs","contextualFilterScore","gitRepoInformation","ComputationStatus","PENDING","gitRepoUrl","gitRepoHost","gitRepoOwner","gitRepoName","repo","gitRepoPath","isMultiline","telemetryIssued","networkChoices","processingTime","choicesStream","apiChoices","telemetryBlob","getAllCompletionsFromNetwork","resultChoices","Cycling","debounceLimit","getDebounceLimit","debounce","choicesIterator","firstRes","firstChoice","remainingChoices","addToCache","remainingPromise","cacheDone","fastCancellation","innerChoice","redactedChoice","getCompletionsFromNetwork","choicesArray","postProcessedChoices","asyncIterableFromArray","hasSuffix","checkSuffix","choiceTelemetryData","hasComment","ignoreEmptyLines","commentMap","commentChar","languageMap","PromptFeatures","promptComponentText","lastLine","firstAndLast","firstAndLastTrimEnd","firstLineLength","lastLineLength","lastLineRstripLength","lastLineStripLength","rstripLength","stripLength","rstripLastLineLength","rstripLastLineStripLength","secondToLastLineHasComment","rstripSecondToLastLineHasComment","prefixEndsWithNewline","lastChar","rstripLastChar","firstChar","lstripFirstChar","trimStart","MultilineModelFeatures","prefixFeatures","suffixFeatures","constructFeatures","numFeatures","langFeatures","prefixLastCharFeatures","prefixRstripLastCharFeatures","suffixFirstCharFeatures","suffixLstripFirstCharFeatures","constructMultilineFeatures","multilineModelPredict","isEmptyLine","toReplace","trimmed","removedCharacters","indentSize","spacesAtStart","insertionCategory","extraFlags","copilot_trackingId","telemetryRaw","contributors","contributor","contributeHeaders","contributeHeaderValues","isNewInstall","handleInstall","isNewUpgrade","handleUpgrade","markUpgraded","handleUninstall","previouslyInstalled","knownLanguages","abap","bat","bibtex","blade","clojure","filenames","ql","coffeescript","dockerfile","elixir","erlang","fsharp","groovy","terraform","erb","razor","haml","handlebars","haskell","ini","jsonc","julia","kotlin","less","lua","makefile","perl","powershell","pug","sass","scala","shellscript","slim","solidity","stylus","svelte","swift","latex","verilog","vb","xml","xsl","yaml","Language","isGuess","CachingLanguageDetection","FilenameAndExensionLanguageDetection","NotebookLanguageDetection","notebookDelegate","isNotebook","detectLanguageForRegularFile","detectCellLanguage","activeCell","getCells","vscode","languageIdByExtensionTracker","LanguageIdTracker","extensionWithoutTemplate","extensionWithoutTemplateLanguage","languageIdWithGuessing","detectLanguageId","computeFullyQualifiedExtension","knownTemplateLanguageExtensions","filenameWithoutExtension","knownFileExtensions","isExtensionValidForTemplateLanguage","limitations","templateLanguageLimitations","candidatesByExtension","determineLanguageIdByCandidates","candidates","determineMostSeenLanguages","mostSeenLanguageId","mostRecentLanguageId","seenLanguages","preciseTimestamp","bigint","mostRecentIds","logVerbose","verboseLogging","appendLine","targets","stringToLevel","levelString","logTarget","targetOverride","sendErrorTelemetry","secureMessage","standardMessage","safeError","invalidMacAddresses","validateMacAddress","tempCandidate","macAddress","ifaces","networkInterfaces","networkInterface","createHash","getMacMachineId","certLogger","FeatureAwareCertificateReader","createRealReader","EmptyRootCertificateReader","notifier","realReader","noopReader","cachedReader","ErrorHandlingCertificateReader","createPlatformRootCertificateReader","rootCertificates","envReader","EnvironmentVariableRootCertificateReader","cachingReader","CachingRootCertificateReader","LinuxRootCertificateReader","MacRootCertificateReader","WindowsRootCertificateReader","UnsupportedPlatformRootCertificateReader","fallbackCerts","delegates","flat","extraCertsFile","NODE_EXTRA_CA_CERTS","readCertsFromFile","rootCAs","certPath","macCa","certFilePath","nonEmptyCerts","uniqueCerts","_certificateReader","getCertificates","_vscodeAdditionalCaCerts","secureContext","createSecureContext","addCACert","createSocketFactory","userSettings","connectionTimeoutInMs","certificateConfigurator","applyToRequestOptions","enhanceProxySettings","proxySocketFactory","createSocket","fetchApi","createFetchApi","RootCertificateConfigurator","_proxySettings","NODE_TLS_REJECT_UNAUTHORIZED","helixFetch","helixOptions","disconnectAll","makeAbortController","parsePort","portNumber","getAuth","HTTPS_PROXY","https_proxy","HTTP_PROXY","http_proxy","openingIndex","endingIndex","ipType","isIP","ProxySocketError","KerberosProxySocketFactory","TunnelingProxySocketFactory","successfullyAuthorized","getProxyCacheKey","reauthorize","authorizeAndCreateSocket","proxyAuthorization","authorize","spn","computeSpn","configuredSpn","defaultSpn","createConnectRequestOptions","connectRequest","useChunkedEncodingByDefault","removeAllListeners","localAddress","configureProxyAuthorization","DotComAuthority","DotComUrl","recalculateUrls","isGitHubEnterprise","isEnterprise","authority","tokenUrl","deviceFlowStartUrl","deviceFlowCompletionUrl","userInfoUrl","newUrl","apiUri","Utils","joinPath","getBody","cancelToken","OPENAI_PROXY_HOST","V1_ENGINES_COPILOT_CODEX","_getOverrideProxyURL","TEST_ENGINE_PATHS","nwo","dogfood","engineOverride","customEngine","_getEnginePath","reqIdStr","postProcessChoices","allowEmptyChoices","asyncIterableFilter","dropCompletionReasons","prepareSolutionForReturn","logEnginePrompt","calculateMeanLogProb","logprobs","token_logprobs","logProbSum","iterLimit","calculateMeanAlternativeLogProb","top_logprobs","MAX_PROMPT_LENGTH","DEFAULT_CHARACTER_MULTIPLIER","logEngineCompletion","completionLines","numShots","configTemp","APIJsonDataStreaming","text_offset","splitChunk","dataLines","newExtra","expectedNumChoices","stats","ChunkStats","processSSEInner","extraData","networkRead","maybeCancel","dataLine","lineWithoutData","finishSolutions","allSolutionsDone","hasNewLine","finish_reason","loggedReason","completionChoiceFinishReason","markYielded","extraDataJson","streamingData","flattenedLogprobs","flattenedTopLogprobs","flattenedOffsets","flattenedTokens","convertToAPIChoice","ChoiceStats","yieldedTokens","seenTokens","postInsertionLogger","captureTimeouts","captureCode","captureRejection","isFimEnabled","promptElementRanges","capturedCode","terminationOffset","documentText","documentTextBefore","hypotheticalPromptResponse","hypotheticalPrompt","hypotheticalResponse","contextIndentationFromText","indentTerminationFunction","indentationBlockFinished","terminationResult","maxOffset","margin","lexAlignment","lexEditDistance","fraction","lexDistance","needleLexLength","distance","charEditDistance","editDistance","relativeLexEditDistance","completionLexLength","foundOffset","stillInCodeHeuristic","postInsertConfiguration","triggerPostInsertionSynchroneously","telemetryRejected","positionTracker","ChangeTracker","promptTelemetry","hypotheticalPromptPrefixJson","hypotheticalPromptSuffixJson","hypotheticalPromptJson","customTelemetryData","capturedCodeJson","trackedOffset","terminationOffsetInCapturedCode","telemetryAccepted","trimmedCompletion","tracker","stillInCodeCheck","finding","afterAcceptedTelemetry","checkStillInCode","CoCommittedFiles","docManager","commitFileResolver","cocommittedFilesCache","computeInBackgroundAndMemoize","getCoCommittedFiles","neighboringFileType","maxNumFiles","coCommittedFiles","getCoCommitResult","totalLen","cocommittedFile","tryGetTextDocument","NeighborSource","MAX_NEIGHBOR_AGGREGATE_LENGTH","maxNumNeighborFiles","openFiles","fct","cacheSize","resultsCache","inComputation","memorizedComputation","computation","computedResult","neighborFiles","truncateDocs","cocommittedFiles","neighborFileUriSet","considerNeighborFile","neighborLanguageId","workspaceFileSystem","WorkspaceFileSystem","WorkspaceFiles","CommitFileResolver","CursorHistoryFiles","OpenTabFiles","getNeighborFiles","MAX_NEIGHBOR_FILES","EXCLUDED_NEIGHBORS","workspaceFilesCache","getWorkspaceFiles","filePathDistance","targetFilePath","dist","lca","maxNumWorkspaceFiles","blacklist","workspaceUri","include","currentFileRepository","fileRelativePath","visitedFiles","exclude","workspaceFiles","aDist","bDist","workspaceFile","promptlib","isBlockBodyFinished","continuations","continuationRegex","isContinuationLine","indentationOfLine","prevLines","nextLines","seekNonBlank","ind","indIdx","trimmedLine","currentIdx","completionCutOrContinue","previewText","isContinuation","lastLineOfPreview","breakIndentation","extraSpace","promptTrim","extractPromptForSource","_copilotNotAvailable","evaluate","StatusBarEvent","UPDATE","isBlocked","suffixPercent","fimSuffixLengthThreshold","MIN_PROMPT_CHARS","_contextTooShort","prefixLength","suffixLength","maxPromptLength","maxPromptCompletionTokens","neighboringTabs","neighboringTabsOption","neighboringSnippetTypes","numberOfSnippets","snippetPercent","promptOptions","suffixStartMode","tokenizerName","cursorSnippetsPickingStrategy","snippets","retrievalOptions","getRetrievalOptions","queryRetrievalSnippets","symbolDefinitionStrategy","symbolDefSnippets","getSymbolDefSnippets","getSnippets","currentFile","suffixMatchThreshold","fileSystem","promptInfo","getPrompt","getPromptForSource","resPrompt","extractPromptForDocument","extractPromptForNotebook","beforeCells","beforeSource","neighboringCell","activeCellLanguageId","commentBlockAsSingles","addNeighboringCellsToPrompt","nextHandlerId","use_worker_threads","localPromptlib","workerFuns","directFuns","_fileSystem","getPromptProxy","createWorker","getBlockCloseToken","getFunctionPositions","getCallSites","parsesWithoutError","orgs","org","ghnwo","adoNwo","tryGetADONWO","fileUri","baseFolder","backgroundRepoInfo","CompletedComputation","extractRepoInfo","previousUri","configPath","getRepoBaseFolder","getRepoUrlFromConfigText","parsedResult","parseRepoUrl","GitUrlParse","gitConfig","remoteSectionRegex","deprecatedRemoteSectionRegex","setUrlRegex","newSectionRegex","remoteUrl","remoteSection","isWithinMultilineUrl","remoteSectionMatch","urlMatch","snippetFromRetrievalResult","line_info","before_start_line","after_end_line","restrictedTelemetry","corpusId","corpus_config","corpus_id","repo_nwo","repoSha","repo_sha","indexTimestamp","index_timestamp","buildSnippetMatcher","matcherName","matcherThreshold","exactSnippetMatcher","editDistanceSnippetMatcher","lineBasedSnippetMatcher","queryKey","cacheKey","querySnippet","breakUpLongLines","maxLineCharLength","threshold","thresholdType","queryLines","cacheLines","intersection","getRetrievalContext","contextInfo","getCursorContext","tokenLength","RETRIEVAL_CACHE_SNIPPET_MATCHERS","RetrievalCache","matcher","maxUriCacheSize","uriToCache","hashContext","queryContext","uriCache","retrievalId","put","retrievalContext","documentRequestStates","retrievalRequestUrl","serverRouteImpl","processRetrievalResponse","currentRetrievalOptions","unparsedData","impl","filterQuerySnippets","retrievalCache","commonMeasurements","numSnippetsFromServer","numFilteredSnippets","elapsedEmbeddingNs","elapsed_embedding_ns","elapsedKnnNs","elapsed_knn_ns","elapsedFindSourceNs","elapsed_find_source_ns","telemetrizeProcessRetrievalResponse","telemetrizeProcessRetrievalError","snippetMatcherName","snippetMatcherThreshold","requestState","pendingRetrievalId","telemetrizeQueryRetrievalDebounce","minLineCount","minTokenLength","retrievalContextTokens","retrievalLineCount","cursorPos","telemetrizeTooShortContext","cacheHit","cacheLookupStart","cacheLookupElapsed","telemetrizeCacheLookup","lookupCache","telemetrizePostRetrievalRequest","telemetrizePostRetrievalResponse","telemetrizePostRetrievalRequestError","postRetrievalRequest","cachedRetrievalId","cachedSnippets","numSnippetsReturned","telemetrizeQueryRetrievalFromCache","SnippetProviderType","Retrieval","semantics","SnippetSemantics","retrievalStrategy","retrievalServerRoute","maxLineCount","maxTokenLength","range_from","range_to","max_length","getSymbolDefinition","symbolName","symbolDefinitionProvider","shortCircuit","callerFunctions","symbolDefinitionPromises","callerFunc","docInfoSnippet","symbolDefPromises","NOT_BLOCKED_RESPONSE","BLOCKED_REPO_RESPONSE","BLOCKED_POLICY_ERROR_RESPONSE","repoUriToPolicyMap","cachedControlData","fetchControlData","githubtoken","getRepositoryPolicy","blocked","providerRepoKey","cachedPolicy","matchingKey","currentPath","getFilePathChunks","repositoryInfo","isNotRepo","parentFolder","getProviderRepoKey","fetchRepositoryPolicy","_featureEnabled","refreshData","repositoryControl","CopilotRepositoryControl","knownOrg","copilotignore_enabled","shouldUpdateStatusBar","configs","max_token_sequence_length","last_tokens_to_consider","isRepeatedPattern","pi","kmp_prefix_function","tokensBackwards","haystack","needle","curRow","curStart","prevRow","prevStart","substituted","best","emptyLexDictionary","reverseLexDictionary","lexeme","lexGeneratorWords","newState","Space","Other","lexicalAnalyzer","lexGenerator","lexFilter","lexed","notSingleSpace","haystackLexed","needleLexed","dBoth","haystackLexLength","lookupId","needleLexedLength","needleFirst","needleLast","alignment","hLexId","nLexId","hIndex","nIndex","haystackLexeme","ghostTextDisplayInterceptParameter","ghostTextDisplayLog1pcompCharLenParameter","ghostTextDisplayMeanLogProbParameter","ghostTextDisplayMeanAlternativeLogProbParameter","ghostTextDisplayLanguageParameters","ghostTextDisplayQuantiles","Logit","Regressor","coefficient","transformation","contribution","ghostTextRetentionModel","intercept","coefficients","quantiles","logitsToQuantiles","predict","regressor","x0","points","x_after","x_before","y_after","y_before","linearInterpolation","lang","isMiddleOfTheLineSuggestion","postProcessedChoice","nextLine","lineNo","matchesNextLine","completionTextJson","blockCloseToken","nextLineStart","thisLineStart","lineText","maybeSnipCompletion","reporter","shouldSendRestricted","reporterSecure","FailingTelemetryReporter","disposeReporter","disposeReporterSecure","trackingId","optedIn","setupUpdateOnToken","organizationsList","propertiesSchema","measurementsSchema","issuedTime","displayedTime","addExpAndFilterToTelemetry","extendWithEditorAgnosticFields","extendWithConfigProperties","configProperties","telemetryConfig","requestProperties","keysToRemoveFromStandardTelemetryHack","sanitizeKeys","keysExemptedFromSanitization","updateTimeSinceIssuedAndDisplayed","timeSinceIssued","timeSinceIssuedMs","timeSinceDisplayed","timeSinceDisplayedMs","validateData","invalid","validateTelemetryProperties","validateTelemetryMeasurements","m_err","validationError","includeExp","extendWithExpTelemetry","addRequiredProperties","maybeRemoveRepoInfoFromPropertiesHack","definedTelemetryData","makeReadyForSending","_telemetry","promptPrefixCharLen","promptSuffixCharLen","promptCharLen","setUrlForTesting","_telemetryExpProblem","_telemetryRaw","CopilotNonError","thrown","_telemetryError","maybeError","redactedError","redactError","sendRestricted","sendAsException","definedTelemetryDataStub","redactPaths","restrictedError","redactHomeDir","definedTelemetryDataSecure","_telemetryException","promptPrefixJson","promptSuffixJson","promptJson","AuthTelemetryNames","AuthNotifyShown","AuthNotifyDismissed","NewGitHubLogin","GitHubLoginSuccess","GitHubLoginFailed","APP_INSIGHTS_KEY","APP_INSIGHTS_KEY_SECURE","telemetryNamespace","telemetryEnabled","AzureInsightReporter","IngestionEndpointPattern","configureReporter","decorateWithCommonProperties","fakeResponse","fakeRequest","monkeyPatchMakeRequest","appInsights","createAppInsightsClient","qualifyEventName","excerpt","startCert","endCert","createTestCertificateReader","TestProductFeatures","TestNotificationSender","TestUrlOpener","NoOpStatusReporter","TestLanguageDetection","NoAdditionalExperimentFilters","LibTestsEditorInfo","TestLocationFactory","LocalFileSystem","tokenFileName","createTokenManager","tokenStr","readTestingGitHubToken","CopilotTokenManagerFromGitHubToken","GH_COPILOT_TOKEN","TestCertificateReader","FakeHeaders","strings","toStream","FakeFetcher","determineEnvFlagEnabled","determineVerboseLoggingEnabled","telemetryLogging","determineTelemetryLoggingEnabled","testMode","determineRecordInput","collectCapturedTelemetry","strictEqual","isEvent","_withTelemetryCapture","forceTelemetry","work","startFakeTelemetryServerIfNecessary","oldUrl","waitTimeMultiplier","collectMessagesWithRetry","assertion","errorProps","hackOptOutListener","fakeTelemetryServer","fakeTelemetryServerPort","newPort","findFreePort","workerData","eventsMatching","positionToString","origEnv","teardown","openedUrls","warningPromises","warningPromise","docUri","assertLanguageHasBeenDetected","expectedLanguageId","deepStrictEqual","FixedLanguageDetection","ProductFeature","testEnvelope","newToken","InMemoryTextDocument","_cells","_openTextDocuments","_closedTextDocuments","_notebookDocuments","setClosedTextDocument","setNotebookDocument","docPath","folderPath","escapeForRegExp","homedirRegExp","homedir","pathSepRegExp","rootDirRegExp","shortCircuitMs","shortCircuitReturn","LineWithValueAndCost","adjustValue","adjust","recost","coster","ellipsis","indentEllipses","cost","infiniteWorth","infiniteIndentation","trimmedEllipsis","totalCost","defensiveCounter","leastDesirable","least","mostRecentNonBlankLine","newEllipis","newTotalCost","oldContent","newContent","changedLinesOld","changedLinesNew","oldTree","mapLabels","flattenVirtual","parseTree","newTree","visitTree","fromTreeWithFocussedLines","fromTreeWithValuedLines","tree","valuedLines","foldTree","deparseLine","DEFAULT_TREE_TRAVERSAL_CONFIG","worthUp","worthSibling","worthDown","treeWithDistances","isBlank","maxChildLabel","subs","new_values","nodeLabel","focusOnLastLeaf","focusOnFirstLine","treeWithFocussedLines","foundLastTrue","subnode","isLine","_cost","defaultFileSystem","isVirtual","isTop","sourceLine","cut","deparseTree","accum","cutAt","cutAtSet","cuts","curUndef","describeTree","labelString","encodeTree","subString","firstLineOf","lastLineOf","registerLanguageSpecificParser","processMarkdown","processJava","javaLabelRules","buildLabelRules","package","import","class","interface","javadoc","comment_multi","comment_single","opener","closer","originalTree","labelLines","combineClosersAndOpeners","labelVirtualInherited","visitor","_visit","subtree","condition","newSubs","shouldContinue","skip","rebuild","rebuilt","topNode","MarkdownLabelRules","heading","subheading","subsubheading","headingLevel","currentHierarchy","oldTreeSubs","groupBlocks","parseRaw","rawLines","indentations","parseNode","parseSubs","lineNode","initialLine","parentIndentation","lastBlank","blankNode","parsedLine","labelRules","ruleMap","returnTree","rebuildTree","lastNew","directOlderSibling","firstNonVirtual","subsToKeep","subsToWrap","wrappedSubs","virtualNode","clearLabelsIf","isDelimiter","currentBlockIndentation","nodesSinceLastFlush","lastNodeWasDelimiter","flushBlockIntoNewSubs","final","virtual","subIsDelimiter","genericLabelRules","LANGUAGE_SPECIFIC_PARSERS","languageSpecificParser","languageCommentMarkers","jsx","tex","dontAddLanguageMarker","shebangLines","hasLanguageMarker","markers","trailingNewline","commented","resolveLocalTypeScriptImport","importerPath","imp","namedChild","getTypescriptImportedNames","importClause","namedImports","namedImport","namedChildren","childForFieldName","alias","exportsCache","extractTypeScriptDeclaration","srcString","defn","decl","extractTypeScriptFunctionDeclaration","memberDecls","member","extractTypeScriptMemberDeclaration","extractTypeScriptBodyDecls","getDocComment","docCommentNode","getFirstPrecedingComment","firstChild","getIndentation","docComment","getExportedDeclarations","parseTreeSitter","queryExports","rootNode","captures","hasError","exportedDecl","exportedDecls","localImportRegex","localImportContext","lastImportOffset","lastImport","newlineAfterLastImport","lastTypeScriptLocalImportOffset","imports","toplevelStmt","getTypeScriptImports","srcUri","importedNames","importedName","extractTypeScriptLocalImportContext","SnippetProviders","LanguageSnippetProvider","PathSnippetProvider","startThreading","workerProxy","WASMLanguage","languageIdToWasmLanguageMapping","Python","JavaScript","TypeScript","TSX","Go","Ruby","languageIdToWasmLanguage","jsFunctionQuery","functionQuery","tsx","declaratorWithRequire","commonJsImport","tsImportQueries","importsQuery","jsExportQueries","exportsQuery","globalVarsQuery","jsFunctionTypes","functionTypes","isFunctionParent","nd","loadedLanguages","getLanguage","wasmLanguage","loadedLang","Parser","wasmFile","loadWasmLanguage","treeSitterLanguage","setLanguage","parsedTree","innerQuery","queries","queryFunctions","docstringQuery","blockNode","namedChildCount","declarator","rhs","previousSibling","endPosition","positions","callSiteQuery","pretruncateOffset","linesBeforeTruncation","callers","resIndex","callerName","callerLineNo","callerStartChar","argsStartIndex","argsEndIndex","cap","capIndex","column","callerLineCol","BaseBlockParser","nodeMatch","nodeTypesWithBlockOrStmtChild","nodeToComplete","descendantForIndex","blockNodeType","fieldLabel","getNextBlockAtPosition","getNodeMatchAtPosition","nextComment","nextSibling","commentInline","commentAtEnd","lengthOfBlock","RegexBasedBlockParser","blockEmptyMatch","lineMatch","isBlockStart","blockText","rewindToNearestNonWs","prevNewline","nextNewline","getLineAtOffset","isBlockBodyEmpty","lineStart","outdented","fst","snd","fstIndent","sndIndent","TreeSitterBasedBlockParser","startKeywords","emptyStatementType","curlyBraceLanguage","isBlockEmpty","queryPythonIsDocstring","nodeAtPos","currNode","errorNode","blockParentNode","prevSibling","keyword","colonNode","parenCount","sibling","formalParameters","leftCurlyBrace","expectedType","wasmLanguageToBlockParser","class_definition","elif_clause","else_clause","except_clause","finally_clause","for_statement","function_definition","if_statement","try_statement","while_statement","with_statement","arrow_function","catch_clause","do_statement","for_in_statement","function","function_declaration","generator_function","generator_function_declaration","method_definition","class_declaration","ambient_declaration","internal_module","abstract_class_declaration","communication_case","default_case","expression_case","func_literal","labeled_statement","method_declaration","type_case","begin_block","end_block","lambda","until","while","case","do","if","unless","do_block","getBlockParser","cachedSuffix","LanguageMarkerOption","PathMarkerOption","SnippetPositionOption","SnippetSelectionOption","LocalImportContextOption","LineEndingOptions","SuffixMatchOption","SuffixOption","MAX_EDIT_DISTANCE_LENGTH","TOKENS_RESERVED_FOR_SUFFIX_ENCODING","PromptOptions","languageMarker","Top","pathMarker","Declarations","snippetPosition","TopOfText","snippetProviderOptions","normalizationFunction","normalizationParams","retrieval","reservedSnippetCount","lineEnding","ConvertToUnix","suffixMatchCriteria","Levenshtein","selectionValue","snippetSelection","newOptions","providerOptions","TopK","snippetSelectionK","languageNormalizationMap","jade","cshtml","normalizeLanguageId","neighbors","completeOptions","useCachedSuffix","priorities","Priorities","directContextPriority","justBelow","TOP","languageMarkerPriority","Always","pathMarkerPriority","localImportContextPriority","lowSnippetPriority","highSnippetPriority","justAbove","promptWishlist","PromptWishlist","languageMarkerLine","languageSnippet","NoMarker","PromptElementKind","LanguageMarker","pathMarkerLine","pathSnippet","Path","PathMarker","NoContext","extractLocalImportContext","newLineEnded","ImportedFile","neighborSnippets","getNeighborSnippets","allSnippets","addSnippetsNow","budget","processSnippetsForWishlist","SimilarFile","RetrievalSnippet","SymbolDef","SymbolDefinition","announcedSnippet","priority","normalizedScore","source_lines","directContext","DirectlyAboveCursor","lastLineStart","directContextBeforePartialLastLine","partialLastLine","appendLineForLine","BeforeCursor","AfterCursor","actualSuffix","fulfill","getSiblingFunctionStart","availableTokens","prefixTargetTokens","suffixTargetTokens","suffixText","takeFirstTokens","Equal","findEditDistanceScore","startingOffset","anc","getAncestorWithSiblingFunctions","isFunctionDefinition","defaultCursorContextOptions","cursorContextOptions","takeLastLinesTokens","WINDOWED_TOKEN_SET_CACHE","leavingKey","CustomizedFixedWindowSizeJaccardMatcher","WindowedMatcher","referenceDoc","windowLength","getWindowsDelineations","getBasicWindowDelineations","_getCursorContextInfo","similarityScore","computeScore","retrieveAllSnippets","objectDoc","sortOption","SortOptions","Descending","referenceTokens","tokensInWindows","needToComputeTokens","tokenizedLines","tokensInWindow","sortScoredSnippets","jaccardMatcher","Ascending","snippetA","snippetB","markerToSnippet","nonOverlappingSnippets","snippetMarker","NeighboringTabs","snippetSelectionOption","BestMatch","bestMatch","findBestMatch","findTopKMatches","snippetsByCursor","retrieveCursorSnippets","bestCursorScore","bestSnippets","bestInMiddle","bestSnippetsByCursor","bestSnippetsBoundaryByCursor","bestSnippet","gatherNonOverlappingSnippets","snippetCandidates","jaccardMap","topKByJaccard","cursorMap","resortedTopKByJaccard","cursors","pointType","sparsePoints","leftBoundary","rightBoundary","numCursors","previousLine","FACTORY","FixedWindowSizeJaccardMatcher","FunctionJaccardMatcher","FunctionalMatcher","neighborOptionToSelection","snippetLength","conservative","medium","eager","eagerButLittle","eagerButMedium","eagerButMuch","retrievalComparable","matcherFactory","getMatcher","neighbor","findMatches","Tokenizer","stopsForLanguage","SPECIFIC_STOPS","GENERIC_STOPS","splitIntoWords","getMatchingScore","neighborDoc","neighborDocTokens","neighborFuncs","funcPositions","func_source","getNeighboringFunctions","ENGLISH_STOPS","snippetSemanticsToString","Alias","announceSnippet","targetDocLanguageId","headlinedSnippet","normalizeSnippetScore","providerScore","snippetRem","sortSnippetsDescending","selectSnippets","normalizedSnippets","snippetsByProvider","totalPrioritized","highPriorityBudget","usedBudget","processedSnippets","nextHighPriority","nextLowPriority","announced","windows","labeledTree","clearLabels","totalLength","firstLineAfter","getStartLine","getEndLine","lengthFromAToBInclusive","lastBThatWasntABlank","endLineTrimmedForBlanks","SnippetProvider","getLanguageMarker","getPathMarker","buildSnippets","matrix","ord","textDecoder","decodeStr","get_char_pairs","pairs","prev_char","pat","tokenizers","MockTokenizer","BPETokenizer","byte_encoder","byte_decoder","textEncoder","TextEncoder","encodeStr","VOCAB","ENCODER","encoder_path","encoder_json","bpe_merges","bpe_ranks","dictZip","cs_","chr","bytes_to_unicode","byteEncodeStr","mutatingConcat","bpe","minPairs","joined_pair","rank","minPairsKeys","bigram","new_bytes","matchAll","chunk_tokens","takeLastTokens","suffixT","detokenize","prefix_t","tokenizeStrings","PromptBackground","markUsed","IsSnippet","undoMarkUsed","markUnused","PromptChoices","usedCounts","unusedCounts","PromptElementRanges","usedElements","previousKind","nextRangeStart","lineEndingOption","getContent","convertLineEndings","requires","excludes","dependentId","dependeeId","dependent","dependee","excludingId","excludedId","excluding","excluded","tallyOfChoices","indexedContent","idsThatHaveAlreadyBeenAdded","idsConflictingWithAlreadyAddedIds","budgetBreakingElement","remainingContent","remainingBudget","budgetUse","probableNextElem","targetIndex","bestIndex","getMinimalGreater","promptLength","removeAfterAll","extendedContent","registeredPriorities","BOTTOM","nearestNeighbor","between","sleep","workerFns","WorkerProxy","fns","isMainThread","configureWorkerResponse","initWorker","port1","port2","MessageChannel","transferList","handleExit","proxyFunctions","stopThreading","unproxyFunctions","originalFn","proxiedFunction","unsafeStringify","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","msecs","nsecs","dt","tl","tmh","v35","hashfunc","generateUUID","stringToBytes","DNS","randomUUID","LIB","_makeLong","posix","isUri","revive","_formatted","external","_fsPath","_sep","$mid","resolvePath","TreeSitter","initPromise","currentScript","moduleOptions","resolveInitPromise","moduleOverrides","arguments_","thisProgram","quit_","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","importScripts","ENVIRONMENT_IS_NODE","scriptDirectory","read_","readAsync","readBinary","setWindowTitle","locateFile","logExceptionOnExit","ExitStatus","isFileURI","keepRuntimeAlive","XMLHttpRequest","responseText","responseType","onload","print","printErr","quit","STACK_ALIGN","dynamicLibraries","wasmBinary","noExitRuntime","wasmMemory","WebAssembly","ABORT","EXITSTATUS","UTF8Decoder","HEAP8","HEAPU8","HEAP16","HEAPU16","HEAP32","HEAPU32","HEAPF32","HEAPF64","UTF8ArrayToString","UTF8ToString","stringToUTF8Array","stringToUTF8","lengthBytesUTF8","updateGlobalBufferAndViews","INITIAL_MEMORY","Memory","wasmTable","Table","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","__RELOC_FUNCS__","runtimeInitialized","preRun","addOnPreRun","callRuntimeCallbacks","initRuntime","preMain","postRun","addOnPostRun","addOnInit","runDependencies","runDependencyWatcher","dependenciesFulfilled","addRunDependency","monitorRunDependencies","removeRunDependency","onAbort","RuntimeError","dataURIPrefix","wasmBinaryFile","tempDouble","tempI64","isDataURI","getBinary","getBinaryPromise","credentials","createWasm","asmLibraryArg","wasi_snapshot_preview1","GOTHandler","relocateExports","getDylinkMetadata","neededDynlibs","mergeLibSymbols","asm","__wasm_call_ctors","__wasm_apply_data_relocs","instantiate","instantiateWasm","instantiateStreaming","ASM_CONSTS","GOT","CurrentModuleWeakSymbols","Global","mutable","customSections","tlsExports","weakImports","memorySize","memoryAlign","tableSize","tableAlign","asmjsMangle","_main","LDSO","loadedLibsByName","loadedLibsByHandle","dynCallLegacy","wasmTableMirror","getWasmTableEntry","dynCall","createInvokeFunction","stackSave","stackRestore","_setThrew","___heap_base","zeroMemory","getMemory","_malloc","__heap_base","isInternalSym","uleb128Encode","sigToWasmTypes","generateFuncType","convertJsFunctionToWasm","updateTableMap","functionsInTableMap","freeTableIndexes","getEmptyTableSlot","grow","setWasmTableEntry","addFunction","updateGOT","resolveGlobalSymbol","stub","alignMemory","loadWebAssemblyModule","loadModule","firstLoad","memAlign","memoryBase","tableBase","tableGrowthNeeded","moduleExports","resolveSymbol","proxyHandler","postInstantiation","addEmAsm","addr","arity","eval","allowUndefined","reportUndefinedSymbols","__start_em_asm","__stop_em_asm","jsString","applyRelocs","loadAsync","loadDynamicLibrary","nodelete","refcount","findObject","preloadedWasm","preloadDylibs","___memory_base","___stack_pointer","___table_base","nowIsMonotonic","_emscripten_get_now","__emscripten_get_now_is_monotonic","_abort","_emscripten_date_now","_emscripten_memcpy_big","copyWithin","getHeapMax","emscripten_realloc_buffer","_emscripten_resize_heap","SYSCALLS","DEFAULT_POLLMASK","calculateAt","PATH","isAbs","FS","getStreamFromFD","ErrnoError","join2","doStat","getPath","dev","ino","nlink","gid","rdev","atime","doMsync","msync","varargs","getStr","getStream","_proc_exit","exitJS","_exit","_fd_close","convertI32PairToI53Checked","_fd_seek","llseek","getdents","doWritev","_fd_write","_tree_sitter_log_callback","currentLogCallback","_tree_sitter_parse_callback","currentParseCallback","stringToUTF16","allocateUTF8OnStack","stackAlloc","AsciiToString","__indirect_function_table","__memory_base","__stack_pointer","__table_base","_emscripten_get_now_is_monotonic","emscripten_get_now","emscripten_memcpy_big","emscripten_resize_heap","fd_close","fd_seek","fd_write","memory","tree_sitter_log_callback","tree_sitter_parse_callback","___wasm_call_ctors","___wasm_apply_data_relocs","malloc","_calloc","calloc","_realloc","realloc","_free","_ts_language_symbol_count","ts_language_symbol_count","_ts_language_version","ts_language_version","_ts_language_field_count","ts_language_field_count","_ts_language_symbol_name","ts_language_symbol_name","_ts_language_symbol_for_name","ts_language_symbol_for_name","_ts_language_symbol_type","ts_language_symbol_type","_ts_language_field_name_for_id","ts_language_field_name_for_id","_memset","memset","_memcpy","memcpy","_ts_parser_delete","ts_parser_delete","_ts_parser_reset","ts_parser_reset","_ts_parser_set_language","ts_parser_set_language","_ts_parser_timeout_micros","ts_parser_timeout_micros","_ts_parser_set_timeout_micros","ts_parser_set_timeout_micros","_memmove","memmove","_memcmp","memcmp","_ts_query_new","ts_query_new","_ts_query_delete","ts_query_delete","_iswspace","iswspace","_iswalnum","iswalnum","_ts_query_pattern_count","ts_query_pattern_count","_ts_query_capture_count","ts_query_capture_count","_ts_query_string_count","ts_query_string_count","_ts_query_capture_name_for_id","ts_query_capture_name_for_id","_ts_query_string_value_for_id","ts_query_string_value_for_id","_ts_query_predicates_for_pattern","ts_query_predicates_for_pattern","_ts_tree_copy","ts_tree_copy","_ts_tree_delete","ts_tree_delete","_ts_init","ts_init","_ts_parser_new_wasm","ts_parser_new_wasm","_ts_parser_enable_logger_wasm","ts_parser_enable_logger_wasm","_ts_parser_parse_wasm","ts_parser_parse_wasm","_ts_language_type_is_named_wasm","ts_language_type_is_named_wasm","_ts_language_type_is_visible_wasm","ts_language_type_is_visible_wasm","_ts_tree_root_node_wasm","ts_tree_root_node_wasm","_ts_tree_edit_wasm","ts_tree_edit_wasm","_ts_tree_get_changed_ranges_wasm","ts_tree_get_changed_ranges_wasm","_ts_tree_cursor_new_wasm","ts_tree_cursor_new_wasm","_ts_tree_cursor_delete_wasm","ts_tree_cursor_delete_wasm","_ts_tree_cursor_reset_wasm","ts_tree_cursor_reset_wasm","_ts_tree_cursor_goto_first_child_wasm","ts_tree_cursor_goto_first_child_wasm","_ts_tree_cursor_goto_next_sibling_wasm","ts_tree_cursor_goto_next_sibling_wasm","_ts_tree_cursor_goto_parent_wasm","ts_tree_cursor_goto_parent_wasm","_ts_tree_cursor_current_node_type_id_wasm","ts_tree_cursor_current_node_type_id_wasm","_ts_tree_cursor_current_node_is_named_wasm","ts_tree_cursor_current_node_is_named_wasm","_ts_tree_cursor_current_node_is_missing_wasm","ts_tree_cursor_current_node_is_missing_wasm","_ts_tree_cursor_current_node_id_wasm","ts_tree_cursor_current_node_id_wasm","_ts_tree_cursor_start_position_wasm","ts_tree_cursor_start_position_wasm","_ts_tree_cursor_end_position_wasm","ts_tree_cursor_end_position_wasm","_ts_tree_cursor_start_index_wasm","ts_tree_cursor_start_index_wasm","_ts_tree_cursor_end_index_wasm","ts_tree_cursor_end_index_wasm","_ts_tree_cursor_current_field_id_wasm","ts_tree_cursor_current_field_id_wasm","_ts_tree_cursor_current_node_wasm","ts_tree_cursor_current_node_wasm","_ts_node_symbol_wasm","ts_node_symbol_wasm","_ts_node_child_count_wasm","ts_node_child_count_wasm","_ts_node_named_child_count_wasm","ts_node_named_child_count_wasm","_ts_node_child_wasm","ts_node_child_wasm","_ts_node_named_child_wasm","ts_node_named_child_wasm","_ts_node_child_by_field_id_wasm","ts_node_child_by_field_id_wasm","_ts_node_next_sibling_wasm","ts_node_next_sibling_wasm","_ts_node_prev_sibling_wasm","ts_node_prev_sibling_wasm","_ts_node_next_named_sibling_wasm","ts_node_next_named_sibling_wasm","_ts_node_prev_named_sibling_wasm","ts_node_prev_named_sibling_wasm","_ts_node_parent_wasm","ts_node_parent_wasm","_ts_node_descendant_for_index_wasm","ts_node_descendant_for_index_wasm","_ts_node_named_descendant_for_index_wasm","ts_node_named_descendant_for_index_wasm","_ts_node_descendant_for_position_wasm","ts_node_descendant_for_position_wasm","_ts_node_named_descendant_for_position_wasm","ts_node_named_descendant_for_position_wasm","_ts_node_start_point_wasm","ts_node_start_point_wasm","_ts_node_end_point_wasm","ts_node_end_point_wasm","_ts_node_start_index_wasm","ts_node_start_index_wasm","_ts_node_end_index_wasm","ts_node_end_index_wasm","_ts_node_to_string_wasm","ts_node_to_string_wasm","_ts_node_children_wasm","ts_node_children_wasm","_ts_node_named_children_wasm","ts_node_named_children_wasm","_ts_node_descendants_of_type_wasm","ts_node_descendants_of_type_wasm","_ts_node_is_named_wasm","ts_node_is_named_wasm","_ts_node_has_changes_wasm","ts_node_has_changes_wasm","_ts_node_has_error_wasm","ts_node_has_error_wasm","_ts_node_is_missing_wasm","ts_node_is_missing_wasm","_ts_query_matches_wasm","ts_query_matches_wasm","_ts_query_captures_wasm","ts_query_captures_wasm","___cxa_atexit","__cxa_atexit","_iswdigit","iswdigit","_iswalpha","iswalpha","_iswlower","iswlower","_memchr","memchr","_strlen","strlen","_towupper","towupper","setThrew","__Znwm","_Znwm","__ZdlPv","_ZdlPv","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm","__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm","_ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm","__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc","_ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc","__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev","_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev","__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw","_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw","__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw","_ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6resizeEmw","dynCall_jiji","_orig$ts_parser_timeout_micros","orig$ts_parser_timeout_micros","_orig$ts_parser_set_timeout_micros","orig$ts_parser_set_timeout_micros","calledRun","callMain","dylibsLoaded","onRuntimeInitialized","shouldRunNow","preInit","noInitialRun","SIZE_OF_INT","SIZE_OF_NODE","SIZE_OF_POINT","SIZE_OF_RANGE","ZERO_POINT","QUERY_WORD_REGEX","PREDICATE_STEP_TYPE_CAPTURE","PREDICATE_STEP_TYPE_STRING","LANGUAGE_FUNCTION_REGEX","MIN_COMPATIBLE_VERSION","TRANSFER_BUFFER","ParserImpl","logCallback","includedRanges","marshalRange","Tree","setTimeoutMicros","getTimeoutMicros","getLogger","assertInternal","textCallback","marshalEdit","unmarshalNode","walk","getChangedRanges","unmarshalRange","typeId","marshalNode","unmarshalPoint","isNamed","hasChanges","isMissing","childForFieldId","childCount","firstNamedChild","lastChild","lastNamedChild","_children","_namedChildren","descendantsOfType","nextNamedSibling","previousNamedSibling","namedDescendantForIndex","descendantForPosition","isPoint","marshalPoint","namedDescendantForPosition","TreeCursor","unmarshalTreeCursor","marshalTreeCursor","nodeType","nodeTypeId","nodeId","nodeIsNamed","nodeIsMissing","nodeText","currentNode","currentFieldId","currentFieldName","gotoFirstChild","gotoNextSibling","gotoParent","fieldCount","fieldIdForName","fieldNameForId","idForNodeType","nodeTypeCount","nodeTypeForId","nodeTypeIsNamed","nodeTypeIsVisible","operands","Query","loadSideModule","captureNames","textPredicates","predicates","setProperties","assertedProperties","refutedProperties","exceededMatchLimit","matchLimit","unmarshalCaptures","predicatesForPattern","didExceedMatchLimit","oldEndPosition","newEndPosition","oldEndIndex","newEndIndex","X509Certificate","pems","Crypt32","__webpack_modules__","elidableTextForDiff","duplicateTree","cutTreeAfterLine","deparseAndCutTree","visitTreeConditionally","resetLineNumbers","queryGlobalVars","queryImports","AfterSiblings","KeepOriginal","FifteenPercent","getIndentationWindowsDelineations","__unused_webpack_exports","__webpack_module_cache__","__webpack_exports__","defaultHash","memoize","Locked","lockedPorts","young","checkAvailablePort","getAvailablePort","hosts","getPorts","ports","interfaces","_interface","getLocalHosts","portCheckSequence","availablePort","portNumbers","__webpack_require__","cachedModule","definition"],"sourceRoot":""} \ No newline at end of file diff --git a/copilot/dist/compiled/darwin/arm64/kerberos.node b/copilot/dist/compiled/darwin/arm64/kerberos.node new file mode 100755 index 0000000000000000000000000000000000000000..db324d64eb9c01135ece48a7ce02299acdc1277d GIT binary patch literal 143360 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

RbH%CR%cA7IZ)=_LKYR( z(O}Fg!En^1L0L`4EQ}wF6~m1!fn2ryf#$ab(uHIKIUN>Eh|TKsrQ*BPsC#q1XFElE zEN5nb)Klbi6%;r(VCok`)2pMXFOZdwyPX@#OY+ISqq_!zStJFgyDZ=3ajh?QI}2SU z1psCFr5;r{Lncad{zx#t)a`|V3Z1pSv{dc#(J*#u?ZK|EB-I_LR;J2i`da{a+v zuN&&j=_=b^lJ7(xZ=&oPb9O;#IoPMHI&+q)VkoD&8TNm*lJU zwV88;SySxt6_qTcdOIedDEDnhr~EE+zG_hi*zO5rV{jIgK+BQYO*i(Lb39&jo7Y$5 zRI%sTh}F5(Ra~x)nVt}Wa@hCOv8wj! z3&~RN2u!GfFnMCM>0@aq3`u!WiSOi-NJ=At+(K7bNb^SnIYni`u7Y1vQUDuW?c6B6 zb2pb3ltV{&VK9`z-cb89kXZuB>AgcaHGv!q&5}tpO6P#ZA4A*dGiZZ5s!)}{42FPqKVw+Ey>@kF8BUGTwNH%#!2_AR$e2I z@DW}sRZGp5AJ zsNqf4Kt^v!Mw?7zYZLt-+8f;kJa|(ZDkNE7ST3(B~clh~8R38_qy|UeAw<)shz%@_3Qbhl6 zR~TCYeA!Bum6BuxeAzDWal0f_JWY#R0Mu&*{(@NlY#zJO6o1+jm$kwJ^hcWFMW*

WCDDpZSAHE7(*qJak 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

`W!wv{nH1;M-$1^vxwdYX{1VeaK71GI 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

|cN^yxSd+`%=#Z}am(=MGn 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

2g9wyMe)Xg0Uq7Vh?|;MjWilcr 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

<%q1b_&i}rLeE#)&d-b$?UVC7| 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

    ~Y_ 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

    %B?s@iO)ww{n>J8=EXv}f>RL*vt?f~ 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 z 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 DoKKf)O|h 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 c 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 P!ubWiRyF|d+^cf3G(mw85Eru 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 r5izlDHtdWLM70F2oChA`*=v)*FRg!E#I3 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 z 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 bQ|(cZXbqV*kZKFL{_k3J?BM^$yGGzo@}Isj literal 0 HcmV?d00001

Sg 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 IjOF~m9{}VoQ2+n{ literal 0 HcmV?d00001 diff --git a/copilot/dist/compiled/linux/arm64/kerberos.node b/copilot/dist/compiled/linux/arm64/kerberos.node new file mode 100755 index 0000000000000000000000000000000000000000..659b9ed4e7bf5ec80d0db587a6f196eec6b3f498 GIT binary patch literal 1278608 zcmagm2{=@3{6GGC#u#HsW6hSvnmr`ZdhELp(xPOijY?_L*tJu3EqGECMbW0kR#7P} zTC|W#i53+_rQiEJ&-A^%*Y9`zum9(IUf%b8&pBs~GxwZxn(1k)ovS^Q!4M*X5+Y{_ z1MRkB?0-in!Fbz789|E>idYa4{G32k|6Nx2e;)aN8#4x^{~i3BCgE`ZN#ko;9B@nsXK~-~m)JV;j7mv>HX$5it`3jMWVlz9CcYjsd2(}aFiL+JW6(Hk`$lbKf-77y4j>qida#67SW@MwCngb>dA!5 z)8+A4j(&Vs7Kg)QVIMfcJnJ-S5t~ObsHSKhsZZmHa-|7JHhH1Kj+7+)QfA%fH03;n zcV>_DCUi|cCKIKh`b47`;EGM4FB0TQ=BvG~phwwGz zxk3$C+k;{ia(E05i{r>5QCuM+nd!1W+AjK)=wwV$; zJOz)~B=D{IEIC7I}d47im;L>l0?#?h`SC~HjUv)?<}Ek zWOa%e1~^WHHH9M)th79dknI#Ets;l1NrDO;`Ajonw^YY==Qge=hhgkT@Jf18ZQTL6 z1p7!862g~aRr8n}79(4VLqv&Ou_htue8OXm!Bz_;r8rFE1j?(3+Qy3K5-tbZPGj=< zgzt)@wf7X^m`l6ulCUK@(wYGol)5NeVL~(|!DnLg(!_M9y)l<*U>k3>ok?_fe->c0-ZgOD`c9bwk zK(ZaryNfl3y|aYLWu&o~B;N77V*>xkF)G(KNTgV*jxhPb{}4(Hi!(JT{H)_|f1OBq zuvwG>UN@$tHdoVta406j)6lMnxMeV18F+EHfeZz{2T!5?uuzj@S{lzXz3>+C6xEjq zII75Fjql=O2J^7BN)oS>%t@mZG!ldzIeHS33}VdE!+A1*$;6@L@wAM|UKUT(lOfII z@eaplSjmJw7O`lIVO;*+#WAJWNli<9x zOYqj@StSt4mdD0h$wp0tTPftr)#j!Vo|p$|!kQcwn<>qu)Fsf=HKn-191Ce3ak7ot zni%aU%VAP#QN$B3ikdnT^Zp#`@bY+G5}}GPKXG^@(qv?5`McSHlr76tjbUwGmuV%(@zApU_j<-66ybR! zFl7mYN2JFEY_}zBiqGT|GcLs>ClrgYe`0JR##R%;E5^g=g0D+S*!r-Vb*Lm2oJ%<@ z^3qW{O@e-LC<*Cc6$1`m*tU?TR7zx+62zZRtni-YbWwzlH>ef;{z@YhkH~Tp`8@Qv zT*BgU2$NgK<+1`uA-~#qE?<_-(IuQjmK>j@PI08?)G6ERvN%HH>(nSt27|&&XnZRT)NH!tbIt*j(u5@90HIiwfMuZ6ivx}RK z*__GdMR7#axcu>?i$pV-3C7$ME)F?^CCVm&3eslAqT(E$7_$ziD9k!cJDfJiUSU1F zZy8M4cp+kiCu4FcE1rlmi^pTKxW=|Nln$3?&EoJG_6g!F?uU;&Z4Dmb@+n&mUnwey zZ@j3XEL|xd+aeq}B4#R-#37F1_MT$uI2JtOsL3#3tR;*D!eMgw^f6_z$bcawMbf#B zJk}dYUh|uHAr(?e@mQgS9+U=)s55jp!IC`sZEDj+qNE(fSUjA7DV{n5JBmGKooDOG z3Nwf>L!wTHPht9SNCQqxDTUtpJgkKauoQkd4v!>A$Z@n33%R7uiiAs$Iwm$$MiWJlcFPE2`qAtP2TZW<-6pup+Ih3XkhZ#Uor9?v3oDsk? zCM;`CJU3H~W1GykPGDusk{ct!d#cZ6aG88eDjX%XIt8XCgHMRD8V)FqDwkm^%Bf>9 za4Z`Llkf?{nvCNC{yFCkHrI^VoY`NE&65Nw`gQ6jO~+$fMk( zxGf6^Kh=6Ko|htivH>{ud@`LUc8ho)nA5`wkQQS#^H>~{1dpO|9ELMJ`w6ZSno?_7 z5|~G)D*fz*0~iq=j!Y}UzNO8KrikWb2_|U{Xc;3`i201Gr5ewQ)nx63siCQk*N5j3 zz*S?Umpf)k%W9vI5)Ex4;>_4) z#jPirnuO2h5Pq=&ldB}d#P!>_j{6VOmPw>VnC@J@rf@YYl+Wc-8H8_jP>R9!&jh!od^%^AZpVH)uWC7Qq@2?`t~ty?%>NX}E&&F{Kh%nkbMDzwBMY7~bd@`R&s+bG9#2BQUmqzg!3epM0IDl|< zZ0whZB~E6MF&sYj0$ZmTT0ES|nS5NC6Gix%8|rYY#4B8i$N8dChvQjR*bi}fM|eS8 zM}~rtm2SMetOs`up5ilu-7UN?sojH+`V{OfZbQ;JBv_Kz^QB9rJa{^Uug1m=cM{G{ z8k}$;zBrdjn8u={xk$8?W!21JD@t+H`7ZR<8MyRee^^Ys3mEa5V-!dNpAaiPp&k$e zB~h!%vUn8tWJHC+(kwHs0f%Ckh{)nS%i=TQrf~Ohag)wv5m62a+>3>A*f=;Jr1g0` zc9kaT8T9X~rlpR1O$pX_*^~lfLMb@9@)hKQ)A=kigT7Sb)I(Yr=6oKdV~itHN7WGK z($ZuhQkSB>i*Ro6l!~p5S&RT;%;2*;rEz8Ea{2ctlE}Ckk-Q&wg*;gbubdi>es=7t zkSyj8Uo;_4lw!-`MHXT?iK^jpq#dADH;F@8ag_+0+>4T>s5)GJ`3Xb`o77&U&gF7s zw*|Oz9n&ekFfKo?%}sR zh*dBTXKmJ)-E7jp9pflPa1m3I;4y?l_%pa-a+*$7!fci;;a74rOZ(l4)fe79uJtt` z3I~wS=LX=#(Nz=WQzm9)pQ)}Ac9g3?AE@bxBwLilQIfW05o0z(nsJ!g&Tkgu^1T!| zT}_Ee6kbS+Vi6WUmw4i~Aw8b3cq}VhBF5S!af25SP>0(fz8s%;D#jDpZT;&tFlGNr7T99y0+i4rA+IsqQ6T{>J>;%F^F zf?4u)JffgTtQL7l*=mM!WUVnxuoe}?6XF#**>j3Hj09%DDaMhabQZ!mB8T;uNrXFt&x%Un$};f6vq=Ksk+vj~B{3nLh50ItqrgjINn>&o zjs#28M2aD%SeTBf?1*X1BotPX9c#-^!Y>n$&cUC|h-?NkO%}72H0w0sr#yr2%)p(G ztUrBg%G9A4dt_u;vQe^x$7T@?{rZ%TNx^|-yeeubPM~bO5f1Y?V-0ZUM}!GkH;!pt z#o>Dv@rYiXp0pBC=P58qVOlr~3nVe6>Dx}sSqht`c!gXd#4Jo=S#dpBjCh=&(}-0A z(}ts?h^J;z>hwF6$;hMENwC#RSjsWQ?M0ImFIL@V{4qAio9yHX?=!}ANr;Takq%&b z$r>|wSQR%EgsVpI%zR?4z)(_fAP*=V1zSm1r*uMi{2hcZ#7w78kj-*xI3p2FOewrR z94jWnS`&v3#U-40d7OIKbqq!-%Z$llPOrojxD3A2F$JFo}3oRRJ@2fPGh zbCKSHwhwZ?piM8o5bZ_aFBn^lTmk_Q1R)R#5wHxF!%A2MQ4kGlAqLh#ENlR}HX*kF zU(ioPCP5l(gYB>rcEcXn2icGd^c{Nv?1zI;2>-xgpsN&l49W%l6Ub9=8qUC3I0qM? z7A`{_G{ALefg8{Y_uwHs2D+XgJK!0-fNppVJ@5|tpdUWK7x)T)YY^@4FbqFo6mT~A z_uVXv6afy1f;iAM1}QCQ(|sAV@rEMffW96m!+4kg>YxEyFcIj|L+XPe7{Mek0aGvo zbC?PiK$j(Qx}ZH1ISZ`77979@TwxA)fEUo^jhrWF)BOc#FM`LG`jK`|VGGN^z`sDe{a4RqBY&%t>? z{{r%opnV0|AZRxto8T&3gB#EaZEz3hdVp+)hwubC;3>R-PWW3d(S8MQpaZo0BIy>8w=6|X$n)o0xW^98OWJ18z`^>8*l(epvy^+Zb)~S19QO} z=D`B+houk#5fBM0U=^%}HLw<9;BT!%dn0UyIN(Dnq`?l@4SOIR_ChA)LLTgg15gD2 zKnWa$GB^emKvyNQM$kTsJO`Jc0UDtRu0u1>)q=bQt%Ck-0{NK2Rovw#9CumyW?1~+hrIWQOI!2+Ob z5z-%)z*50jupmQ_p%4xcund+%6hy;nSOaveMaIAeL4PB1GsHs@q(B;MgI%y2GGHHM zLKb90F66^OD2Bs8SE(S6AuHenoPuhofirLsE&*LvkPUDZZo+M#>y9A*>tSx7-!2$? zgnSCmpcA^_CA@;SK-YU@KYWG(_zHvYw}#OE3BO*A7nu` z(3OYW4~0++N8l)w0$t_E6Hp0Na0V{IC7|oFAg>6r4%q;W&;(cE8Z^TVxCOW2F5HJl z@EAIPuBXTsf_5je3tkEO^y6;@?OtR*e1uOh0N-E`zQYgr1;61BFxi+JKo=Xy0dbH3 zF35l!i~~g&4?NHSy0nlwpeN|-BMo5^mlfO+eRXWE^Z2^b-Y{BuILh6hS);xdZkH z`g@U?kOeuA2m9d=6hbkSz)>g#x{e959C-pxK@FUR^Kbz!!4;^32DlD?>jv7l;11k_ z2k;Oc!DHxvXYd?eKo|V2ZnR%R54;tO_agfR?N7)rFbG310zcso&|g3^fC(%R1~!O- zI7ombaN%!Bp)Cz^pa{x9mnw3CpsglIdR!fC4bTRCFoH?&w@lEU4CY`d7@vlm0W)D1 zSb;6rg9A8$J9vO6%mp8q2mY`a{#LM{9fn*6D_|9@hBZJ}400XB!Y0@ZTY(RBB_fjr zZMvU|b{cFKjO`HQPC@PxB)#lzK|2GvSJ2*v%!C{$fCEqn#ZUrtl_8Hqg`i)FtP-?O zBWvIsT!31*2$zAbI%ES}gB#Eaci}!ffJg8c=z1bZy8RUG7tjeW1>@bwH}DqT3&uVm zKf)&%fG;ovKj0V8^&3flUc&VPijgCUrJDVV|Enu4}DSi&@z3A2E%*+?s}0erVk9KaFWU=DZ!{RM$H_<%3Wg9We< z7Q+(2$3XuUKAC~F4^l|6f_401he6!bRK3vL5lZOFTDAKKv|Jc15*2A$9iZ{Qu!^&Z&=AK(*wfv@llzQYJG#Qs~B z{>em}1#IAeC`iB<;DRj3!#Gd?Wl)6)pbnZqmljeR^kEVhgDIH76flRWK-YBSEU*&v z{~N`a98N+doQ5-S4(Pgoya<;C{VT{i zsE0HUH0#D&@J^Nqn7if1uH}t?;=momo3$h>i5kA9L7zDb8 zkl$e#e!(a(@HISLOr#J90~1R)R!%U~r$K{Tv`Sl9%c zVGI1Nt%5cmnILGVAX8x*?1XgK2bqus*+5r5vH%W35fsB=psPfXrO0D&0xID&&{ZwS z^T=Ab3=M*@tH>6(1+8!!=xRgWgZuDMF!l)f7@i3FPX+lL*(qpuA-e_b*T^10`@JCP zZTF-70Y1V2e1&f?1jFzXMuFg)O9lu78zevyxF7>^AP;nnLn?!cpihsfqRj(!!I(Bu z7xV;u1Ee7sfialD6tIA4K!0;O8|bn^+JZeef-}(Nikt%;Fc-YR7wGas&WDBI4*@_| z5HbY9Arh9u3Rn$mfvyIT3`0W5|9SPDT9 z40MGeBVh%shPAK`HozvJD-IbC36KcMkOJFaJM4sX$bh|&3AsR50dhYaf?_xf|96#Q ztQ<~4C7gn4sDZO^4$i{`s0F$%A}C;Wy{U`S$a!2d2`^w}T^V!#C{kOmo$0|ih9Rp5ad z&@~aM2S#8DW?&9e!4jsy444VCfdXr=0Xwh<$fL;PPyr{Q66iXGtcJ629xgyFT!uPmfF_{pD)PFZ-HdF3R=5Lq z;U3U+ANdd-!4r56oj})1O+2jPcR@D`-U8XVfYE7@IQsWKraMr5Ct(1 z2QJ8fEQ|vMPy%K6TjSB@fd*)THt2x?n1UHh0SlM`Gl2qYpvw;FAZR-xoxla$1!HrN zo-h}@!3XBSd{_Wn~a1unLZ8lWi2xIZaLZ| zXE(U0%+l`^Ym%2g_u002Ya-qaZef3ITWD6xU^|>Gk{# zM-PX}KA&Y1U2#X~Pwq&kRQ(p|6U!fu#KazwYxSGsd&^*3a*%xWZlS)`gWWrgncrLG zf2j$nw!F8x`Y`(Tm-~T=moHbpy}z$Uawk(|deIVxj^0a`E@VX4KD;Ix({;p3{lvy6 zi!wf(*OhyH;PJ)IRfbPg-WD~#QsJ8%U84H%&Q6cdpD&GV^sw{q$lt0oyh_QdHfp7P z%-TZdK#^G%*CPL!^v=%5NxpB+*TZ5-W!u9Vs-DPqPCLDfeX~Tj=3e22u~piU)8bZd zDr=wo#6WAsrhrO~T=P|(>s#kIz3&w|qBw9PMngzWNoDJkJH8^q{bARQnmhW2!(?6C z4w+slve+7MqCoO=bpE9|Qn?K!zvZJG4tp%ZatG9s#?3D<+~?qJI(~7VLuQ@sF9%Jb z>1E2xoozj=wsK2r18sheiK#!E7cy4#vHb_5Q^VFvbLaN=CXO53d$??>QSfQ8Pdm>~ zf2ejmE+CYZsx_+rx$A1SUQa-v#J=dymH*UzU(RYxJsdRS{lJ+oT5H!NyDHm{>zuIB z=ED}Hq=uMi7{h^}Y@^%GXvwoz+DqbI5cG*xXI`dENqt$v|lkS|pc&1Ug z`L^4;KVPgHUR*B?*~RuU5Y9QJQ~V_IfpC0q$O5OnrAiUbms5XkoK_b4P<8F?YK765 z(;s}!bhgwy-TS@OuDV=SY|H6YO7TxRd&BITjb?pd;}qF+Sc^xI3J z(6v`5CLh`5w=s9dQt>G}j;-GAXs@+s|5%sSrhz#QCEtx_%(T@FT;w&H_aty~yF2f7 zSXkUT?-`jzi%-SfUEA~UqhERA-ZdT9F36-Xj_bQsed+lyphZk}X>Se{Pn|wcksz7B zJTZP@6q1MXorPz_uF%nhI0AO#dL0LtKYNb`I7df){NdCFVmDtI7ft^FDE%=@ zlYgEH4@a_Zyl(Y(zw*_}-m&~d*SeVU*?v;F_j69R+?#07r0mvoh;MayslM`}T|Gx# zykyj3empyR@9~C*RdHl~>z-V(p3jEm#w-0khRidQIV0V;@LcPm9Up)8Z<*;6cj!o5 z$f4m5zw(8jFGV|Dy+7SLP=9RD*)tNSqx`RH8xE~HS>5usYRI?cXH#L%#n#dDIZtn2 z`EYH=-rwRu%jAqtJV{p0XPCA$8YxYx?Wh#LvS-S>{5@>-*cnd3ClB(pq-&%@#&#?d zmc4yx*vhN#P3+F?^TT)5mK>5k?8FFW>-Rgi=OjOJ6-vAKHRY(w+o#5AkDjS$P21#j zJ7wp&_AJHO#IM$(a}GJ1VjtA2JPBGzc`BdBJx|==+>cKRd^4HMn+hu89Tn z?e|M8iwr5oCSm!8czfv+J0qh>*DWim#p}n`3Ss<7k9_4jH;u zllW3upW``0@|CLF@}xc$ndj?Y58hMxUOg+PaJ!vp%(?!IpUI1hc$3GuKWaOp@t~Ap zW@K%l*mgH5YsH>>`L?x7G!43cq+NP$#rWzmX}!+qn^zfx6>;WLQ)mbK>FQZaE?>G> zTliaL8*9g)w1U^LpMBP{qEhVRwskfM57ZWsQ8NRxCRcKB;$9^~l|r zpx4V<^S{~uNM)O5^3Xrgl5zj+!OxpD&{l_~L)Xu){q$kLIniN~kSELdSZ3h`k&V~? zI4V6-3%;T>X->}hsiktEnHKmU_!wxuOkTL)vi!{SP6Zr^uL zU)5XQW-w*jZj*xV`WTlsa@0Mu`=spAp$8r%&U|-`W~~bnQO~lM#r)13KYPMdYNNcf zF_!DJH|vd%o7Osa;`1oYf>(>oF!uAG@IrIsQWtd-`+hTvq2BouwT>>X5?SCp^=b0@ z?NuYOWj^m-YWR+E+%mFrtAn>(`8S)uBhyqgQZD_nE$EnduwJ#!cT4z4?F34W730=_ zQIoUD!(4f>m3`k;ZxJe$v5c*Jeo>j%`nD5i$~tD={G>X?|BB;=Kh)D&E^!%(Ww?Hm zk?1hrvBJ~+U|5bIv@LQnL7d#eMY)6%QYM{WLn#^XT=eGlpFU zbOwT@+%B>nxL0oG#=Sq4>M&vL`B%SBSZ`6Ce)C;=ul2OgSBt)yw>o^7{J~YrF#Y7p zykjjFwtW~;U0iiz-N0}@`%k8>_uHq-L@tcYo9U$RAi6A0t+mJTd)Cg;{{6328uqD# zG;LrWWpwRn@66lgBD>7J_~eR&j+rexhjcHh*BzO1GGfci%I7v0667Plrk5n29g1?g z6yLG7GuunZduHF#d>bE;^N}l^ea1AE&wkdvdg{nP;yEX6qhFpSx7?|Ou(IL2+=v}t z^`3w9nK{*Q1G`#F&8g>B4*O4z&p(G6Or&3Ys@-xuJh!Ct*+QY&867tU-}>)f=Mz@H z=E{?7YEB~@?quF!d5^`YYP#LR_l2?V@*e_?VlgmDfUmLZm-+k-fwOPwtu>$7d)`&vPdzzA-HCPuH>R+dKs4= zXMN1+ig9iD>QSXyJ2+w|tZfl%+rPUv-A{`(RHRU9#cpVuo2G7Ly|`X!+Nd_S<;LZw zb#BM}>kD4`?VUX3L*;{9Q+0oX1BDkRZO(agA#wJ$O+rhR56>3gt5@Jw)XBZo`XThz zWvQsR5{D(3v6eX}Wgl0&Z?|n2e^0e_2D{xrPdXtqkP&hEypcia&Z8P%zJ+z$8HH~< zH`gWYPN>rM!m63xbAFy#S2}Z}!HP8>`Xl!mWvmzpo2#q1>0`gmbc=_+Ti;6T_>=CH ztn~2qq4k3w4rhma^bV{2-8Vga)b;(*lZ&f-6-EwdEqmc(PCiR3DPEQ?A2lwOx{+inS*1NsLBUifd$Cob`c~>KkOk4MI+wVuG zQtO)hJr21jUCZejoxx1DJ9D~1zstHCZOyQ+#|ExGd&+qs_lE9Y6)sbM=(y%cWX`6p zt`x=jFRnXoXq_)Yy9Iy9SH}YCh z`s?@Svb;@lrnU2}GW#%=_afx?gTqrdTK9QwRc!jSpz+sz3mrt9>N`Gq>{Q+Z|O#742vr-2s_mVC$h?=2D^3^hr=8bbT=z!rDUMZ>i=mlLWy zPNd9Ox#?gW=jOHJSF*ZDkB>`l*bn`We!IdC)@->@q8Rv{pUo@_Z=ce2uD4cVd%~_9 zk(ARC)ol_IPI8~i@{HH#9Sh6I9Sn${>vSQ!z{q9-wIa>QRd({qd$B7TMcyATn`9yD zn>XHlFrwy%@;5i-+2e%5@7vs2G&D`l{??zgv=Y(ytVMB+Z9ct{AG0!~Zb@~iZq1%G z=|KCOL$y~O08T1ttuldWRuNLw(cosWJb&zLhB~emk=xAW_aZ^Nhul?gsS0BhHZBDzQgk_I( z^_h88>&^N!{nG+v^erl6B3?Y)Mt$)95K-amadEh1_28S9cRr#21U53d6K#~u6RN_| z-g~m7XCju@27|BOs`QwpUgrF(N96}xuEVjK3Nxr6ZyHO%jhrLfij7`YdKg}6kHuMeeYMh%THEp82WR2%9EMYrI|NkcCG%fAD2GX{P5FQox5s>>J>*)8cXHoOlel@G-+FX_od6aO+hF2pL%xL=Z-q% zTFO0bmwi@#_WTVZu~RMHjnfa(ZI3x)RNH+!akTcfr zW^$EUJ9p4N)Z>sws?3HG%R8ATR}4zVRIkW-cl;91bF|gp-0Jzt_2>t3RC%$;*Ir4A zwNFE9F1(CPjC{@gULBz2J)gwi*VA=)Dr%O{Wh?u2YG4FQG^Kveu^jKi`P*H6E2^$C z166~A@>hnAvbSOz@xWbCR@7CRZaQnZMcjCmjPS}gu|p!Au`e38xrWv34B0=*H5!ZCp%*}WjmfH;Hg53^Ot)`SFa^hv1~qYc4BO@LuJIV#P&x- zolUwPtm32cSy?IQQ}F7=ew)ul#5~y^B5TuRxIFdU3EQ675OFV8*$qRh7babJ6Wr8h zx5Ov=sk7njl|tu_1Z8G7tUBf6qU?3>VRP;7*Twd}HXl~*(~kLAr@_< z%hH|pQb=^|D&Ds=C(ngX%$~(2`-iFfR*$>7Y1f{@L+rMIn&h!xHm|ncSA9tJ*>B6a z{&x+#O76C34!RY$tMe|nc9+XP|9tzI?S+8OZPd#@Cv&R^%Z-$*i5e&?1a%Dz8tURV;7Y&lnNSwFHLDl7_zI3JN+BJ&QJL}f0*c|`s>eqrz*GlX=Wy-wPsJ))}RIX4@ zOnl8vn>XIeEgv;VoIA5hf%oS~MZx~9+d}m($9$9u)VQ^P8K*D#)cN_t1M6HL^(-)! zi9XG2tPZ<>8^U z{hkfk)uSh479Hk{liM`%nH%ZPtcf;QGxnk-Q%UTmPVKVb)!U4gUwf;V|7K&qs6_YB z^>GSzGeVx4&pCTgF(I4V;~}Gwa3Fm{e3AT3oqdyU6$rCrs!N_vf5%t9IXyt_o8;Y6 z;{ys4<4;-KHG7`&%J+=7di|4}$WPYlBPrtyqSIR5C8bKVXvjVzHOjxl8o~=czE1FX znmpfFa($45Mpv%cz@5>lpW0%QCtJPTtdmf0dtB+T_+_I@EV~ZZ-TKVAzw-trhVA=c zKk7Qt^NeY%G5DOZUE|j+?u>&Ws!au_cI-YG^%rkQ7g|!NBR!#oGDO<|j;gM6 z^_w>A;4EX9GztCvJ$kV{SbqL7ZN`}q!^$_&EYXGEn)^)gSls7=Ka+1W19z?{^qJPP zBWeo9%wXgE2M3+YOYcl+_{rie zLTWL_>aXqyUEHbpv4Luy^Xt3(Foktqy;5kgLMFPW&i=F3dV|KecjCvAPMvz?dgOD< zEvm32u2Shu*QmaX(MO@%b&ZW%DlZ!}^f=zlSfDk?@|i!iCQa#g!b$1QzUN=eV(adX z37pj66fx6O!hIRfVFjnCNFqLJh+kCtPRwk{^484rnco*Zny>)BH>1HsHsZc;`^JoQ zxrdjsCR?4NYM)Z;95!(ZM!C9$F$U{qpHx0JoAKCV^I*cB^V5GR9hvcSN_2(F#^=2* z7a|vY%bR06y6JS$rY}=-HC6DBKe*X+*~q&*ylk>z%0%>aV4Cc^vsOZP=fxx|NIb}h zT&O?q_>1eS%$JDmea4<<{)_*s*7Kfzgsx~_=9VY&zK;AqPDN9VuwH&vOwgy2&!fCY zZxW5s9}~R(V&dTW$e{tY`kFtFY@}y%*nr2;_ottx8EVZO~W!33Dd<Oty1zAelsu{Tz=#DD(4kSGp(T$0ubQxl)A5P!scNRrqyBpY$dJTm9%45(%Nd-g<34pn1g2W-xW!@h`XjJecLzIBVCgDQc69 z)yuBDY&|;A7ps5jl*M!z2d|TsXFQeoW47)cT%J5`_1dTse(gM+)MJe^0`_KPG?@%l zTijXjBlp@rt2^ghZBf;pWs!a`b*qWbD)Dw5Tai9dxBT_uTbxsu8*eD=8_XXt-xso5 zt1bQ1sPR5G!;gFKNEoggGWE7w%VWcUy{GrbNR&L^y-e3|(Gk5{ z-z?piuih5vKRI*$nZU_=gu2Ca6qF5QI3FF7EWR>+^uPX9ccZ6#*Ns10kHx4a&ev6K zIy!Ud#P4ptIU5=J{r8S%YX6KBHrx5NvxKkVA2xI_K*pqIvYgU-%Jy5xrH+&-iiYOI zFw?PM@np-qJ6cPZPb=?F_1?4EU}rhdrh5U7(aTR>3E&z z83s`^3~U#&huj;2=I`b!ZW($$qwrnq2wPoGte&;PQSF?m{p`g74=23#nRlSt&St+M zSzq(n)?L1QV*=&lW3hOtjgrR#i!&NYng>SlPZQL!S8FOP*tHUD@?MF7D6vgp%&QC2@YPgp-~)Z-eJQ9lCbzb9Rijnz?*#624P3 zcY4semj{1k&9jTtyLKhfBGRp@a(IWzzS|;HpYacI5ry%crR`^J#wsmY?I7ZRbk4b; zOtXiK6VC^jfBwn3^FaPcxsSh^Z*>0E)hgK)Sqr}8YxQO1E??DjeQ9y9MNh!8{yjHs zce^cp@VX~p_`oV=z}|O8az^ip_x>#JdNAyBLp8-+a$r-h#pnJt!Q5@8p<7(pzAI0J zzrJYb{3qNjKrM`vR%Sk0!aT4l zqW0he!>=NCy&ah){^*(Amd3dZrQ=tBe&$ABGaqc1nKCRXWA`X-h^6N#Ww_Hc_;SLF{D|niH#K*zuYA}SrtoTv!uK0_ zTX?R~UnE~P>u!9ca6;E8^l8tPs9&{DrRwipD3=I(qBA)lx5Y=o>z2Wkf9kEWjQn?J z-nsWO#w6XWa&^_rvZeQ)E?(%+A#t>{Swrbg-3%;qJ;7>TjGyY4zWbjfkG;t-SUUWs zZ1ZLPAE`P{l+vH1m+R|i+^!y2Cb>B+cSWvLWWg(y-pvV8M&A}B?bf?|X2RYLPFaKR zPCCuwTKRYEF!R4VGIr7%v;EG29r+=8CsRilqrTpyPV0Nbg){zn{fycmwRYNz#+zHq zwzqdoJ3a5^$6L8NS}V?PXmqTeF5M?q5cO@|h+kXc;Dh(S*v*&Rekn{0I{GUseZS#} zTPLFPQ~e(MC55Cd)Xf>A9$dJ}piU<1Q)Bv63)jV;?E2Fc*e&;$=T8Z6_&(?R)Q#Pv z)5^kB*B%m&PhYay?SY-7x8dW5Lc*(J?3YBG^T?X}srUX49s563<%`lI#p1W!`A{)z z{ifxnfl|z>CcS?W;_vO8wPW(xH~H%>wq<@?a$4-@;Z+@yFJr$1On2^-+@)9AnYH=E z$i}T1;|J>Avk&cMOz0FB_bM}}8Eg&t92;@(Sz~kRVTm>kKQW3WRj{QX#Bl~Yj~Xs4 zUMxXgKHb_db>DiUksV_!vzX2HvxF-?)CbC@tm-+psNHfQ8EoWi82IF(Ov90J=9UG!zqe*f_*4oT`Q-kL zcD+|wB~xVN?zJx#|9Y2oj&{fTlKh*ak9rS9+_1PNx#W(!!|1I=M!-0{ty&R!HAVVAm%yD2vGm~Xn$d;_P%(pBYB++&aGcLw3Nsph2E z=Q1*8UNe+#_u8z>N{~CR^sfIzfuqbq#jzrTha|Qc1RKtjRec=!YmSXwdwu;$fdT7JZck{P|kLCQyowek;f@+oa zc(sQ31!by!l?IvKYU*eo4Y{AKu*tWWZil$oe~e;(Z`DNmZS0~k*=^kh9>GelUIsaI zOvIR8Sha>Oosc#h+FlWGVJK90ci%UyPG5bDX{hl{@~#nXp3U{N1JuM66O5UH&W45l zy_q(N)ZLjOQ#n|BIz%ZwmJ+N(wWwV?jZ*tI0 zy5APHs%`08(f4`{p)3 zyqx;6*Jw}C!$%(;YQ6nx7S+CQ$M^~H#pquS#_^0G53_Qtp1Gfm&JV9sX*N3;cWrd8 zRIaWyx4?7x{GlW_`8B?U*ER{)yjScUKI?J>>q(4xaw9&*e&u0pE3J3(i+26Pm=>&D zb1GJLmDLXOdsT5EBGb$KU3ULWiOtNI`rhH2dcknV%6FDwy-|j(W$$m->8Fhw9ll|u zyq0r1>V(AHzOV&vj(V9{CWkxBNO;v2aZv14W8cEIODndq7wt|DKDFUg@vA*bRq}>& zlaebYuR1v&7tN^0Bkxq)KI;}PN^6)}wMO>f8kyxz%kz0!zfGjnzr3@2Ic|Z)!IC-c z{4nw439bfqe;zL!@;jzCGWNKAd(JGS)SBBX#ntBL{E#~&zHR*!>o@zvE_6v9W=KY* z_&wd9__5F6tve?t?qNlCRCHM0p50liE}d-K)jUJy(fM5il7(8{6;w#0!Ev4MZcWvR zMrU1G*3TT&Q+mDgMfL)vXnnb|pi6h<26gI8t!xW#RJ5e>S(%iOE5KOpPdvWLYx z4y;lb>2*4As5J1qY};LlKWFFeU2xjy{OjbTS;;nrq2KFbmZW!{6H3e|u#@I#9XlDa zI>JMu-=+Ha!WVVh*+tZ*2))DNvckV&j^$7PsNwqVbNZJrsX2BBo{Ez@ z{C+e?PU_yb^Se(lOI|u9JzTc+#Ls6dCp3IpCAQUJ(v-dr17;`mf2LJcY!p7!a8sjJ zY0`|Vx!T=BL#?%EO162v(isi?^1vgctvB$rwspwzd|$??cBgB0Mn#F_%KYuM!Ai3W z8;nA}$?_)8KNNc;+AF@?;QN`-4&~`%bvBQv{jzc^zq9ks-5&?Fo|cyXde*>fd*u75 zJ!j$aF}2?xzY;#~aJs6bXu_^d?$iGm`u?866G`fhi~Q%dtW^0o-Tc8tkuqafPS|eu zJZeczjk8*&*RzB%*~iama@HQ)x8m*|-RX9}BiXl$KDNHpt;><9p11LfO|`9ehYKHEtTv)_UqBEMGBLIUk=$%nsiv^|M2xC zU@?Ag|BpQ?#y$vxB!nUv`ydRGK^O{yFbIP%S^E+~2x07F498nd&q?{7=E_Nm-|4$}%Bt}5(YfBL^)C&G6Id>`wh8+3BR#1R3<>^J{QzFobZ zPsLWxmu?x?Zgar4^Ea=|%Ixvx(Rf2ba9E-Fj!m97+PVDs`p(zBXGy)J|4Q7dniZy$4f{Uuea8zcTJICSe>~KG z)rfoTdpiuCJAMCxMlmt$ZyMSaF8gQJ=cYyW99kXc(z)2!u}2Hqb!oq_-Ht|==WMDJ zQRn=du=QcHh52KLZMxTH=jY9pOpX4W9+WkpSkb<(`>b_2SY!Omt7S)2EYZ{P;--cz z@AdPX>d`o(e#(dMJ$E!6Wcs{DzrLAb*u^dZ!!vIz%k0|8bZ<|pX2S8Ii$^(Yi+6my z>eA<@E#3Ezk6rV+e~Vk&uVwV>bwBl8%!F&V>lb<8(%XGx&1>VX>0=)Uo^P@I;e_U! zrrJH4QP*c;pOHz;4|!KQIOEsKPOlf|%&D_x@S)dxJ*T|YFZ({h;Z&oO4VL{Y{qoxE zQJTt$Yp%u)SUB>Kf60Pxxo*ICsCXeC(wkh3y;voS$Nv^0;g#$Mj+LCmS9*-{tPr0M9P(&eV&@ zSh{G8Z{faQE@^HQ@(R_+D;yuK7G;=Mt=Q@<7i!H(?j1h6LW{rYZV}}gug`TnbECf{ zVnOFd9S3D}oF6lO>N}J95YfEe=oam{l?+{a<1R;h!|(ySF!fT>J4V6jG49L zN~4C`o`?$@j;Gv3CxpL^ze+YJ}16@9+0M7OoG?%rQic|ePV$G%fm93D4k#LgBcV%_hu zrIl2_v7UbY>?U__kl<{0w&AAJOM81yEZV=AYRLYsn_gVq(n`VP+BL{4_s716t&b$G zNQgUm?)K&j>X1)!mIq&-(9`$)kN0Jtj9Jqw@a>^@7oL}UrZ~3sW8{*JK`UkY^xm-* zn^dS0Sij)>){ELstL~Ef<;RzM=ROU1@jGNey`e34ywJUw6wxAd&8s;cKmR5LeEFWZ za&795s#nhBcB{VY#mpUFf7B{+-EzO`>JKx0$7fHSXEeE29o1;WqOOZ}#;kG3PA%~7 z%alD?zpl?d)Ku|c=x=tn!M}R<+7zE?>@wz9-4?Qv!$!(_2bP{_a#>>f=CGstsgD!a z?(r_(EoStkWq!-Mbtv(!w#v12tw9GDjZfUQa@oV?W!u)=f2?A5_k}A{-iF10PhR4f zQEgi4>9?PkDx98F_w_AVA!?rD?7HnQc1&vBE;TGNu5)tmg>rt~CQrRkS5xlSklS7*MC)B$Ir>wl3478d#3KSlugfUqZpl*Pj$Kq|Tae|ND{qc$50vfo7iu^qqAo zZFWm_NZ&clx28?dI*o6+t=FCIgA*1!XwxaR@z&`}H}7jSZ(mxSL{o#6#bcH}R zf2k#QpBL(Oc1?(QV(8dm`NNcHeMZ*N&#dMv|JCp6s+o)DydKo(TGH1V{hHbz&uu=e zaKJ9-OTF69-Pos3`!T+HkF;#><9}o0AAIc4cvSe55yuM;@3dfTUwx&GeV=vQzVZ5+ ztEq~*PbzE)FgKfh?0cYLZ~5WgZ;SOA_4n_Q??DYqcrQMAKt0iOK&`-nBk!Fr*sH^w z^An0HOsxWEr4%k{IaKy+^vhyJOy5R-=)U55$!)P4!s6Wu9&P%2vdab4)vssj6)4cM zuW!?PQ-WPmQ8|16MS0sZ{*GJJ)}7u3gi) zaIZGp#{+H+irB0^vdMD#+p4$8H8$UA6SR8h&C=VPhCO-IY1P1SV^6;rKDXwo zlvpNXMwv^sA8ajIea0K_mE$K&`tajK_QV0T-7ciuy+5pS-_lhYeeTe*_UNL|ye1gq z%KJ4eJ;HHKi%u=B7tgMj^C7tIg4~{!rsdXA_6=LNZ^)-=Ka3-1_Lvdyv7krvkZF_r zFVD0)6gFy0#gpyd*ABY6YeK8D^Vhyz@OIj`L-P3JcVD{Pne_4N!#Y>?^*mj*dg=7| zvrXPEE>U!-X0!dyy=w}Mc(>P}Z*({DqT+JUcQ3yRZ%@oj3NG;GbMsf@T3$C^FeI$s z^lkFG@1f3VZF~;>&1@uOPHmhsCDgCisd@vlX7#Ue;MyXui*J56EU~2X-Fxlpf7||Y zTmPg_18(SdZyEQ@n4>LOXL{h&;E?70HL4?pL1|onTP*A+OG?$+J4{lG9Bz2ZtZ>Y ziHo}5z>bS`Pg7P6t+jBz*Ug|3Q!Ygpc=Mr3w7h2BR|Egan%DeqR>neq{Z_^Fq?z6I zyH}aMX;#?%X#L5%(pkq3>fnjDj90q*l=J#B(cjo~_0UZ|PcFi-=b@1(RZG<))n8!eOp#iDx3%h3@jw~(t-ISP zsMd3jPBF&qc7~?Ksp%(v+&b@2#bM2NOPKfjV;2$^#rLYB$SVG*>wd?fwaU(3+G~Si z#m(w4_9KXmo?tlOmId)1TBdUyBM+By1e zjm_!h8d!|ckBkMX{hZ(b(!}KWh6#0zQ7LzNPg;0mP|*{eR;{euDX@a()~ALV`H=x5 zCnzpIzInNS!=HA~f{%$j1BYuTc9t!(Ik3?9HZR`4=vj7g(2~L} zk_t^fd8zfufaVKF)ng5PVuXtj2 zNOt7#4GvL{IxS=WUeu}k^K(U;Brj+GKP$NO`p`i=eum%b-A4R(IbGsUmyQZu{kgJD zrv9_m);jq+G`iHOeZ@|dT#&Zv$NX(iEcK3u=(ZHse`}bk*Y1)ve`xQnUS0(g&ziQp1uBKlLRlBM5Gzq z3nPsyWK%t+e-7PUsQS8x-Z8k<{4j8_q-IB-?Q7`H)4>^6QzDGU( z55tY=PU>${e%MuPQNQfjUCZhv`TGrTd81OSxQXl`A9G@7r0c zNOOHQO4ho+Psl6a$K(4@?jJ_q(bRWYbDG6ht5a`Jlcei$cS8VbpYZCtCT?B8wd z=hjSZRIv9G_Wu_-#8_^`mg|^p@A&t+uhW^q!EY~AuQ+1q3--HZ?M+#)ME-U&=4NUp zJb1(Y|D`5P=O0yQ9W~WnZrSA2+xei~?@rgYWxwmy?&GSg2D>xg?cY;$k8;e9eV>gL zE*_Y7uBN`I`+N3x>Be?0wY-YFKmT~fl1ZnFws3gg;nFqV^q+Bi8osiy-}^7SxauqW zZ%mM{M_tA@ZneC1s!vLPuis0ux)tnED)`#qkaOc4uFtI6ICl#B|4%QSR7_?6HM0M$ z@h&pid3JDtJ;OSWC^6G6q|y6@GjDBK|9BevUC4qF!%NmE8g(|S;m`J;x=x+JXtzWE zCf-|6s{ZWT<$ug#|L*QlqmeSJ)2Ne|Mx@MU|K6T9;MlH}TJP=We}~TL=zDwAr7zcm zyH^fvI3ld-xlQg*ntQ}wp2zs+v;QUDllAXeXW5F;=7FPJmi1k6E?4ohKzUSY_G~u}cv-rC`?E6*n6F zICb~zk+W{WKli^rb!cIS51YGx%h+}-JZEzFE%6d?0?TM(Q4tt&FocdeTU9qL=tK7|@GRx%Ul{-%9ymzC^%@-$Y zos%EE{`=hYJ(JVV?P}fBG6C)!LAizTFg@QQFh!@eRcbT1F~}*S8UpD zw|&j|?VVx_Gt{c8YvpyTR{pP@;>Ybeg|4)l)_v{iz7KYmdJy`{uAJ69x5G-cTc;w! zPrdk~ob+z|*v6%kXExY7ZPve!vbLMXyTnv)RHNd=IwRIM^l~gXeqMnaTh8_Oetyv~ z=I8BEJ3pQD`>a}G=-q$+jNFp*PR&);XxQay<^<2~6}ouUz5k`u71yoC6j>+#RgOKz zJ$yCPL4AK${I-DTVS{TrE-K&j{;r)z+dWP;9%@wO-n;u}H6<3^4gJE-3p}YD+9YG+ z?4~PPhYcK4P`7-X>Xgr;n=U7MUaeN}K>BW#+u>r(Unwn?wPT|yZyIm>s^8s97y95y z(zAvBwYTx}+}8hXgI@uljta zSb51RBPb5cvZ>K(~Ay&U1fFAr>avk zCe^&TV&`fXuQ`4Vg|H5n?LAw>#dwC8>-}8!c}+^=wT!V%p`=3+&V8_!ghuaZ>g7)gGT=tH8^QkYoEg_ z;$qYKh9BLf{?u~F{cDZ}p>&vJxzNy9A3-ILwYdmTMo_*w5Yx6fHh zHQcx*r0DVj+b(anD_<+xdrwHClpC9hpH7GwyE-nqM8~?F&vo|l-8^x`;zLz?y2TIj zK2;*BP_6B4s-y&$`7-L+a<>wO)rY#Lz5lDzH_5pA?sl)T)fAgtLL&=TRX96;owfJ; zjaCC6y1ei~P+Ey58)SxL)nn_qWr+ zDtF&_>6_o|h( zem=j~Fl(IOo&NvqANn6#u(j1+yBGG=4<1PRv}bJ_$E&WL=KP!*;{WT(=Jh`--1NA9 z)9XZ3+_BVipRU(CJ>$pGqbHB|+l*0 z;x)H4!}yEswoG{u-+j%75;og^{7abnlWMr|&OH8YqH7}8Tp>KyN1DYIi zF1qjX%FmhKRt$d9(a`Etnd^t|*v z9p792_@0#)ylbFV+!|JwW2@=o>fSvIne<=xH+z1v*cn3A)qh2zcm?5_zYGv`j*5!<+y=Bxjm zis#ln{gz8}E)5^hPj-UN@bla9x?Kge(b*0LBmRq>Abw-7wZyGdN z_b_vF{Z3xX-~TsdQ}V15#Y)r}^V9#>n(@8%TR(37|NJN<6c-fYg>;fqh+S09-yh?@ zs>tpok@0{0KmU!Yl|NmaAi!-`eb5o&4~x*^tL#gT9S{$I zeWq*kuXkPj{Oxex27Q4I9P$3*{OXOd(Z19J@|P!=-DQ^_PS2|O(<3_OFTbx1|N7Nq z_d(?2-+|5Zm*=Yu|2o>R&qVg!eSY!>*@%Z0Hri1|ZT@=sFxm5qheqtKuKem9XhZ%A zHsblM4ZSjLNfDjJ6iLTr+|%di+FEoe*AZA z$l1b1eiQF}%MYimjrm7-v0;Z9Ht4$t z=CAK?8+p>thQ5bw$l28fj(9h7e(m(Ijeg;*4L>%w5ht5%$kWq?JWe)n&e^C}ypugY z`Ip#`pQWFC^Y&jG?d2L9pX8V4y=}D95F37ZXd|A#+lbE`)=u*q?^W-gf4nuY(cgWy zVYdlG^2d2%gMQ0~Ja25|)gd|&-(E;-!WtSY&eosoZZY=wR}H~Yh^+*#u|KyKd!Znk zci0P|;zg0Hgj;{IJIUAsLRPwXaT_c6ExS*RJ;o){wIx}{#0pd2TK*LQf4F$LBrE(a zs<-T6q%A@fA#*u<^pF)6_SSNeeJ@u-s3639fG#KcgleMS?FF-Vkvc1$EY8F-;g~oc zwioozfM5h!cs3k#SMl<2R(MPnXOD!5IED(4lh=FV2>9KffTAayx$H3}5nm@>%*Tow zi&wF9&jP=0YjNwpxtylH1+4arYk(TdT7S##|5J;0uE5?!fnKgePdfs;xpsH7Qn)?4 zy#T&SymXosF8}oVqJ12N)GnZi^E$CSOa_j!9T3t%7Jlh~6DMA@&I*^a=OEZKQwuuB zZ|wG~vtSGEM**$^r)d%Ed?FEoWb+zz*|gYG&MdikMxA%@M@N;CVo zR|Kb$@aI$BlX(F@nCQ=r0mop;t8bPa{B9>+md=Wt_}$3P;o`-VtSCsao-1LW$o+^+ zh4r`We%3Cqb7~97!{fYX6X+`!FHdKM>w8*`xH5c!UabgcbbC>+DuUlM;Bb4sa)$ho zzAylO%kIeR2l>JdbrFCgyo4Qiy_XX}*NK-Yv*J$p zXC?wCmM%dJD2QJqj|N>%?aqz(ooB-iYVne7Rye+VE9D3A;RIILwAWgSuz8{wSHbo3 z##L|D4~X%TBVU0e;0O@W&8;-(8@)o&lZnN3h2lMZ2jF!p_Vr)>8jD z=&|cT_ayqIsjyGz5X3DDCu?cQ9=H^7;OKudRYSk#yO*g6MTe=I@t6lR#JYhQ98^-+(=mD&`YeH&}ozpIXcF9gyEZ4>UxQ z-*=3I{E^}#Myz;Rf3o}2Rj@;*5_J4zZ)xb@7oiOB`5gB9U*Kn+fn|6e_*R4Br!yS> zlJE!W#QB<|(6cjeNE~6&VAQMYj~aPC%u#^f!#gj(7wMI82X^3kHGhM8wcPU_?MVC%Ux8zp4Sn5+K8EHgku*RuS0(E9cZy^T?>94Js731QrVs9 zqrfkn?{uR1Y^3-o7AxF7;(MQB9x!zTJ%Di9&O$sJtLC+jU|ok{^X2lee=zX}vPXZ# z_9CN;(%CTBTG~>7nk$)~wx#(|Y&Y0PML4gkLoc=XupBGQyw>tm4*XCjbGtuQYAdk@-IBrCbngD(EOJILko88^t6F9;x$hm>|tF*;<&p_i? zKHgit8aSy3fs;x6`#QmHX7OJ>((sjJX0l#g>Jw<iT;C!ud_7ASn2RF`77#Rx7@~v|8$5i6ieu`eyco%kOv}&zl$UKQ}Y%0S3&f#HOQWn=ea%0rh%U7hkChRyhZ_EF%gn; zdWCjmH%UL3!yZW&`*&?eSYAo>4(Shmo%l#0E3hhiXNmn&w7=dNbU)%3?m!-mFXZ7k zx0gX4x%eO;D}ls+kR>Rq-|ry~-HC4Kj`osK3N^xO?45{lz)77CoYTY~OmTJ4$Rh{8 zsJR$^R7%ICy^;SllKF-F59Ak)lKdEE2{TxKEz0Sh0l%>HXf0RRqw=C3a}T3^alIZG zp_fH`EQ=Lx2M-!&%4nSFY5gsGtEh{(eqLFKoeKG(9edlPC)%B{66kW`pI039%EU*8 zSW#GivbS{hK`*z02ecdfIMSKC=iaC`Rkm?iax6 zMD^Cr0>5D^@OhkQxP8ROP*`yz{^r!btEhkHIPydAZ`vbRKu`R0ZRCx45$G?HCF^N1 zv<@Fh>+lxBsnQ2>x{8nSuo6b}G#|19<%ejZ_jLf>?jiJrRoQzmte>*RgZNM#E8M@? zJs^L^RLFmk@~vqx{3195f!pT}^OqPu(c&XAtZ=_v=z#VmuMHfn^|$OT9yZ_?`C|`) zKY-}V5`g1Q>rULxF0qhDB|f6biufk9SQ^m0ID^&|xn6r`17Ecm_t%AanaPng_eZO+>p8$Ue#UAit~^5R!>*pmA>+jeEnXUdLgO zM>`Pm@OrndBtOz4JUZg{Jr8=C_-G9)F)aUzW$<3qYu=sL{(T%lPo?=0YGH2yv2lyI z9;J1I2e}>o`wo7E_(&NmZq}ddtwz=#iE(0m43g2foqN_HeDTppR?@6L**K*>^fJ@K zzO1{kmQOS;HPwdQ(uscu`*SfK)LQf-auT%pcGCAE^m?A6R8YL-KUF0Dhqw?8)EWU0)h{SuDU;S^tWS#|^+yMgT`m^l3+s-}Lr* z<3u?h@vrR)eSL^Oi`I*hXuZgp=y#4n9<%t+5i4B&Xm*}Nw2ymp_$9;oTlT(EH;k`b zCF856w4Y@e4IDSpSGElCtm+Io-3g~GtwXxfI%F8pbFwKO=AzzgqVG$?{4266;-?kS zgUUmG)hqDNK=neL3h|>kjyPdvw3Z{xAYy-=O8aGUqCaH)niy}fcfrr?b7ds#ucdVl zE@zJv)Ehb;e&qWFznS8q-Qr3CX9nS?AI3N#Q_{bD?S*=^w2lfZvG<>bpx#{CUvndz z8{bf``~d3J68-5>)Eg^47{^L5(Yw+3P)_UEJZ|lm0w+n*zt^F0g+*cq7bd@`S6U_v ztS9^w$|rV%fz0u}H-kS~e5{KVh4m+U@5=*nDkbZd4Xpc*%r6rAB)o+klD42-aC@E~ z4tlhBAc~bx>reJR@K@BUkAZzuMDM#C{E8Ux^SCl}0KaYr?3P616ZR#ORbTdsmlXlg z#okGzeZWY`KHvqKzbIQnUqmT;n~mCa9JOmtlILqN;3vJ!n@^6%vM~)C=ck4s61Y9H zhCxnOH{f%5{?WK7UNSE7odRdpD+#JmQ1ftZ@4*orCtJ9FKemE!ca>PSjrh!2Y~_ZOlZyv1Y^%_hT#@Pm1{= zek^d@NzR3nfuH6Nx|-;7$uDY&U#?WfJSFZc@HNCA`4RO-?gX97dHpWVGpHr`whYbd z_2T2;tZ?}sE`pqPe-O86g;7DscIc}WA7^ESEmK>IJOuK~MuN`$+uVcfAU-n5O1AYU z8wY&`PTDM3IDqJ*t^TbbsA*q@e`1vpe@>m8#9v$(2 zX#;xfe(1&Hs%H%Ro-00p&WfJ+71Ibu4;*gi(q&+O!$;WJkN9h50!Jl2vds$6*xQ$v zA-}R2_?_q%BO^c$mE_NpBY=}i`x+eQAN8|#pU{4dRPSdW_{$=hSL#z?AEo$sEGy(j zp}}0}Wu$m^CLG;t&^5I0sUZ4@$B@%(${SZcGSJh~fo~!H^0fXLUI7uv?Of1$o|*M) z;s;Qy;J0jFYysN4sthPf!uieuOdRhmmFz#N!(pE^TIb|AU0l&WDqH5oDNpNi1|L`w z(z16Pn?hd&$;0h@b3W+m`rwq2JX#h2)_m0goUs)D|IWY;1_#(jOZ>(w;LjC5h+ySC z(wy)t6!>wppTg~v9s)ZU$qowZU$M6&PXj0R2kKQ)|1y?!WTHG7D?sP%=qIzkm}eB- zLFe{K8w>u_d7zsJUp!tS;%Lf3K(;((E#D|V#2o^ECh^w`2ftae&TOxxaUGqTQV{<$ ze~i1*XuX~5`!o&uX4pYOZs!j(U{7H>;+&7e2aZR*cHxl6K=_4kBhGW_Jd8Kdm(-{D zr2S|=qTl}t990th5=HtJR6`yGjqA8Pmwlj@T#`S9FTl}X08SX;pP@V!D%oEiOY66) zQphLi#2?S{t#v$E5_ZrNz0F$am01pP$k#=OvyB*Wy+TL*7nk!a`wl|%qxl=!7sv6U zeN2rG^|G+Bmi~=kAFcQxFe{PPpX|+21#k=nfy3=NxH{+>8qXvVe-aBAv0qkJfh4tv zu5lrMeSv)?M0~ox0=_%(4=#ngs=Jmq&-ASe{_u&2&pYI=gnFQBLO_oz44^8< zP_HG!&Pp&6e%K7iX`%6h6VdBlBYoSz&RpL*y(tdG2ZdSTI4x_S-uTy8pz^f|AIz6SB2A^Iy?C)7*&!E82e6yrHovc7R}2XIWMV1Z=9*|87f z-Z;s)*Sj(J^>*MdO#EqMpl=4P4|BUUp?PI2%_|kee`_glTz3J7+wD2w8zlJUnBPUe zs9p2c`*1V#k|o2=e4VOwA&SFSu#X$n>qhNVHxzN0%jIVQEaGc!A`ba}bST?5xAqG( zk5Ci8>m1PIq7YX+4_u`EqqL3=R!-g?uN8zmDv3P7MG;r77Z5*@gugZd{dJmTJ#bSZ z*{urn%BJ<7kN?5`rg5+XueUi{-xK3pP3OvBJwYg01>;yF^)H;>?=Jaw3Gi7nw3a2b zzYzZpoblv%Hhi<@+YB0kxRU%u?*S)%X z3{7EYIlLVm{s%iGokW~? z6aRnHz^|rpi=OB~KS1G%qkp<^>@&u6s^huORw^Z;(?q4{~M`y{mPd z#8EKQIc_(sV%@Bxk64Hw~;aH@7U zt>2nx-4a>|!lj0&SD^majrgNeL6AhnNQ`d|;W1L?8G9 z{2Ds{%>B5U%?CxCI9iY5e!n>Z^iVq2!R_2W9(GVsoY)b*h1MrsqYT}CO=6$Ibe>;E=lQujE005-q)CV$1IZKRhd5DGMvc6^9~+5$ zm_*|-F8`7xkVn506qc5)rSf#hA3Fi@5JB`yoshQ`H12XH`u#nqH;L9IxSUOB-l3Mv zI||Y`+?B@RTpnjT)t!ruMJU_R?&_L*`9|C+I;=i8>eEB#aLpwpp_yK$a&HLPl|A{y3;94G>a-xT* zF+NO_j1LoCfUmbhzRe*19A+p{uQUVXVX)S6`!4uhdqN&=hyL9lkMvy7%$LM3I*1i6 z|FK`dH)iDRPrEFD{blappJDwgwtrO|?bLV)?Ud_lSqL1}7RVV%{L@X4$2AV^j+xh5 z>Q}?MVp8M0_Nl=3g~j;EXb-xY_*1R}U)}|Bwn8<+gEZ(B-w$#YCjLa$@riab(Dy{# zK85J~s*KLB^7iQU95{A*;3x>E*$UJvlYH;x9vSZ)9O9$|qT`VN%K`SCn(lwPRUlW@-O1WxX0)QH~-Li$9|y^?ioCVcLWC z#rZv0VzkD|#k}!Zup#PIO4c8`cBg)j@(-6^`2jd-2Gr|EaxR)j{ckYxGpCoK`J;j6 zk34Q$G6r!zYwTiYMd1DNrq^f}p-szK>3YKNxEuB6mO{N@G~WBz8#qalb$~q-SH=YJ zXA;i7(rDK@+JC`s1>wYgoD)-DhkYQGAbhM0{Lp)p|0#fi=D=>oRp9g_{B0zURx-|c zu0ozv6@gydF9G53uYuO7@LNGh^ab5`jx`)sEY_dwobXWcm*o76*Fo4#uLJ^*&%VqZ zVxBP<0Ns^vdiVg}A~`p8l;YW)#x1eL|H}#EPg#3NUW4e*W$=rM_LsTcoaX^QbUp0J z+xykqScfr5`h{Mjp_ghh5V(Do6al_K`_!Cnp}ehZ2oGvVo*^NqH`0K5d4IIzAIW(Z z{BFd*=80$@b}oqWLp7pnCL*3)dm^5BUj5J$c2?5(liTxq4b+=N=gGMrM~s19(IL=_ z$6GsEH;9(38?07A9y?m^tx57E%z-=_Njus*3;xy6`CcxMFU6-y5}(cPK%Ve<$TMLG zYoTIu;Opo+GA4$#Baq9q|1KCvH6IRntDZC(-+r zCBI~YpZl>8^%p{A^cQvo@ds0bNdB3yrxVE&VLhM2zRPP@&dSLB9&r);k)+unORP8{&&*N$BvE2 z4w8J^nbvJ0CHwm)RFEf@zQ^J5)0gEdQ67~fUtR16y4ixf5rOa(YP5oX<@?Yts7cPP z`@km}chztR9-O@85a%Nz+mX3)8;?S#MS0QT3CB#_qm-r?grg*4j$z4*P?zc{s!!} zoz0`fvV_ia+R=H=!XOKcnVm&^&0_F#dmh{fy6HIZwZva^Iq0r?LC+@ofxe>s**y>R zy*!sQAQt>~kHD`deoc3bm*OS;#lcvLLpn#z#}6JyK+lzYmocFL=mz@ko7X$O7VNB( zthfJW9f3GL(PrlD_dh%(zpO)k;5a3Z0$(Zlp6FT%_|s;9zcBedeJ=EkTMd0ZN#8<~ zK-bVXlhZBrfv=}?eQw0BT?2meVc;l;p3e5UMERrX943Ct?m1Zveu2Kn2_*iTS->|@ zyXN(_RHJ_hrG0Hz;{RR=<0u84BT^Cl;VI}VFA9BG`m&a*%#33EsA-*$!CK3Kx{y;R zUYN;B0P%mKbL{a4&|Wer5cjMAzALToar+;B1DssSKVf9&1GI0VEt|I=KQ{q5p>5H= zOxD`jeH2?k55EAq6VW%*x}}!ZExn0e{y*eBf%1c#=sO4}T7t7_73`2f-zobMe_dMl z$d!C=uC=kQ^@H$}B=|2*0AKeO9*-vcjys^2`V#cw?euy*(AhJfR!-iI4$wIk1?6q- zci&gQx6pbH*S7$Dznn_vthin$beJdhmh3Af(D#EX`hJkd!?|c`r;f;Me4O8_25_24 z_Fpz1MtmwI=lu?rg`7qY#1*&0F1B7O=6`uPL=H>u*0PiKm11dMiO1EN)3A@h4)M(U zoy$hhlg7iIJWob61U-5P?8)uWmd3Za!FJaAxW4mg{;s3>9na_5vxHCQg8sK&8POku z(?asgsoiB3f}GhD{~xU5B9?C@=a!38JJRlj{9Ml6OmVTD#y5f8jD$0z6WW)Y)Ky9TmCEb)E6h+<`_TG1Z$}&G zd}%1158>a5Pm2eRxpZEfC(VGPFN=7{B{{>lf^L%B6H=1;3z?+9m>z@n5-!Ob;j~|7 zl$<~D{z>&d#JGs>D;*AmoLV~H>qhbj*`T}cgZ$iIZ)u+^mG-%KJIZA0i1vw;A%3{O ze9e$E?K<-CMT)CWv`(8QXMx9xlIqn*14k{nuV6|;;22B8k2>NXGz;U33@@3L!t-|E zLf{xS!OrEVe>wGl>^1=Hh{yATYM`qm>$IA$~(1Lv*JOp+N zuZOte^iNeV|J6#?e^e~rig`&%=g+wvRtV^4V^6{UsGTi?MFKyGzOVEoJG^`-<~Md; zh`v{?K=j5PkoSy|eNvS_c{J>>NXSg;mG8v6|+Oa-uJC0KbC1YjdD>GIbDh_LKUDI4--HbCyVLjV3c@iGzgfb6*n0m%1;HShkFOXAz2az{itFX~ z7kU{^uco6_k^=PhwOO`^w>i9MRGLc*U&n-1M$y^A%9(ke-%XE@*OzJRNzEVy;);G*G@x( zsEB{(8PJ8_p!4xS{eAFD2CW~u691o};8#o53HQ=^j*8?7ApVi(z^@Y^565r+lH{lM z#r4vUg`JJv^Tyi@Hcl4vn9La&KtcGOw7_xyjrN<0KNDKCqk0w4i{qbR9fTOSie{kT zw`@OsGjNjVyB^-&C(^t|FPYbz*#!LP6F}hdtTqG3PBMO8dCwfD|$&}ckHl1^j z(K!e1$K)DlcLqA&t|y!VH2%!=gq)~_eUD7*Hqmuq|5)OWm;rrNlKZI&u{%v|;Qd-N`aU9;?$_e@ z*O{E6JQ_!6#QU#8?|~mHIp0-sGV;H68REoD^)4y~IdgBp4y|bXP>8J$i})EefUhNf zFMq^OhNOR&KS90nVZbpEe}hB7$(8I6#4ZC<^4_k-O`^qq(^$v>eD{3y_O zL!92CKlqh&KLe*b@2B>a0{iO;=k^uU8%Ot6@i>1;>#j+Xb=RrSvF~|ZvhVqTH3aK; zK(bC)g026H-^=Le96ohN!qAqeSGN}Wnn<2rFF+TlU*LA@O8aY;Ebtqsf2`C3cF3T8 zNv_wl6Tk`oj(CV6{8qFMX`+39Pohtx_M0hbzY(-PBhdPcAMx*@@19&G-xn98{!tzP zJG&9TK>ewV`cocn=2eh0QgUBJ6boRnU1ZXF0+0VipTV!%3p?=m**qF{NRymX($ac} zekM9bI?g40q;)E_3igR0IUoBVelqC0t-?efPxAsnaxX!`P{YTd@rM2DCj$D zSVIt!`-4BX8r4hvwI4gDWX%J#Z=#@jXRw2O*0?GLi*forHsKQK8p(OZK7&LYM?uvP zk;Cm)+z$N8yTCa@`F7m{*jXvL_wPHct7{Iy&PPa|T?c?;PJ#S99?aA)D||rb>m+TJ z&`U2l$5Lf4^vaOf^DR8Le&Z7J*ztO!Y-2NrM zfvw5eGc_pLD$;D{=D8c*7$T3GU*;mnx+dQZ-L*^4U+Ku zStf+qQ5o1FnCd;*1o0`Sd= z#R+d;(P!XaEv*A{ddFz;FU@}g31`oA@JCNV95Oa*iEjgbc{TWp_t$@@zl)cwA7+*W zPUa)n$B%ICZv)*RIY;E*8T)jRl5y{PE$X$SaSoTiPG976Ii2@*CH%$gJgu0o!c*W! zHaxSI#4)h5K=WdrubeV~pHwKXf5TWJ75yTd1pPPR*Lwq;)U}weg%Q2d5Ad7mdo(Aa zzm0>wrX1L_711MG07qLM_T>J({fYcOJ+Iwd=0jhN11z8PoBQiA z+fWnzqNMwOxIC*~pXA1~RjAFvGaXVCY0fh6Z& z0XWigWkx#ZCNm)3c>LU71OE79kjIU1(rMf!YXN`p_Be*tJ#y(>qMZ0GWnkx|&xl(U z(VwjYzKXt=;rP2FKsQOgi`+)-*G|%YPs@RC`~iF)!cU`lYdpXul@b7wv_|NjU8zr_%lKyx!4m5w|9~x5t(6LwX^9hD*+0y&gjC#UJ?G z4j!!`kE!*j?PzeoT)>>A4l^D{FNYl zNyB(AvOGM?#~}x3{3)mV7t_YH>&)?Y%{_uFnVJaCfeUSAdA%%|_lQ+0@+SfY1k3oN4i3dwyP9ya!U>eBwEhW0o4zMGonO}TB* z?sz-er9hnP==*dBs`qte(A|F_{$~(<>{`g9JPDj^q6gBxmA)b}498!70s873fWw-V zwUnmy?NnNa*+4kO$^c)R0ZCXGSj+1FKsQpJcOv=)w%#J<&rmwgkV*KSG~dak^I*}$ zUwtg(iT)3M#7{w}wHS0WeLuqEr}7i{(Ja|d&%THK4ufRB<6jWu(a}0E&$kO6L4Fmo6>%9v}C{d6blbg-{>YlKx+~NUplvzO7A=H_E;bRevGH@ zBe-AWS3wV@{bi2RpUxv0={!*I*90t*!>J5zNP~3bBSJuzK4=a&V4PU{1#66 zjq`Uo27R@X^GN?luO!lo$JH-dH%QwJ`8}!LQhvy{M#+7fJ8D2qT?dSNqgmb&%Q!pK zn?d7w-oD1u_Xx`V(2M7#OChjZES=YN2aGU`HDu8~nYZ)C$+}*M&-hAt+uhf8kSCP( z5qKP~cEY-1YCCvbLHM^O!~Ti@JxzzN&EX8rv|OFStR$JI@35LehKWx%w;VF zvS0_bxprGtfb$ZT90rXG2cug{@RZ~mk$EI z8`&qZ7vu>~ggo31H)(xON8cClI4nWqZE>isy5+G%x2$f~oJUt_>;qIr{s^RscU*uIQf z;J_M!P$v@nvAaR%`7NLa#xoXLzj7g*=g+auoGMvoUc(mF#5|TU2gn@9X$0C`9Ib!y zddHI=V~z0R2Ev~~e$-3y*d|}#L@7aya$_>TFX0@h(!O!OY+t4F_0&o?$76O z(z7P;Ep$&cuebC0x)Yg4D3u6)CGE?|sovI0VCPuLykqJbvQKA7&hdv-0)MnC z@&G*tBDfa^-EtrN3c|126naHhfZw?trfvqlTwIW0g@u8&_&x+Z%^#dR9-df$FN;Qg zQxX3oHop+<<}P_x=>9wSMID_tPF~XZ(ESwh2Cw&T7vP)uyJ>`fm^DBV-?bwo@g(|3 zT4&R&%}ZapiS)Vzz3j+vRe}hg^8EkmMd#4Wl6wyK8^G^M<6#-q>v#|N8ro-36a6|{ z{}koSrSo#!Up?-CKh+oZ(7eEu(Jb=6SRTgSJD0>muE12Z)lO+ zpHuH1`tdm0|K;O+%`%E-nkO>zTFbCEz}HIdQPk0RER)7#T>f&i!LM5YKL$`gGJQP! zZVZQodH=YM@|g5{^I3`TubJLQaOd`<`Le|WeoQC&ykUe-_Zx8jPA_0*GkvGY(uK8@ zdj|X@T8HHE|B5YuSljz?w2R*)|D^@6TRff5B=ZX;jnFr46!hi&^4c|!C;l+>b)tG- z@58vuB-wwtlM9^GgYfSR;vZ!KjvzU=bCc)_34N{({IUV4m+Q5S#!DHJcQ8GMq25f| z&*Jm`29Bg(I;j{cGRYo!+T8YTCky}to{ zrS~!gUjmMj?!DplUcCysUWxq1>0hHDkAd!i_aiykwkqVI{c)Zj66k)XIJ)2IBJsbe z3_FBM>|p*2oLIV-hUbAv%t2zmnN+Hr6+uflG5*k3RvdPAW$TGz>CuVW1-(Pz465zf0D&;?pIRuKK-RLGNAFmHQ* zOW!|6O2*H-r=i}+QQ+r!?EGcO8BX`)aKB8PiM;17c?YMejqgXwPXkT{?Z4|u{>`OzB!SK`!VBzP zf1=0J`jQ*TIgREKn!#uh(L}#S{gJK*=yIZuxDNT#=$;>Lx7xIh9XkPb_9lLLGWcUv zdE>w5SQkdV(WQZ9gQbOe7W;S8Grzobg;Z(L93Jq$Gd=i|(DiYw_prtB#2O;1p- zk?_sckk8#az>+NNttERm+Do`(f5F7|L&f{hRFeD9%0|L3#$vFWf^g=r{cf?{DJAzU zm!*9Ti)5booA0xT3pK2SQv$tp3i3ziKz=r@vzF>KUQ(UNJ6^i@8+k@e=lt`*_>_g|5c>9va1K*w2i(n0QUtA3COB5t_ zYvhgjZ@46n&1pdWkq+b70FtLu2<#9`?T+hpy9L_2VK4e?J@LPfrTCGYkIkfgbLo9b z<4=HJCi%|PnZ9e#56#=ZPj-U7TDo_d=W{z6XUfjQk9?e2Y6kSm4F(Qdrm&Vxi$GUM z#`)#hcdTOk=p^eiby+?X`!83?{%^x5&{OxrGEQWNf*&Xzwj-Z#zfYD?o}u$a5yT&2 z9UroLT_pFnw;Kr@y$9syes8oLa#~8Gf8q2(Z2Tt5X;&8U=0pw)c>#Jf9n5j1dYjUB zxbDfocOd(`*^7DwI%lgO{>ATslXMXHJP-Ul1G?%rDm+a%>gm8yO$2@<;fU9Vigvb> zoVVOh`9F@nACwXQwDZ7EvqQZ+Pqv^ursnI_#Q%%kw;qz5U`VNTO;rwjs zzv%vF?#DnMw3j4Ff47O&+oOL%o-nF6VJPGj=-e`wKjIncji+%hxkV_o2>hvZA4?$N z)Z7fa#V5dSnM7Aq74v5W!6L~Io90u!w65#Pc^qC)lV47vy(bfY5AtK? zFGz^!5(F`f#kfkM@5fmhu@>j0m|tf~&UJV`0lt>b-En=7Q-5UnmlyxXZt$CFKbPBo zDUAbFbU&wwY`!DnL~hB8f8GQ1 z=#lVOw)L+Bp(Dwo*qoPtT6^ealB_33+yqW)1oF}y8h^%|1>MdObQQ@tyBXzqIr2Pj zzujnDEu(RD0LgQLZ4`>~ySrnYA5HYBl!ui@$jOE=*0S^+>Xp&?RURib;(?P!=heA= zcFZOD>7761T z&UBv=w`WuGqiJ$?1sGZpZCW+F-bDMx=Z|- z8}stt`T{vkvmuEe)%*879`udbDeI!tXN? zbd?(Nw4(OtNBdj~+UMea?`Z9J*gfZTe~yB1Jd;qbp3Z^jh(37$?2s$5!{Q+56+H`< zbfbEoyoEe+ddH31p$_fupO*A5C5HefmDXEasoo|5u#d7N+Fd%)&u#*KT0Hd4B>J8- z_}xI~9FScFp#ZI;8mPZ;CjN%B&n2G>e;J6rs0m4#RO|_c7lIrTb_vNc1WOce!Rr~$$!9aqV)=1?-6(4 zOW)gF`3`iISrk*UU-gu$s3Y=$uyd;X(Z=l_R_kX zSu#&Ke;4@SYUD!`)%%}2{1P`DahOf?ft1gaD4$0Wz4AZsyV8B;kwl+S19}c3*yaz z;wm@=_!@dITLySxT?ybv(tSk9L@$#Ad_8?H%Ilc!7xgOW+=YhduPl&X zMfYTK`s8QOH)$l~Q4s&VzQ8xXLA#*Oa)jTk!xH?8Exm zW1TQO37YB%r^!0_#q~7&!t>Y-6X@}De=lzrS6-7mlJA~+QvNqm{^$JmEZvFmqbrTL zde8GlSJ*SU4%(N3)(t|#(Lbs>K_flMS)KNCqYt59W5aT5x!RG=UrGJD4EV}rdGlT_ zThABeF-X2&OC&#<=^PQy|M5FuhsevYPZY@$>jOD6>78*c(M>d-S4+;VEg|`3^!*WU zU#TB~pF!^oA}R#o@uCQ7(JKfO zn7u_iWE6p4?hw9_%?HKtSf~OBT(6$@an464Ip@=t@>T49*oUw4taDR0zg(KK0ksIAA8szp^) z5zj%(sv>BK$Ge_`A}E5Ycn-G+if}#r=X~DpNwY`Nmg{?e_y2i)zxUowX6MYAnKNh3 zoH^&f4wLwf(mcYS+Zp&tUt)gjOSn%A!0_2H6Fv13zJz(gLaR>uz;X1?JO^4r{0jy_ z&h2Nw@14oQRzKqb&u-xJI^s_~1^CV&^h?L}r>)?pxek0TCw?vE*{}`d*@yP|$;ZY% zrA^jbs$CuVBKli59PKuf&cJD)A7-5u{wjam7jbNy>*Yg;f8Z9NlfirZ`Vk%`pN-@b z(sP`nn0In+$2gL0diQ&V=QVP9UPG2+?zhXepr7mmCsBZ%zB9pR=rmAP{Wfu36JWkb z^?3f1pcCUc4p^7tJa8iXWFGgSRL;+T1^GvAWB!os{wM}x?7^u`Z1-vLC+7Tu&x%)P zmtb6Ytoi7RUZ5XqN59e;FTD@~{S4l_u6*vw^ARD7{_=N0r-60dXOhpWdcn@y+ra-g z!h18%*02`sN^|Zv_H@um=KBlioxE2f{W9aRiFK_W;!kIO*w6g%RKimxqQ4n0L%%WV zu}uDM{IRVTdw0;xsJ;roodE2QN}aiR?7JnfzM{%lcw^SFY6i;7v+6`{%T#* z0_HzcnKx7V!><58(Yw)8^)t6!0C>{1fGhr0YhXW3`P3Kr4062Ga=i2*{Q3#tGs^nj zHo~)oeSXI?7W zt>JqmI!+gI{N^$bkV1ZnxW4c|4!f$yG~-;HhjsBJ>psITsb60``m6ogc{bXu&4*uA z{#UYJarR5)xuwjTyNX^yzwG96qVT_ehJHo)4z<$xPy}x5FvfSLL@e%i`R%~>#}oP4 z>QlgdJpZ_u_sviFpdTf0Z_N?~5 zd@B5WF7N&Dke_wTx7+s>H;=-2uO9@3v~s*JVZCB#cj!y?JLw3>-@cD=-*oWVkOcV* zWxM;f0>9d-8+`L};MZIG)LGi!TN33Qm;9K~OEdFkwWR;IV$f+hHL=}Y_XWO}_sowY z{zJ?sS2Lfi<8dPMnaRv&hKT>{eUNi#Hsl;8Jn|{v4OSex|E_@7S$W9e$AX{KeZlAM zq;nM45qVa<@u;66H=k9%G5k#9XXO4#>t4i@Iqtm72P*xajz+yol2v!HavJq+-J7v5 z?cBcKcq!xI_W7`r40OY(ng#ji@?N;b?AM%y;6G(4#%Vg?pZ*H`IM-#$=PmTZt@Oh> zk5^?uZV_vL{KEj|>sD(%owXa36kccDGo{&vL{&|{QwQ7ZB8 zo(H+Lv))Ph|85Vo8~+yVO4#6jcgy)2W4Dn}5LgT81eZb%zJ~!9x8r_2XM&EOabphQ zp|8PD?%ANPy0{xWV&~6h0f(-7v)mZnWJ;^+9jCo-6!f}2(2z1(cAE4SvG1pCX*8RG>j>kM3 zW__~irN1O*jhq{pe^dJ3Jp?&dGw+m3Ib1OZa;UcI68-DIkJq}t=$mxl*Rf6>T63It zuLJ#NYrpb@exMUQ8S<}TyKmM3Kb8A^9>Nz%zufiIgTPmN7|Xh&x&p{q=kdj-g1(>k zEqh64>rX(xWfA6)7Q*kQJw#{^x_)`;BjDG2L4O?a-xNg{ewwyJPggVV_sUSTYu`(} z@?+qK*=`Bx?8fn4XXRlkSsxO$>htg3ivH8OS8DdbXg6fN>o;O+#K{ehBW_&IcAuyt zotNRS)Nc3M8t}GO$VdH54d)SW1^OExox{Yyj9vLk5cgIR{_X#PE-vr_xq;S|ch67Bklzf%6&$iI#8w(|MX9^k+Bd+@J*;KBU~=Xn#Q|4Ams zON8%)hDiUuvmj5W8hUS|zxwV+&}m`)t=`M}^IhO4_7eD1I>&RoH*vhqa7c zms!li{R;b{ztvlVpG@-e_sP(Ecnm1-PW+Q)VPf=>{2c5pMEpxC;2#1xu(uk**Ug0- zS{8$j`nT6E#=IQo`_Xit&YHWxPu?xii|X;7W1%lQZ-4zG!1w3CZ?v=B@77cP&%;iX z&xNcz${h)Q)XzL5^(tol(ze&`E(IMgYiXaYRlwhoa`^Ij@_7t6RJ~j+6Q7~uvChp+ zo(%r$Uk9Il{FgIU48!2pSofA(G=lQ)k9OCwUw5p)`YYF}quXr)@MA-OulhPw=$r8y zw*2-zhlBqV>)zw_jGt?*d-HC16!@tT^fyd?MjVGYq}_@`z9m1^43sjNAMnoS{KfNY zD(8!|UdYPl|Mn5&=H3#r-bW8T2!F zFHMZ_4@CYZ&h)bWlKyH zQB|N5&jbHDPTT#^dy}R2yE!jMI4?s=j`J_(seH^+rIP<$y2+~_P>Oc#{r7)_q2C79 z+w>)!kM?7~c#oy(<%n63XFcyLxQ_U%D?z`(>eq~uuzqZz{j1(*U4V9Ltats4-g-Ja zI;pI4AbIB^uGeD6Ljo$d)#rnbhx=k`C#TCmaP8!1%(LpBgM%rDOW-ipuz_*1k6`km z$;^wYoKL(1baI~tBz-IVVD5O>e}M0WWsuI%-vK{HKiP-yLh|Vhz<5`Ga@)7SuYCr7 zRr6zoj1ME0pSk5Q_@COj=+`(3qKtX78s^P(JWf~!|Bzw%w|-oQHe2h^C3%o%GS}~w z!T3y7jr#c!}Yj_@by;!KW_!>zmV|n{|z}r7}u$OQ<>Mw zU|tKeiM*4t59ZDK?=Wv_e;*qJI^mwsS3BwVo`ZHB-eXWh`0gdZZ#^COYCoScK5Vw) z!>JzuKlL)`Oa09J^`M_}7x)Q~{&3b^`&oCb{W^g8%nar;{lu?-4&$zEDC|V>S4g1l z`Y~(YbBke^_XAvyEB>K{;4_+senm;YU=ir}S#O~HZ?O;HEj)M7kND~Jfcu!2Q~&v7 z73jyTJl^wM&n8>pKW{_@+{F6*v6gdg+)#*tmGUN;8(gsl5Qi?~jSSohw{<2wsAd}kqp^!-<& z-FDjfP{Qv#7jmoTy=%IAYUA%_^>&r*AP`vk@(%-cjr ze~Fvtk$X_Bb5AF{NBJ<{>m~jbtn;z&)ya^+-q>L??@v=ZX=7a1J{$Jdmvr|20{+L( z_ac3S-?fbLe-QJ#^1ndjZ{n-G-2jJGIL_>AAs=TY=!hq*D$$JxC{XAmFvrFfXhoo#|5{ z&j8~Iq!{fhEFv~=Px zZ(zIYp~q&*?fjm=Z(v<IY^>p|xxO+}~IEq|io_Rj(GiL3>Uhx$4o6Nct)$giT z0B>a-i}HCh^Z9wq=l3E1Sq}q0X5Djg0Pn}E=lyt!f8YV&zlHc}C;L1G{Z{kdezj*= z#<_ZF-xA|j<-axke3JD};=i&mPv!DHH>ERRH_&P3`II{HKb>-mS#mptbrC66UBuTF z;6L|djF-N&&(^cSznAfhj`w4}1U&vWH0x!%_g)Epn(l$+v=Y8`U(k+5_XdlI@mPfS)>^2UI(mJ__Ty znd@aacI19%%ev3_=OoVWsf1_qoKXwU7wEiv*8uR}YTb(%kOD%}uXftinWXcZoX>Le zEysWprGG{@{(P1w+RzDbpHAfyV4XndNYDw9{!_ytwzdkmuONEuI2T_CKJ$2QhU)k56CpS6_s~lZ=E279 z0y#%nujOOArJQ$~IPXBqj`KS6A>Jba*`0LmkpRr-J^542%bBzXkN7>4zlslnW$sP- zTZ{yL4flyuUng;W9ktHUeEb{7-D9waDCwN&@+t4~u+CHMe<;`E?fv05))2q-PRKun z=bBYMyG1CU0^lzv|9dmO&0u`1{$ab1VJCT9&n_VSmT7>eTIYQ8_ua}#c6vMaM6{>) zLBB^J2QS}4QTg9Pf9M?q&3Z_`*A&RpYu)R(?{u_VT?Bj`FZ)uDG3t@!a?Y?zA%}J= zPW#~#&Eb@O)D*(iu1t^y{p8vmqx#4z1kx zR65%;f0*$y>)YASL#&6 z4?nZrVedjONxb(ygYZen zZzT4sH|aFKmMDkQ7lFQ)`7Rw_^IKpK(XZgI(&=ZG76Ct02>!KSmoiTkW1gx9`}G0a z%^*JtKd+SYh*eK`0PDU&dB}4PRXW^9YvVrJV#50m;W(l{??b=gXS+@8ugWc%^6^{p z8P5DejOz&Hb8aT&;8^SQN75mOcE%5@$9x%PCXo_e&S!t__M}}Kd)h(Ks)OMR6cV*1)q7>Lhsj+elL!%Jigbd{k``a z@YBloWir_A>B9l{EQMbB5PsHWpzm1@dst8SxuhRjlW1>`7eWqp-Nk)epEl{ecI2~| zem0Z+Rc0KqBF>jem_!Q;?lYd3KDu=U|BaW)E;(;AmFWO?=6MGHwKY4?9cPXp= zj656d`p<G}nxS?jsF6?`8M>og!uPx9&BeF5x8=kC*^+_|5LpS0;3wHtP`uT_Ce}D2Aw$fTh(8ke^+JPwh4V>ygHNp>g#~FMkdBG(C~% zm--cgAD?xe`kg%iZ`q3U$>`A<=f8zGzlj6;#-D&6SONP{JA8aG;PyRxV`W$wdx+6b z>b%p+dmfynpfi;E9aaT7)SL)8=s11#L&&Z9X!KX@;ij3uZ?^W|-(;Oq=n2p#`_5dB zqc)Bsg`doIXj?V}pzZb>iGH=-5BaR1Uwxf<+9d0I_e&Mze+u|d;`l0w0^XVi`jTF7 zzq&&}-%tIfQx2t!|7#fk_auD&mKa~jtk+UIS@uuZgEtNGNg;mEZ-DRP{Ss=oW7nYF z2=fUlhdcKMe)MP9kILaE=D}*12Wun!)hEJ_)zeR+b;tRF^^?u4pVW4LsDvE+mVWoU z679D4hJ1!nK2OO;u(6+-@4!z6+a1OGQc`$d%3{K|yAAf1{3v>)a;Q2L@@cltN!`kI zZVS)d2S{h^gTT+|j~?kb9Z34Aq`xEi+~H908Rq@r9@6=c>#rK?o$KW}kX!R;@L5az zm$%2hZK`$d?}d5jSL0Q{PbYr#V#BB0JHh)gAU($!aJZqro#Uy*_$9jY@Cx)RV)bjx zy@*@tt+?gDS-?-VJjS_2u&WT?$E;+-!x=}_@g4RE;U_!OWv_8S6klllvg2)qsw78RWU1{2VF@HFPrgURyHZ zk+q=T&ikx1-gqnuI?X))vODn)-yd`u_)dq~)hO<3)O`lMX#Qjh&%HKV=OW(|KX39a z(HFtL3?KJf{08=w9Im^MWV;uB1wMV&Ijp~*3qDi0ud4HGLx(s`mB?IvX> z&PQ*u&crt!a#K1nvBO;@?@`aZ2ibIzT|Rp`9_wDacNyO{osW68hCldD;yQCKtj?0d z_Via_OTQCNKz!v`@zpa&!>-zS?z>w1wFL5UxPH<8-XQj1)yO2(;=U_=Mis=({|s% zK82tAk2+rV^l^M~A4L5|GS_RZZLkORlkqJuFVyhfZ}syPZIFM`nSh8pa=-GG;In>R zBAu-l03Nd9mRZ@b{{}zwGL>{P?nQjtV2$7Lj8{__ul6IpGXeDdJjbVSlU^|P-+mzI zhlxM&c;Lssgub+X;48| z-FE``Q9u8;qfBz!T_gVHx}YSr_P z2w=R2tor1uD8`o><=g)Tc zFQhKox{vyU_t0*f_h761=N^Q9#jN~TbfW2(&`E)%`N@x2&YN~?S*N7!UOo--Y-0XI z{bwHY6?Ht<877_E76ZSHdDNkV51k8mGV9)z&!;W{|Gsv}P0tM-{yO|yp5+g-Cc!@I zUjx3QIX4FKd=hfSK1HrLNd>3?oa+-9}IcsE`%Lw zT(r|wfZKk4=|ix$_&?|eNM}(F_^){b{Hq=A%JpeI?`hF-eW(c5@EN}le5zhfNM?UA_|KRO`t8I&>vFW)RuB4l zgm2IOMy>tR+xLQg+nzx@xjV<>sl7nQ`yCh;H|T!PbDzETpu{-j_M?E`dIR`LXS=U5 z?~$4f{_9ESSXq!7xiuWIt&15UJpEiOS0$=jbx%SI6)2X4pgP6zEIk zv(KsE$KiWk0n*=I8Z!N@eI0hL{T&cM{M=%V>qTyUU?(S=c83G4O;`=ye;IW{&pn!_e=)=E6C^A0^rwipR^z0b$387$voGu{hAR5e(C~n z0&e9lbLu5@D&RiS35ghu9>X5+Bk4-_t9I)s_IC1E_pAN-B_Hxnwd&|rhCrvO445UP zzZ>)FO|0)tC;ahCK&R1~*Y1#s#_-d|bMb0#%jw5z?uXu04tI|2x_<0H)?c-ZhCG#@ zIXN6hmfjyY0Q~3WK@RFauf7d%`~I1?7J<)PtIoNv%&W$({M>Kt!T!E2bPPOx82EXL z@OS3Gej2QEojWZ=yP;blPxZH6Sw|T8*!4n3G2RYX@%FQfuRQ0W-SuoYy$|?ztb5?! zW)3nKb&<0R3t|(m75BvYFo-dV+$7@aeyS&xVKK-@ujQocj^r9_H;8 zeo6`YTYVPftoHNaUchfmM}Jwq@66a9aQoi5WuhP>&s^T`lu3TJle#IhF3Yg|+b+y| zw6bnf+{~!W4a!BGm!+y3qH3xjAHiCa2=Zm8sgPdcmSF9)g z9M*p}@O+Be|Gq(tqh!`ks(*WfdT+J#{__^F&wA^=paVVwJjHsi?V#@np9hVsCqHkz z2Dp#!Ua4PNB7!w`5<3X`N+Pk2&-w!W4fCFAg|8V6c{UC}yM2iNkRSZF zvfen4@Q)fHhlZmdv2ldA-9-8DJhk$F1NV25xWDrh@%?VSiqv0O^}|D1&yd1;h91O! zl5&e#a`VjtpU#1hKsE7~v_p>>tPjz3U!R?km+&(0p>n&Fahg8_IW&{bTJiHn{%x#> zm+;m7j(i&Z4On%^Kgx7z?6bwP&m~R3PZ|Zesr;8*20l~nM7!%rzcQKj`7ZF=2>*Fc z;5Qxxzg@?1oyvSm67wx8w>RHJo;+aX$)AyRld+R}s}BF(?I52R*QXw~+h6>x@oz1x zV^seTJRSB{Yx&{W@sNXOJo=?_ULo$t&`I7G{P!dOo@+^eMWP+1OFr4Wr&Ggo(DWRrq7fUlLBZ-xeZIcU<#)XbRiCbr|Q( zX85HZFc;@w*&lc3(+@D8_GA9Rpgx&2cOl}(E(Lyl448$4Pmwwn!>5<;S%_NQZ|-%#Z{oS6j|e|^Z{#0BR=hVQ zgmzP``n_*1LB6Pk`L`aV^K=yO#a3SK*=p#kp#*wV{Vsmj$bToNAtl+Ra1`mh&pdY2 zI^TV1H~VoroR9uSd5%x*c~Lgn4KqGhIpm3>GxEt`eAvu(r+ff=Xy$mYCj9Rz=i4A> zrGHZt@(Ek#WsYEeJ8H#6=e2{+YVPlNNPnLNkXyYa&*b@L-0kFK5UzHcb|C1~aUUd; zbgual{cYp929@)^9|J%93f4PnKR@dJJMSk{`TT1n{F^@&{Z;*LIR*T9xDO7kInMOK zY?tS2s>#pSvhQHzT*vwimD{I7fuGb1_8?+$zr51{&#>ODTek-M+xOSaKMwRWo=hAU zZ~qE-d#+eo-oclVLJJ|;S}H}^WGu!+Hv+~yX|?9{A%LovOX<|^=T@fy}p25 zH9my#uJHWtKtFEPt^F+kIj1l`mPz`(e*}IK^BAi4lG{Pw7YBz5A1?pH$T_|T<{hm! z8`F$+eR~G{o7zL8tfP(p^t}W5DEwequNyiZ>m5cv*ULVxmvhMHm(0kDGS=oZp2F_q)%HKYKZTE6+T6G}bjq*7z;|7Iqk@hUBB9^8n+2uND8lz7O+V z{S)Q?Hsi6TV(1b7={PqZiFvlhx)(QvdEi>+fkDl2-r{01aTK+u3`LUk!V?WY)^$F0A_JQ6blz&LhU*9Bt?A)I4 z7z8`7-GO#%8X3H7*|4tz|@e#gA*2^YNNF9!zD*Oq_ry2dGupVCJ`PQ3=Z&Syh z-M*yr{z0&lWUJ2qaG_(yMYJE<%^;&`a{+g_zoz4555`5+jElUae+~Ov!~QBi=g&od z!`v50C;sSdz<)CHR4V`5nV0sR0RL7={ENqN-sJn~(jE6JdmVIY`F^FwA;V^(-DcJm z>-chLhd%54!pUzyZmoPDc~8<`GzB3 z4gIR>y^{O*Nx8t+yxBtsf=-^bzq1YFhcM%Z5v2dvU6{wKt$WCCqdiwz_8gXmjNaoO z__1aR=&c7JxA=$9pz=TJeejdPcYIWj?>-Lv2;Z@q%DD85D}bMRANo~DKEF5!a&UO= zPt@vu%U%LJkM9DgJ?t&+-SuNTz|Z@M{{qi1*!R$0^9k&{?R50(XX4-W2bW|^E z9mqeKc^)0tTYLyQDb~A<57S>&Pe;3|mzz_;PXqJSD$f(dv6yvVi1~1uoAb9bK)>EP zPgf)BM`NFnA&^fB)bE5vAgKC%VPER2F&FZ5k^r9yaX7QN{%E)(KgE3A%KIWh#Q#C^FlN5X;CnYJH|Ivsx8IRW-;(XpZat)P&A#B@=fFOd z&f|jM+QUcNxR{xg=S&$mroW-xfZ0wu<8J}|)+f;~)z_EIe>OA!sd8S$ee>kKp!XEg zIeQ%XTQ?N&T*9wo-B+8ne!NfC>4u*s=7n}7pZCfCFmTV?7%w~0PNLn!dtb|ZYVaGZ z{Qp;QPTwv8JWvg|j?dX@AhEcRKoZA#Q1@oP`f(+XU@yJLBdM^8m^}@tn)sP%Yww{z0SJV==wdtXUjnN znL4(++v|{L>nJ#eTEfreJnpyV@p(JxItX^C{rWl+e8zdNj`I1zEoishI;UL5I_(JS zv_Vboqk97O-#8EuwTH#$(@ywaVL#gcEw_Sx<0IgtANen2TvR^=c9lc?BV@f}G&W)XUgufw%YVh-FK*viuw{m>daeS#9N;v8xj7H<@)W9>Q~` zQSVm$|M?f9-Dc)Vl>Rqdzk8m-gcBj1Z3lr)D)R|C9(yITUpzMrYjm7TF9ke<=VGRk z&ar<7+~Iq>A;PCgTx8_XawX=wRKnj&!uleK^$F_VLhd=@y?=L(xSsZ0$8!)Vq%-$E z^f%)($XVN+KLh=0wB!@Njr{KbJMq$=q)C3staoC(-$47jeHQ4n?F~EEI-;ZAgWWoO zw_W+^{{s3O^P#`%7(YBcmg8kGG@^FWm4DQ$ie>j%wZV%VpIxZTo2Ax{wue_uaDTjO-j)Q!f z3BP$f^wP$9R6pUB1Aw2wyaBj!oaf@8U&D2!(x3SW=(KacRrNB0>x)I!`r{hgeaT_Jhhw|b@ubRyRK2>HzaH!zQ_{^XjiupgB281fb3_TBI7 z_2ARXdl6M%@9>?qIPZ&)?zmt5gJ{>+4*4WeZlw|c8@(rS-KuuARWAA!>y5Zh{ng$a zk0ItI`jY-vVd%HXx>vU76xgjD=f711ep-0$L;ID=agoe%p>lXf4w@QyM)Kx$L zvQARv^C|7W+7vj+r}l5QnT&p&-tbp4eYjt)kTviczR#Wxu(RMp^vkjQ#sJn~#z(-O z#}ogAVMadkp46V;M5aIY>&JK_WW^gpC4XqfyZ;W@RbSFMSf%Hqa)6c_AJ3~*x zd{@W10;RwAtKc&-79&XQYFA;*$T@Zc=C#F?&zsV5)88=bdm&ZF8TG2vu8F-hod$WT zy&bv`bQ-PtsE2s&qnhVFl+MGqf&UEa9kD^8I3xddA9||tKV%Z*S!=~PM^0zE%)f;w z|Dfa*OlC|vUxKXtP&|1;y;rYAso9>>>~#h~wD{h|7S zT@C>}a53y^9OZdDI!nLx`G@320OIR749eF)aX6= zA&k2~4-h)|OYl?2_fH9SdNV&?$NYRhwtL2NpdVx0uKhagZNOVjgk~2L|5Ev{CmiMF7tjN=KWM(r#uY&)~|sdr=Z6%?y9!lsd@Q3 z;&XmKlk|6WHGjX+An`M{M;pCG4_`7H`tr{+s0w=w=vdbrIMdj=M(>G$Vctr(CyH!hj~ay z+i|`=81iYb?&n{10OkeHk-NK;wZFIC2|8Y`E45!<*)KExKhLWFDdze*!u9ny@;T`p z(D4UBf#&0QWMjp|MIqM1XqikqhKe_a`>4-(%+i#b1TmSDt=Kn^V(q|Mx#ehf9SD}^XB3U zphq9i_vt))=K>Rl?BuNAx<>imuA6($1&z0)^lVc&zFzfC0zVvNH55|7l zwgCN9(!ZX0n7R`&9yJg1x#Yo&JfoKXeB&SV54?X;^>X=g(DzvTQvu2+{s8E!eC~W1 z^aIDkPBcG%SP#V8ja_%(8<|2Oz-ApE+ykaOI+Ph%y|Jq4_N_WA43ZU)~WijvMx+^^5G z_UpfS1^x9hKFlQki1py7)>`$nk1{`>^i-nWPkb5uig6zhTnQJm@{+syDsgCROg3wp>A(*H7lK(=z&PM7o%Sx?yF8E zeXj`6&=2>3oKKWpX&(ur~6Hef_^UVC#fO)TdoUgt#!eY9U-4Q z#*?ZSpPa8WemmFN7kI&q=XY{qgzLO^`Z<)(MX};xuDNFcUVBcW-Da)? zyy;(nhsgiQ2cW;sILN1x1~;`8_%(W;8}SQeo;7~B(ejgvTt6WB3f7J9L;Pz_HgSUF zg+{_Y#}j_%mhh9_M`51}6h0d5hI#*3Kf*I-LH>E;VgG7}>5^wN>oTw9ulAuF^3Ftm zHE;GL<0$*yvtM38yRk*!r=D`Y;cSdAhx6?I}Ek0lqs{M>?M~-x#?8a)=Tho&otZq(Pn~T-O|t1$&5D?;XU3gP(d2I8pxZJ{okY zZ-PJ6akT5h;HTC)zqwNMZtTr#oqzmg1=qyd2hoZq%&^{^d7V7Fc0K<+-HrWhrWdzT9-r4ewFh* zXt%|xPs{!s{qkG&Y>#9>4oQsjQ%Gkv=fRq*;5ZfDur0=2^;2lqL;RW3ARqhP;V-3r z)%eev)8WC?uYNNV{O58Vlu0^Q+=F#`v$am|Ed$)pX}AUUpyT?~huAOcobuQQfuH;- z@MU}2{eGK{b{*Pbi0wW*2ID2bJgw^S*KWqUa}wlS$9JezKF_W(@|1U`Sif`>>3_@o zgWu}c_srMTTKT%&WF2AVS?_50t2pTln*wT{3!?U5Z{lhCH`)VS3MIG@lW~^ z@`*8z;U#|W5d5UQpLKr$rv+!fD*mAQz_~9DTIpSE*X#x~r6Pot$fHc%r7-s`K9}ZV*JKfN9|+327eDaN%Nt{^@Q)m^BQ%JW8P8w z{FM9ScAn>xKJb&d*85Q3k4C<_n)zx-)p6EJd}!jj(=GYz`7g@Tx>x^T?gynD4!JEM zpEs97U-3&oIhXJ`ybmgJ9`H2|yhz-;@v9-e@2q~{nsXrMFxR<#NM{l2jq6x%tmEQP z5sRUd)Cc28_f0;28vI9(z_`SgS71$N@&`yFbB$!EeoYx!Q1!oT4&o z#}nu4b0`OY3@sKCzgGzOQP%CN-jjX-yxO||?F^Y8O*~U=)z9qAbyH*x{G^a|zwM>PNr4);lIKF&N|jThE6*hqlHKe$B(UsP&=0m8A18cb(G9@v+?$ z!q;%0F~WVu9)#a`1I9%-j((|L%=BvHma!k&?MMF{i2y%$7VwqMFSCK4!hIQdEysEO z4%m6i&A?aq0~dk+I?ijVmm5jHrZkcM!~X>RI=So6e5$YGi0>&$#Q%nQ&iK8MPk{aH zDgMpKGnwmO<)@Dy{fb-fstjSg6td!_RGIjUe3FYn0a|vPG3B7sFcSRCquerPf&aj{ zu>U&p(>E9TO|s&m`9FhBhV@SU4C=9|FtNYCG5_Dn`-{{L2mJs(9qU}!Lefc^o=E4X z%YmP}C;BDB+5NUZ68z`x0sh+wKj3`8eYJq=xL8U08LaD2I~jR3`}H8&T~9g}{T=Yu z0?cbQgipHy{M7CRex_2MXWfPPJZ|Y_&$-~ImHE=Xr1NV7=rnV`CYA8f%&&&6{Hi|& ze!S0tPY>~nMWM!i>UqDk+U;HI&~DO-MEiX4eYD#;1N`g!bu8_~n+5u6Cle|E5bx_y z`DZ@>`b{4|&JpsHK{?kJfR4)f$0Nx9G|00b@p}f$d?Dvt_JYOw2>(Yu@awF+n)(u(uDD-{dy;ae&vSIuMFZ(zX|;K zpG3b@Zp%b*uKY{jmzwDhx1t}YFHV%h-jcX5><$nCHh|9cRuNkbhG-^s<_CE}Kuk z>r=XZ=s?7vBZ=nf~Fn!$GGt5B5KmbauQB{5TK74u2;6d)Bu!TlFoM2*XBhfmx7G znD~eB{=*3GKUDtjJ_GZ(XIG3bFY#Y_5$&d0`SzVTuO)F_%O(Cp%%8Mc^(yy|0{vvh z2`YzCqG+?;uiq1pp`>%yRcN=tY&^*qBfMoHkGeP5nufc?{2Ikb~0y zn-owP`FO1NKxa0?4}^I>PV=aKuCwA%=vUWS$GrwVGsc5YmBZJpf6FizM98Q0sEdC< zyS3K7z{iYN9cv$Fryjs>v(E3-ErfnkdH!0*`#C(Xk;3yDg_PS79|6CG=X5d&-+3M2 z?aLDV|INox&Q`tCF7E-J#B+`+=lr$MV+QNx_9XqiKZJbzyuV20(~Ilh&@qrt4e`&} z8uSBCLY}(+c*{lLv+ic-aVqg|BtIF}xy!n}u`Z}tk8!PjVBNK#W7m5`xZZTE^=3NT zZMq5VsyyEr4twiitzUks0R70#kY^GFbfp-uv9~sBUt=cod$ketcRl^U!}EdfT!VJg z+25m>$M!IfJ&*7=X9C}UI`DOT9d|zbPi`grMhWq=STB*x{pbwB(^!9-#QNJP;bY&x zxM=42M@ZFiK6u-}B~MF#u5z9s9Wni_I~V=Zakm}YZQ_0D3V&@m;-W??E?UVtjcVp4 z&^yQJ@j3fTIcvMyvW}~f@1=Ul|8p6TL;Qj5U5NVIMN$`G=7l!vKFRBbfqpgfLhy=? z^ZuT&tJbd}fpMgN^XIVJ8tdJVkH3H%!n}7v^|*RC=(k$=`JB@L_gU+ao!USrb_V3x zkL_kY1$gTqz*XY|AHE~|FGilxyFkA$>Hp(I%6Ti;p@;F$@^xr8kNI1b&)T`*zjiVFLm$$4kL$i> zuKQXEf0g?qwduguem%$fkb0{=WZQ1?UUmgpb0xej#dtoH|d@V@0-Kk(Jxo^dSghx!eX{`ssQYkVH)ret!&$IC?E>wDY>l7IW%>Y3cPO5(niwtKF`vF<)& zFL+w@SNpI&C&hZt=+rj!w=NDnM#<;3r0=!pXS@bJldb}v>aRlUKqq=P==hjV+lG1C zfc1X&KRJHaSaIg-uY!L46^ZnRaNnWvP3${lQeR`jz;CkN@i~Qbau+AkdGI&ry^(cv zs^6pX!GG$BiF(iE`lXro=VwwrA4z?YiMMMwkHdR7PQ4Uly8egvU#%zpxt9X&wcZEm z$-K0ed1+|PaaJD{@yF%Him{NNDiG+24vkGBIIKmGHL#9xvJ ze6LmK?^_9Y@_XPXLi`xlxov3}cWVeA{59yOo(;w}O0H^)tQM-(2=r?dtH~ zs2AR=sq{n7fll41#Qw%^0)Fm8(3j%B@iX|3@qBJF`Jcr8wqFQ*t!F-H8^niUzU$OL z{1>)He;wXuqI7O9L%YpU&=Iokck(*QlYXfO;bo74PK^0LNY8P~Cm;@q9|<~f##hgh zPR9N4Z%U`3p z{w4ds|3rpE0(%ku81qX}=9iSuU1mWJfw^c==Y=Bry{P5)dXUffGWv7Ue`!4Cm$3C7 zSpnCfDaS$%Ug8hi68yJV_nHYUE8^ii(jP7PO!qvC zRX3IN6#Cn~6Zl`u`MT|2v0gQc-?1cx0!LB zhxChS&$+Z`g?|&myk?(69LMvOO{}}iB%P(K*Nu(Y(S-~p+&qhE=Ev57kXv8Er|gSy z)XH{85__haznS%E zDQtI}5cs$EZO7dS|KM2l486Rt^AOL=s~naw4`0juKDEOuWg%wb*f{IfwA~$9PvT`g ziTbhLw5vwi6?)+~ldc1w_PvxxNJGZ{L%YDA^kcu?{TcmD;{LMAzpw@Np5Po zj!?fvh(mm&6Xw0L$-Gy#n(zaeS82EMDh&^!zqPy{K>NFtbvt=h-A<7C>M--wq7L`F zhvT>XWJo~e@bDFj;6&wFbP4FE@?50Sf4>y)nhSuhez@UO$hp9Qo=x>wehc8uR$O#1^Pdqb|9NUA_;IXvSk~mA-BjicbHwMlLe=kiy8|Au z@{`YO1GtCroAUodE$qkPzOdTEV-Ik?_!|0(kpHS90nfV<>vugrQXqOT`igA_y~uXI z`(4&eJ=N{(Z;bs#@8rJ3iJ;#U2mKJ+P2+eOXXTxi@tyAGHxUoF(oWhb|7O;w)sW7@ z$I1U5z}NfSzLPo@Q-76X(f^eB$yDZVRnDR7(O(bm{Z_rl?}eNjt@n9fXaGFdihH*? z0PxsW@NZ&%?)P8`?8;-+tM?#%AJ03a68|LTft#)SBzxToK5JRmw2JuUqhVKVtY7sI ze*Q_|$IrUTsf1U4LH?NsR(+L(GS-$|5Ho+M*PI9X z)mHrf)!oR8wpw}7^lyOQ_9X1;Owu3zDEJ9)Pd`BWS;TsY#={{89lyQ50v!+U4^h82 zWe@1r(*`;nbV9^`i3wJ0MD@Q7k!uhKj~4>!GAi=FDD|NY~wp|9@4*->yEg!?&xnkzrWqVkWaV( z{z1YI_bWaY@Qi)YqRQcnVbDutAB@Ky_%CNC`rDM@0L&vl-Zsdm!Fq3ZnG`k{J8XST z0uTB0zQnW=$gTDawA(~F*GvY!cQW8Aw;s$})}4iRqr@+`80`kExOzwsbUgn69Ua%l zzk+ss74%D#!wIhe9yk|p*$#8RWn6dHa{YS<+b!vdcH=GJCq(#e-1iJ~-xGgzoP8@H z&)VZ*=Sif$wZymXIDHKE<|myKUIcwl9>#AH0C zrjhq_seZS<9`v2ZK*vWqkDdg3OX4}ck%TYJhkP2WJlLy6;NLzUG3Nu&Z?*2}ZJP)D zymH7v`58w04?O~XsoXxA4?1~u>@VeZ?NaKI@zPZC`AC`Jzn7ECys@|i_gnZXbRuD|yESd9~hw#tO0sny#@UMFR>L>77%{-Xu3MmUEOmM=#}h?zh8-n6Dd{A6EYNx(RYf<+{m3{9E2eeN$vVO> zWqo_(1oT(T)%}i_eKaGt=DjfDbiC|y4d^7_hyE_19R_%Q)5G(d<4Awb3E)33IoX9s zSmJ*5*U^6NM^F0@{#yy)xz&KT6Q035Kq~La0X2D_Wj^rZyw_qV@t-==_`RK+Wb0gN z3;k`_sw>Oh8vSbHxk#m7&>Mau$pJt8sF;gSLA!w}08~EXr6X?Kl>xshX&m<}7eg}e z2HuxdLq2PNrJeA7giOMFPJ#S0tb3v^`5AmR-UU7S;6|Ofso>McI?qbdxt8lJ-}mqv zvi;|N?=*o<-YC!s6Muj1$N9J)r}FG~4*0LL>V998x=Pcpx?5mBpyoJ(D}W#6J*(=s zuMmSV_$^NZU-iD`8Q@3ugTHNu_?*3N=XhsbvEskXcT)1K^VfHuPyflfqa60Dmh(j| z_qnuRng0g;=KCQZ9govQ5ylUP4}yNvN#|gWm%8H;$4mQdz_;(AdiHYA58MO%JklA` z0(|FF`1wrw=c9!I({A#E6aeG8rm6755uUs8kj{0xLH@1lAvcxt`X00&?uX_QzvL~@ z35k05+pH|Imoz8C(p&bn{v*T>Orjdh>uIjke{GY_x)ESLqo)LHA|!s*a^3(u*o zAwSO^2Dy1pLVVtj@GH_mr@9y9<{|v)wZM0*`oNku;J2%-^~ko1z`wT_ELO+wmLd>i zpPu~__5S1*pl`o#m_HwWCXe|*?eDB*z>iyY`$+@n$3Fr6aoXQUz)$Ll=x-(A6LSG? z$pxSN=uh@@*K6`#8|xmG|HI1BZp{eT+jYc$hjqe%O2C(p{t*)Rng05icT)b#KLI>s z#jA6xj6CJNRO>y3t$zi6?xWx{o%HLwS$BUHg$Jp?~mHVg6dqc4uq{{=M91$LNsrDKh?Cf3-En<7(nx zuru(ZUtru-6TVvV(gr_boo9cB_YEfV9t@@5$bD7+X^>l(bl%NFyVWNo+TjU5V?Oop z-j73wzuoP?ul*`~7kj?5b@p>__R3 z`3J|vZh+T9tj^r2;4{E`LAAea#h~x21brXrUmyeD%-3yu0&^(gH!=^O%JXy{!hbme za&G4Srt+E0^;$jW_Zs4#bTs(PtxNPLxw8Rp$Or#t62E#C_-xC7epk^Q?_CIZY99EP zZo1#N3t`WxBVcKM!aw*D_(_j|P6^=`u+GHMycyw1th0?afc|2_rwoOkiSmAlK7>#H z7V|~*Td@CewEufg0z7s+==31|f->-9@B2?*h&<{#YhUAT-XrScJ)-JoKBRwZvHaWT z$6?;7vEs%ip>N{JtT`%{^FuqlL7#D(@K5U#Wby+LnHj`x?ssb}s?$welfx#-9yV{JEa>UEUnTZyGmFPbEKm??d}L zY&6D2gH<i=f9m-uJHh>cM*+nrT1U?qQ5SlkS9nTSEVkIR*YCkN1}7x@`Qr z7#9KSeyuZ_5l8u~IBIxL@E`sf<1Ul-u!G$HY~t9+E8t)2Ki^vgy`-K*eQ`Z<9M1>j{snHF+{=JLhV0|`DC9}CtPz0{BWj~ z7v1VU>iu0%2(jG*WZ%bK=N9qe-66H3Rb?iyj`Q6Ju-yf$_pY_>ow!E!xr~1OR{he| zUx9vr=Ofh5+{E))wd2w5b(Gsaasbeb_hjB%u6jJQ5^}2!LjI}b=a?|`9%sFu`ho2w z-Y|5cTz9J+c4fYlMqJ%nfvA};syECoNQ&p@6!-oNe#xGyg;4(!YPSoMkEU-h`hH1JM=G7{j%@t_+>5T*;Xsw``!=yWajf#j}N|2JGAz39y<>3*po1{2>F~j5%5qP z@DSk@x=PY_-+}H4+#YdrtWjcBuP+JtZ&d`i(c?hqYhtF@Ih^9sOO;c9)-r zetE-*_VyOzy(Y_U2c!c(Vy!EyR)U}0T+pv1{d952re9H>cTj(_?@hpO;C%}UA0uKh z{MYXc`_Xx1;jM`GynP`b9q$DrA)hwZ$&2~9-`mu$&$?f0?T%}ofXMJ*n?{{Re-TE2mZ-D32U=@z@ z$*X|Z%!PjA#CL+h8MDetgB6we<(0vp6P#XLTI>Wz=Zp^)7L^yxD6Xh1D$f}|qNJ>} zC?|hfNfG|m^=QLwydx{R380?{$;lT_1Os)oia^QTQ%TKdG& ziDTVgWLNed7z|d1%F9j*PRlP0s=Wpa@=Howel|gBgF$q#l-A!JG9$`l>_sZA4k!LG z%W->`Z-$uk(G`AobkIeP%ETtT>`R&qaP+05Y({ZGu*gU}Ft)&u%&r_9bVq(#T7NMI z`Kz>6TsmWPff!_3K`6gGSXrK5Tv;)?AS*jx{=*$}1?5HgG7u-tGGZ+~ZF7X132sEg zn-HDRy4pd4o1s*wa|q`&aX_XUo1jT)ZxSs*n4MkR;LP6*0h*ZUmWZsRsMA>O{L3K| zOVw{}aE`9Ko+ci;R4l5pAoS-oAEiHQx<%shI;j5MTc`OZmUcLAWi62A zbxp3QbapU^5!Y#S4jd^iwIoYSMw}UJbGm`Rk__``X21v;9@Fv*W@Z-zyJERuP?C>Sm`lSE}PruMO}0?gDqWO6Am3dJxxTB%YXZAA1`CN?76bhIa< zZggky$vAY)$@Luk-_y&B5`Tgp49a$W#_t7AC$oXO^a)iZC7l^7m46$31BHZ!Ocn`G z$uFrY8a~iOB}VTZU72m*399&0ZftOQQH7bEvRvo&$KBu{`MtziS+iU>YWp8=j`)l5 zMU|nlLK&MJ9{qKAj24qq`!6dhFDMFDma#`vdk1t{Sy_qQ_YE*(P-WBqocBntI4wUc zfr$8x&Nd47FUD9|T$;9FBzAUbY2wp5JjjT$Sz$8?CyunVG?%8twv|;C;!ira(8+VV z;8UxLM4_Fa9scBx1sNM=7~P>J$}kUXvQ6{W*s9*JhsVenJD*h8AoC?Fh0-ZllBy#%%^M#(NtjM$QoMZL$M& z`Q5Tl);2|rXbBU@<|&I^%F+1(Dke8P(%3@I+M)V z;AS|t%rSaIe-m8Si2jL#JyivZ8fIw;50c(=f|Qte7wEcEhyd2G{xJ z<@s}hrA4O&C5W0)=>|hxwVJkht#u`GD=x&8s8TT`B#5zuvoUL`Dy0K1%n{}e+VhW6)MAN3cszIkS%E}{S6Y?+gb3;v3J|GAd``+XjehCcs?2H2tRKiBX7 z!1Oy>{_~dhSG2x){niQdzi(-F%l|z~)0Y3=Semx368{TyJ-D!_GQYT_BCTWM&y)rK z=)lO?vYN>bZUDPW8Og{F{zJa}4;!?0@h_WA{xk>wZ>A3I|AyB83gg~fck=tz{{j>1 z@6D1S?4DhDhhwt!tD)ZsTUv+TRTekyT(&<~CZy7Q0x?^!MeI zA?0y=ab;*iStESO9|yxj$r4I3SpoYO~_7RwHb8~S!^qIA3P;cv1l zi)0bsO@={?d=tO-nPF>&_J2Sl%`5vXe*u~F$rVNA6Y^&j!Lz~H_zotz#K@m$9H{0H^34wK0exYnjaFeHe!$NKI=ID-SaFDPg8K0_x z%CbKf1iK6}C0Ss$8aKnx)6yg}s{wdtgO@D_Z-s0*aBtE~G=pYTR7if*>}pAd%xpSz zO4Jl{DdKMVK`dq&so>3EMV7MN4IZ~=#;!MqOxniD%#cN};Y_xA<$r=x?8tOV3Cn05 zyNTgC5F*(44ivogAM+;s&7bxr_?fe1TBiaU&Fl@(T% zn0;bYRhSWtG{}%ix^+BSyv-o&v1esHsk7@E( zQ*og)Q%B`MLN4Ek&L!Nzvf1_Nc43f}mF*2C?7`&(Wm8D^^wa)SIYPPY`b*`4>VcbU zg=JNyNTx&bW|yQWf5WaUl{-K(A4b<5{7Z4hG+}Ad*c?WG6~le98R*`%`Y4OF&)7l`Efw@?F)*-`6ZcHyLCGyb=>(^ zTj~0biS+wRTNT9{YeGkoTYAu$wf9qPIH1VT=`+z08@!GC_N}OEK&*;7%Mf&v)nD(&VMW{!XFC)vm6r@ znX0T3$();*po#@vf3%pxE$=EX5;_I4l{rhs0cdlG1*cU_m(m(D=>PZ*sVUAf`Q6e& zQ#oL^S*5H-G=abex&DM&6niXrO)q7eRSL^=7i427T=ZEe{eAgWl_3cqi{1V1PT{1K z+f}+X4QauWKu4^ZFv$hdhL|5r9Gz*(aNOD$36(b>Cj_RhQcRdC(`2#i=^7v6!ir~w z%cR85{r9Ns?BIytgq+~y?5s(_3B$%`xhVMsr&bkNox&T#x`=c%f?C;`YS3<5? zpeCxKs6Yz++*+dqf^G|DAKxg|lGX2{ZQZ%D5W5$u6fK6cx)G3Z{QU>J8j$^$(xQ^! zG%3%MB8v*M`7MHlv_vf;!$j_jODUgDJyQF3MI;1D3&QRMYw26jRT@a>Ks>yB;aDury9oFTan4L3xSaw!sP|R$~=n=+a z+WbS?oe6X|%3NbhK-}!H*72(Zv*>`D1)Z3MD~ zq%0|4llWs~aUjPV6la(1ld?-`V0M16M9OWmW@Qf#p6<-9C=E*sm2O>yWla6k$-2RC zCtGn0Zl;u;#F<$>ZJ>k+V#7N6T*%ByL7bj1t_&FRZ&RmLQFLn1tOymyEr-It+*%u( zhWL8%BniK&Dh=nCOAXbAVK6J)i30yzh`+n-xRhlAs?47zOjMT3Ok{>tX=OzRAEi>F zh`)7VIQ<7EjHoIRNzf1upXPe{?6e^M57atw=hjIDXBAacNLg(s9y^3-D(MPB<@l2c zpCL$biWO25i+^_c$1o$8PDG8P+t4wwB*`vFneB%1XA}~akN$lH^6%_jV&O`ujShB7 zPDmFwUODRvX1boZe6-X}3bw?VVsGQ5Fj>l~b)@}I@x(#>zr<5ox&#r%5U4DPX-(;k zsiQMdqA|`t$Zo=v{Xe4C|688^oLc`+dHVmGT2Z_FM@=nZmix<1?SGIbcQwI!by=PN zj}6ZMn7jW|eS*8r2W|eB9NX`?V;PaVyVbEB2BrT#@q|R+h6J0Nz1on0kqA&?Vq-5| z{M1bYZpKfoNNvOJ8jcYSm{e8Dy@tew6He>M>}*abx&IlE)Rj!y@(E`r{62iPN+{De zmORgzFjmeibp3h7{P?HX+}0@WAMKznEw_( zn=7A9Zod9Eh4WuwX48_%cJ~cW?G>N!lIyL9@0OaA}&T)-AF2O}Zw?(MkKprlO_j)+M@H!w0`XGji`Sj9AQsx=`0 z?`i?zLfT;6=<3Mjr<>YacUhM<$gK9UcOs{uBq1}}B4{Y(O!;4mi&)HFE+>7Yj{48A zSJ8P>^{-weI3>l?%!oLmqU?wP<{y%LHRom(=8mDU65PpFMWnl}m^9e}DJ%nS1bSY)}mEJ?*l2RBJqQcEJILOJehL|oz$6rog9 zO$*Kx;Zf*gXG@eUu_+oHB)`EAI$GSErl1n{e5fJYDVZWlJ;hjX_NEl#4nsMFzHzky zt8)XcC^`cq4G@$=m*Fz;=aNGVWBHK4l##2TbR57|oDFH={z63ZmjzYj?h){y9BiD4 zZ6)2UH)838FM{igUsc-WFFO68+XiTba$0$Fuw6g6If%OH(g}AXJa@^&M(}MmHiFs( zBi+k_V`wv({vGxJu_o*cc2>>?)ws4HCsaGp@0J%DXeZQ-bW)JrjoJcJKT#!#@3366 zAiHpYy1TIEplo50*~v6zXq}GCx<7Q&>0SQWjHOOYY@FW&)Q$41d&sloGK`3@Y=q<_ z0$mV#VD2w4Zp933nLB-*{w>o@$3Lm-9NErDWeS*sJI6Q#~z z{Bd@lugSokxg<}V+NCu;B;3sQo(8_ zDP-(Bjz9^^(lwu4R+3*eBh-mHb6cIRq~Js&=(3kzxPgz3(fPZ-2yr7g3!QX~5A5hm zXFvA4Uv&Co=il(KW*04R&e}~jnb228Rxgxo^ z;CF&boK?C+?5f!=5z(}%%CMwtOi}E-3#c{s*}b7-*{JMX9E(m@>~%$}TRa)K8|=Xy zNr{5$lF`H>7;_8A@1!nF(DX+YRhl~RNkt{*>YL7BbCZxMahILP&fpx`BDArkwrbR* z4kS})73lbvG%zl|bVikI{bh@bEuLOnU>fZF_t61!oCKrJyTKL9XxreSB~ZYzYcqZl z6d^&>hTmk#Q59T6lz=0lYzKi36k`ddxU1tYUH?|(*MXte85t#-pBskt+@!oh_ds)J9*sBNUjpF5m&gOq$yDgU6)#Q|%6xgGtYl5L|bS zYPN0@~+5`p}-zU zCbL9VRu(GzWmRTpW}ymw5so;>Owd9S+9+tph#P381I(lYPBiESorH^IIB0=(3^_w$ zxa#u=kN6|}kNE#T;!jk+170t$(ti&R4-XFyj|dMBG)6ZAwnDGvoOOe6`oql#SgbfA zDU>~@Wrg~}ckLzL-bf9Igjby&VWR{tkmx|%c8x>JRlTxtvCJs2OwuTDS%`%G1$7xs z2}B8+W;dZ~8qxrFVd@m-`T|EwgaN4-;SrLg(BYaw8Xd>{VsEw%(>g&HQI0;usvsvC z0um@KmNua)tB0p^3iwo!E;#jq`CZmgFBH3}kY?EC!lnM@~L*iyh?+Ntdtpnw~dzS6_@9+^6Z82SA0~fApQU=SbU&` z1;e*oxLz*M7xF+o-jT+^q#pA=IFpVC2MsrF^k974L)t7Q)Pm5e3;xWl!u#UZ;eF7R zV1cHahMa;3;ijd?J!B3%nHLqI^ZZXofg{6;yaiCr$?gzID7p_|ZH$&?WG6hW! zM@Swh)O6kd;8i2OxiyJTy0SG>8Rhm0*0v$Oc-6^|Zhi8b5Z`c&4LRHnhoLjQG}E*_ zW4J|l6xe=^k%0pQj#MvwwG6;wls=LbbgjVb0RoMWwRn*v{%J!mOr?(%3n28w3boXEpa6Zdq_%6$x?6V-`Ijfq$vVI&Fn??+|EQ!8FXn* zF_*;^ha9yDKH^H5ZEu?+@ZET2!NMkU73~C+NozqW^;ze+nw7^P>h~6>n*up^YKx*P z-%js5o%W`fR&=z#*^N>#4)|vn7&sr&mK{kKBb`-(MibmKT#ZB^u^L-YWKt+>LDwLf z-h)}T8%wlFwzB5^M28v$t*o{gnj?{#dRZgtTG14Zz3H+{aDYO$h?VSMFIJFp_e;7M z*gJTz39k-I_E`HXOYU_sNo}iBG1LhcsfYaleba|Ja#!0fAJ`or7+m%6DtxEje0&VM zg^pHxx|G!u+i|MH=^~AWpN!|j!v|fA{_R~_(Wt@VsiredXdt=jS$tAkVqP&)p}jic zlL}!6zARKvBbB0|?$Cfzo-@aPn=}c^d`IwC*EnciTPQlWIlvL|_+-1P6pR*bi@;5T z=e9khh~bqD9@wTl%P!2LQ(6^vJb0>Bi6B(c3^CWD@d!{h+=UYZBuLM+I#a zU<`dC(Zpo?)u5oBx0N2aBv~witwM1e|8CW;1F)RIEwN!=-_f7YO)~QHR@B+9?-0__ z4h8`w&g|kSxv%mEQzNiqKRG?t>b{C)5RC?e{GZNArX(kv0^;Ze*FPvF@eXp6;|@m` zw>b1UG9m21+xYe4`QfN{Z?@0k^`>e^x<0%x7I5JD@Y?hZ6YbI*(>bov9!)dU@r6|i zezo+~*A4b7j6b054JoOkXK}?h))}nMW+rPW&jKV#A6}SgAFk3Kq+jVX8txO*5t_+~ zq{GCNZgNi6Qe&W3;ZM|_J*98~5yU?Aa5pMa%GDKD&_z!R-d4AN5UoG*1=Z^>%JPOZ zha{wJwd;!#kf!@s37Ql(`sA@;Ut$XzVP`{}TW+geUbx@aX!C+HzGzJm*hpb}gla=#=m)SERs$4}QnGqLb>~#4#D;az8{0D&hdotZ8IKtXIChNo zUQfnTT(|9Fk&3MQV_ewj?#*ypM@OfCtJLyj{)hmj6FA8tq8kSRfUFA$RO0%i=H*8H?$GvkkITR4e5Y@+94HmMY8g73M&vgQ4v}qNo z8I*OP_8m@frOjfkQ(DsE7wZzwJ~NXES+7iIYFzT)o48j-`PCiCsawDWtzsyV{;Go@ zju}9f2Gh`W3V|YhwwkUXFh4WHa)HC+Lj$zIqb5yDL>S~!aj=*SLoA(@H5HF_IGiE{ z`uNb}N`7-G%Wq~Rs%HBni@H|T2bI}eR^@;4YVtq175QI^dagMPz)3E(EAZW`G4S23 zHt@Nqd$VX`sOs`(ujcY+x8m|wTkkbv7Kj}8wS^rY$DvjSEjDT_6Nmxz1WZQg+jMr= zJ;LlVC6^K@G>WZo`5jxb{&&5T9yqE40G?c;EDWOg+p@u{BHSF&NNy3Yv&-8JMNlbu*Dv@@IO@W6%H#t_+0Gv}SEh#uKb>jT>St5*;PNlqipc z2a+14%AcmEzl>$zu_vCbfX6XALMnnUX=!{2SDI;Ta^jVu{>k@aJ5>yy*jkrpBk0My8TDXEbSx(CZ{gl31R zwy@lKc*3qIw1-zfpria_Z$25tA41yO-%(o-w{f>0+YoDAltNl}+OKF@EUS>J2B`$J zOw?k)&MaJV`mH25ixVyQY1SbB??Eul%=M^jNJ^=PY9ry5H*M{t)ApRI(y6nn~pAMa?3wy$oKhb*2l(J&m>RD1lQ zx~cVLm95>IkMIZ{x-0l99v*b0aAJBuZ%iA;y<SOYm zUin~C(Yj9Ip6=jL)|F%JES9_ISp1@L)oFmOK6L z?Jwii)J@ zZWwA-u3l>bpLIK2@{Sk-_%7=zZVX0H8Nlmo;gG!2db1(R$Qp!goB@L7v5RGg5_ZN$ zcmaBB69i`~^aP$#SoH&+l>n8Tka7w*#h%-~0;u5lpmosgS zBNhFwbT>k(P@6bHQP*|VR?5SbC|^f^vuS8iWfw2CVsgr@;CZ@UOUkWCr{T3Cy?D_I zavbc?V#V`DR_ME~JzUh9p=)#k->Q!@DQNC83m1}61TsWxBB#4(-ro*;ePmx&(uC)^k6+xmI(1zSZJRhG> z+&i*#^5-8(B4Z3%5@8Eod=7a@_G_+z^$E0MKWwCI1=%*jQfNK0Ev4LH>8PHzGWi3G zd4X#l2 zkX39%9X6I-cyY208>4om5yON?i^L`j6K->c4R)AecVQCdw1k1A<^x(&T7h~PxPXLf z6r-7g0vDuMc{pyT1J!2VTRBi#V{;#^+ouF5SX6A^+NInn`iIG{PCI&D71rW9H8>i) z&fHjgZrl-?L<1i!xzI;Dv?z^^b#$=AavCZ>g<4C|STv~mDy6lSE!dGn3tr?G%g7do zB4c0AWx@sXEbAg#!Y-a8v<-t?lA2nP1wQLaRsvsK?3Fu9&u^lu3#TtpQuzKAuNQIDMAT0uAUMh6_m=`TTDTzbNMSXQ2u~S zO^E2RNB_i5k}-n(isD z1-9kFRJR)W2rEtITiW_wYwjJag=gAO%U7E2crQ2H?p_Y;1`CZS#!5)j@inZV_^=pF zuN;P&xe9d!LPYsA-Rz=in$DG_XgZ2uYrm1EE7WG14%B*0Cwh%ET~*vn(-mqnO;^=7 z(R4y=qUj1Rpy}ZiubyULd0BCMFH;2=;^YwiM3s}NXEYuf@p^RVLM@t#jMOpGFo{*< zaLQVP2Vv;bY%?yxSI%!j}xBTT%7Wx=6$W)gScMWe+Zr1qDzZ8A&B6a%fKciD7c0)gyEUU z%&p2oVRH!-BRG?SV;rk(qq?FBmH628s8`G`pdQK%sutUMr-+T^W=!G7mYaE^R@IYk zaD^&n5D==EPQgqit{(P1wObHPuj>~?)9dC1(L};9p6$erV9{A}7jcyW)toI0yKNbr zr6h%7rYe1bStXy=*$lO(zC5v%is%iBq#~ht%Q5Ft6sVyzeHnC^5y=s7)pgDkvq;7A2 ze~P$8IKH^*8Lye}5l=Hesw9i#Yz8ezIHov`DhIWsP{-WEwxWh?3WaIQB@wi3yPvPl zk9Alk#MAPOAI)U7*Sq#g31Nurrar1@9(%xcr!7yupVf{fG|=1sasfS zCPthY{U&EywJ4ng&Kziu!;c8eCALK;Rm2FdnBB>^v|!$a{<7(8RUh$xLG`VyPy^2f zgD+tyFRD&;%U;<~b-JqeA}&O-4+gzyN-M1$A}N^wW3n8L!)tH4d4JyG~amlvRfeO#Q~7IE)AJ$YY`R*pYv1uCu8IN~&era7anD)Xou^ zS%)xgV~=s++9c<4KjA=*j%W4BDd%z07d!O2(ZyA+pTSk9td#W$*X4}*nkwy(5*xdL zlXRi8K?;uMgbw3D!o^rsId(i2DnEOJrc~IcU3Z*Ms%J-F^rXH}`P$=mUpx(}cbi&^ z?lsOi-Y*z*fp)ODz|dIZRg#Mq8ZBl{b@1?~&Zz?_>VSe^Ou=<02Ec~@L+2ez>*dP< z5Qn-w;Hd_8mvSb{2&~xU52b!7Qx-iT5enI3&mZ9kh&jS-13Z6WLlL0Wx9O6aYcZV9 ztNf5&fdB|C`v50fNl$55TIx4KLpE`~$Z1%oU_4~2H#)ht1w?;viqi1FPdfpnEmCkaHRsxq6IyLRCg zWfF55pGhIou5^{IXjeKh*{*a7<#x%C4;-$Bc@7{t`~<$T?!?2PDm6}De4;F@bo#9n zE}(6)TAZUd;~t0=+~aFC_dtkoFANbM_NLp~a67WeIjzm6QP!U9qwLDorR#OMb?G$9 zt&_W`VWuUP!;AbxN@eHAbd^v6)%uj$oemKrX}8}%T~$s9zj?n zxzrrd<&uasEnOd~nwCzj)UeeRA) znFD%Tw|8)0F92a|?y7V}Nb*8!QJpwjXL-Ts%G6u6R#Nf9UA%XK3=>4Uk2F|F%Ywuw zW+Nzd5}BX}ePnD!I;;Ui5UsP=d~ct8_wtrJr4TZ~W{r2hClh;hiiUC%d64g2mItJh zZM(e25&4S7wW-JPs{+w~wtMw1q|VM{wpq+Ip^s9%={OKCbwX$f9~OVE3D5x;lpqNT zJl`1w#eduE`DE7Oh~6E?eU&{3?am|{Jf&_)GsbGmz#f&6NhhLGaz4ILIoloDyaWs} znQ*|*f;+G!vr^LM7b@v<_}Mm0FMaJ7)aaHpr9d8Bs6ZZk1c9`qsp6P;EGn;R=O8E& zWRE1~VV2#UQ994m;Z^LCk!xVxo?V-^EYqgN##+lDz;c@hRc+26(lP!AtOw1H<~Q(8 zP)~VYI^!aEYF?NeGOP%!d!v^g>1zaa)65)JoFN8-o_|)M5ynj!QY>2S!9}qll+J^? zj*nuQVIWEob83YMP0Kyk0REXfi{o!`FGY&-FL+MpDmS)R( zO49t%S5lhhHM`6a*I1e@>nTao`pI7@-Sk}4blprD2Kt`F1&o81Z7TJgbu+(GJ?FWO z={?tY9JH*bBu%@D`ASLCTbX=BX|}9KZO<83M(?9SjJ1+1Lhy1UomIjmIBuz7tr+gP z4y$tXO#|JX+@G34_T1gzY9)RkWj~NWOI%MuG zH5mP*mXHf?00i&)s3#}LH2ef%$2OOF_P{m9;sS3o=sasMP#1Wk!PfvNo!vVrDIoQM z-A~DtYtt$F!YhMz?S1BLtf$YQ3BtTZHs2S9RA{lurLTW?&1HbsCis`#v?8ig-=>n%0o#7poVD$xXU$t zb0JS8xMae$cV?L5cvdPyD4b`i5JQ9lOAu|WMnIdg%`&%v%V%p-u1PZ@YNf_?lDz-(3V-WYD029N0>>J8qVb#^vU)T^M-AV);sk%1aMArytk$kso`HCVk$P%qLscz9c zQ4+$7m!yweC+)wOzC&Oiy;0Nf>ZkE=<99f>DC4fZ#!2_pk}Rw`eTiLrqT0s@0>7n$ z5b-kDE&LB*e4F?~y`5QETxA13J((R151B?^ZDOq1RZ6Vl4OEPaLb>(Q(sytI;%+AO zXxy<%Io=zcA#+IgWK5eG_Lw(Xh8`9h4d~rzhe^BT9cz|)0gE0k1ZP;ccFb?` zg-SRUp$WEZbhA2)V8)-}qAg^xq50Bm;fbVRT&?blnht}m;0eD7P5m4q`ikzkrd4ZI z037Qp`(yhQ$#{h1I=_BvZ@j0TTLgUu)M*#YiPkV%z*Ym3#h>WT)!7v9+liv8FdtDri)lRMt<73*``(*FH@)qT)} z!O21JS!%SqG}vur5SuON_*!o+v?2J^$=XtcwFGWGy#4ISDA zAIvdd9FBVTC;~l~4!t2dTLdN5GFsBMUGP3v9(O;_<8t?N;uF@%xiWx&b(kZL)FgAG zCk*;aUx%Q-)IAxm7~)F&V#*g(^Oy<P);A2G~X8!LbWAQk*=|U+k=T9Xl&2$thb)F-Kjt1W>xqp z4v{7fTg;b9Bx7f-l2H$_55bei17l}gn3Q6^a3C^_Zx&mV7IWo=TaHy-LUGrjIx9O= zq2^XORE-+$IbF?4xQHg09_N&!-pDAIX0oI+-bmhL zYM>~k^{LUfxQ8B6f@U6iBgT{$Po5O*uQZsktf#Ln9+pT=O0mr3Y9Q3Mfaexk4P+JN z)j(ERtOioc#a099bi%8F3_6k3Ksu$;Y9O5iZcv3*1L=gE)d20h^R5)#9LD|2DO8ki8+LiU!L zm=0i@3)szQ>s3i3v*ffxtz44Zp_ey}>Owp85~wM*UM4ldcG{tqQpxSm>#fwf)S4{0 zF1>I|txGNLlIzkdz|^|bDlxe(y_9TJ7j!`{HydF)y{nd_$(-qRYieD*woR^0FMtuH zqK-y(%)i{VS|476+_8b-QjskU205Y9S#EPwXYV&;T#4Xq&FJmMbYUwIZ_+M?=iA2|w4K}>mFv%t>Gn>~yLb~eml$6_?jj=$-iw}(r}_G~I8v&G zM}z*C+a|U>XFO1DT4WIIe`&R_1vO%6G(5%;=5el}P|AEToc-wZ1l@1_!_@v)8N_k& z1e*sM>@ejJQKxxrh|qiEy_tIa9qIgXH4uvyj0&8jQF3pr>ib_@?{@EZl|+E)9CRjJ@$y}R&s04$J-=|V$C%pF_S8SQr?F=XS?4x)V}EcD!Dq@%%$U#I;^}I( zhG>E8s*A$u6>m=4HQOtnUj6#CO~c!j-t4z)`g*?&@7MY*CBM;cC%f73C+u%$X#1uU z%BX@t6IW$h6b{*ngDtxV%3j#bj;6ztFT1$EdI-lclMEkmW}A({@dOLG+~ULY+%=#n znbG;H$RL{O*tRITfhT5=UNl!yZt)B|wco>XC%0~#x|-7IRZqURo$0$@pCDin@wccu zlfoviAKFZ-?L5W}UA$(|VU_^c*vi(?g1EkQV?1H@yy}YO(nz8SIR3GYG zEmvXTjpT1=;~0SoLrYp5CA6eqJVn!r3>j|p=}KJwPDaZZ2+EVt{w#a_5HBE;wrfqu z5QC&nBRch%<_BOj}EVNwgA!!$zhcnL@T8R@O)m*u$O9=H2mOE4`4k zT8TyyYoRNWRKBoQm9R#=1<1-L)lO7Ctu~VKDdh|5nxj=GK!?`Gk2%!sq1(6|iir?GOi&~hiPfH* zLo8ls>Wr=bIX>h3$x7 zLZgSM+9*Y05p$BQTw4>;~L8!H;!}_wO5Bu{-^BMON`TY5%z1-^SoezG>kq>2lJ!p_^kMVS){H#YFHKX!7Ansydt@eONL!s zRXQG?;5JP6sD~td13C_wJ(%@zFo6nh|Ik^Rt}Y{a+v#*RygxvGg&}yGPH_p3#*;%k zh-7l6y6e9vIVJjgr?kH9?T@GG=6r1hoGz#q&sf7+mZ@DNS-KiZ69|iEm#q|5+Stsa zp6F;@DRo$vbfz<#V`l`3Emflq2FJaVd!s?;P~}YQ93p%9O#OeqgVc<)mC~6_5Qsg; z74h!9et$IF$0g&gDTn!FG@=+*k~w)JCd=-b$Oqp%?Qp3iB|I)?0;Y_zwzj^gjku}! z>|A0o{7MQYOSD5pGRCILV?^SB5&9m_{v0UaaxOmyI4_}Sg>tFL#$iEZ_Sa(Vr`d)E zvASD5pi@a)yR9vRd8f9J7Re_rORMLl;(5I#db1qevQ#KXx2xb1pPyVIi)3>T zUpwp#N2k+)=dG5$+CdHSrH||kmf(f4D1Cx(qenY^Y2Z#{c0@`ff5j zhkN7cuz0MEzbc<-&*uR--uHOXN}|IZek%KbbBUTNb+6FXaV1+{c#3@^5zD1+RjDJj zPwDdzDXT@cY~nk)5t^>v(30Pv^r{oFrs$7P;g1FwRj*_sGHi}%yQ`E9+d&XD4H)%@ zZmVAuEBn3f{A_q~0tHZo>?+x?rJ(AL{%khx;&FlFf-bR9^q;Okq4wc4mQjTa702dU zh2dB|eZXvoT1l%bQ^s~G4qTSIyPw*SLmG@Nw;f6cUWb2j@K~rbl^Qy&~v=FzKjgr+h?u$lIP88c%JSepqruMwEXXz*E7tNGLub^Eh@HTrA+aHTw!Hv50U}0qG4#yqag>NF z_`FmoLziJNuduA1G)h%J#wtrchhUGeCC`>Yd)Vwy-38=Zh@}QH36zI#Z7_ z%Z~M|q((9PvvLJ67HF+>l?`}@O{?R*#?qpy#adb>Xw=o|FvmisX|9lcHXSR_GE?a) z8D=V-j%5lOig}#eBQ^QLu}3be9c6XEFPzWf8=&O7#7eMTlSOPzPV)<6+^S1*$yk=K za8=KYrpr&;-Q3d5fGZLEzM4Bn7!RwMRD6?cwxqs0tKQWseRm`Pv!$M=-1+XXhKT%L zw8E?l)Cv!4OYPZVn;Y+GZttoEYG83-S7@v`Or^mpT`gY=A6P7Iu^!|j9i|Aa^#Rw+ zBEtu7@}dOW5Zw;;j`a#(ceUR{TEVCmnT4=fL>H?eEsJ#^4iCDfcX{~w#0*Yw<)Ve8 zRz{#xUdHfu%GHJM!8MJK5?e0Qq;)063 zxRup|@o{f>qEYR}9$M>tU>Y9GA%d%j_pz~tlb`85tfEimE}_y#CRTzw1Xp!(o&Zc5Y#tPGt-nD`fAIn zJk4$gqPrE$>pBB0iQathBx`}L;0(|gnSr_@F)-0y1D0(8d~ZGtzA2}pvz=EckjjGA zh&%iW1%gWV_IGgFgYa*PDhH`A_J-!=63A$8NZHh}(8b-p(eMOLFqGQMc73*uO0e#0 zUJ0sG_1K)(hN%GUZI_qTu1@W~ALqhLhN)+f3T(t4APWWFRjkFNrzR$dqS))IlwPzu zj6==ww0Cc?-8nlR9QTj(V~-WJ6_L%l4nA%Gtl4Xhtp&AQUjlZt9@7qRz<;> zizBA&CSNH$Kr00+9ZNMku35$$>1(Nm4tB~wj zUJQv|slSJ zl2oxB0p479LR5pkqZdi~$CEG{)VGBk%Y_|RL3}K_NqJP|ui*-*ShT{T!_+($S2fU9 zPY+aMAeNy*e`;ue7j8jl7uV6y;OC-=!OwOO6sJTPTfA;zM+aQ6Zh{Lbr0+pBM@sA= zj*YN_-=JV8&~<1$bWQ!y!QTWT^*`QMf548bg=m-V+8^(C5v0{cwoT2T*%|SayRUW? z3rSZYS$S6>S*gd63Y~_ft3s-+uF&KdCB4O2(>g|~u8xtaTc=G8B?M@i?4s-y-$0&#oglZ4FBoeVGd4F7|8Xrms(gA~>Q&gh6L)dwnqA$gdC(E!H<%!QHgLJRfVFARTKhu;c#?b^z)%p$%r*6RO<40p-4xf z-;>Kg3aMo(g%Igh8ny9yVudQ1ixjHnuA*;iSga~p&1XePFk9;%l$0q_BCZsX0ucd{ z9AYIZnvz=#vJ2H#j1H%lchXu8!9n$FW{{RN4-6Q5?-m^mD;U9K|vc z??s1`IFe>1{=ML(0;gc6T0vZnsxg_ZY9xoZ8br%r;b=;8>+*(pcjMOf=(cpPKR4cX zVmLv;VnxlCyGVBr&3aGmF~ybvl}ZH?c2O9w#WE7>YmbvSQngaKyu@h~du~;p7u*ZC zMMkigox|OLxyTd`G$1(5 zhY6)Cci6Zk(V-*Gw6!yxG$)pDZ_$UAXq;c*#4aD!k%@#N~b zIOul6jxtZ-uIKO6%5a|+1ga5;Ld8&V$kbzjR)kx%f>IF&;nwQ!6|J!ZVy!7CRPkAm zsmF@8M&Ch0--a8jKgZi*i$|JLl&|2iAX0~#at)05$kPX{V70ED@Lm#hcpCT1kS)5 z_<;|kM*9$Yzr8o|Vf)i@?||~GSukSpW|KjGcsT4^7~(%HOh+`iF|0cH)r47kUsT|0 z=!=(JV8xG8_34Rk9!39~Pt)T=rGeBd>r#}oz1mCO2z+{jz+iyLU` zeGt*M-ZvR?>wUyk29>p7jyy;A@Wl=P_CDE|V;VCkr4ksJQbw13crgNfxU9t?Rapz& zuP{Ov41jH;7Jgk`|9YSN?)5%7*1?CzTl9ly{gE%Ip1)u@yVm{T>dLyh7+~%nJy5Z; z9JOkaa@dpu&c2_8Y0=o9g%PtClgp*F5vD9nh)~eMS^lQ4LO_=nG#nY|0{agrEeWE1 z9r7!y;+yF=0WL9#z#+Q>R@7-hCAtP1LbNR>*Z8D|TNYQ4z7`;5VadcDz#A$SgZO%ghWaY4D!Wn10itdx1DTl zW9U11wN?GDoV!3zDmN$qr-NY2fC?{|<9gHtY3$1Kr{Dwgb+^xEF;E^iW-7|-uYvNs zAee2>krGZtfZLXWlTfGn3J0@t6v=I3i3?9W zD$ZT<$r!qcvGObcij$Y+DFFQpPXU}r>7Q*EpY#CPEfsdg(3$8wy#}`fjHJi|%a-O#xiSeZ#LN2M+pCy##M4Z+?)0$N1+eB5iTwUK5U*J4DZ1q3sjUDQ7=SF%Q-+w>v!No|71QjDQ>)`tCWJFI%X4Oz~T?9h->a4pcc3N4#}&eSTguq zNJ2!hc*+uKIQeDxI3JF-cYpMweaLwe*Ez-~FWq|k6Bdab0t?za zhu=Exm*A8^^B%6y45pa(bT-9pBz2?&ScChxa0oZMJ2bPOrKT<<|zn~{qDhVh6Koz21|1>E3sNkRkj+Qe8@~%7|8~9)&1>q zw!VX0ov3lIJ9~fxLkAe4^CQHg9t_9a^R}cy#rDb`F6?+&tt`eGJ(Mk4vxcbZ5^R5P zPr^2k)$qh*MJg!Ld7YrRIy84xE!rk--4rRAEO?DBmWa}8ctugduH74t5BBYtwdGZs zx&V9=dKdyDsdE6lvW%;dz4_sAFe*t0nW<-k;Fpz^-ocMfXOUuRlw(~}YTh+00q6Ut zhq8&AvoD8}Go35U(S~cYqw$%^wC%vJYdCU^NG0lB ziPYM-UxKZV1_)3UeYOQYa6{Q<^RgYZc4XJL7PfIXJRg(E66UJiN_8nQ@D>?STqakcwp#+PowN6vbRUh z7E@Mv0gb_eapX(}lwWQ}_sdzz__un(iSmIBF&|%}ZpM5ID>t_ucfXw)SD$1{L9IwkT37 zTJ&=)UYU-^JliIX8qsN?LvRQYgN466S5X*2lB*~b)G|?Zj z&c%qtuhVt!>^^gaq|DPD`i6hu^KmX=o$dD+$z^DjIKV3vMFwoq?X=ZrazEisVzoG? z)NqvwhkKqOZxGW<`5y3X&cT7)7@i9ntGH6U85MtybRdB=96H4ZKhb_>9zqj5CcDWI z{ub{hXIB&)my}p)iU}zv0jSLC~^*a3a%D46;?GOVkmhiyTI-4o!iTB z?}9eHk_*)H)8<0o6#oivabdEcB-(bNRli(}=z{<9pfnz(DxmK1g>P0Ba&B78K=$V* z*(_P-Vg_+_o#mx#MoSm7EDrZmn091=3f_|!sNrhE*2Y=&Ig4@h)5om!V=arr4gX3m zi$4ad-pUe+v#2F}6|dg)@_Yf zzraq=8I&rV=WH&@kMTHzN1Z2|l{@0BFrEn1>ZlCm-2v&7%sV|JlICPUt;2(R<$(pd zUP@tW!_D%fGA7^)zjOjQr zgiDvsaA1wlYiu!52#S?n4Etno4^bjbu!)aDTrfxU1tNGj>_R9ugH1ijyC?FwG0XLy<4R*7>CG19hONdST*09j5Zw+>{ zzBPO_>082W*tZ5%_N|ksZxv^c2$|9+IPuLu96%sGhz`B!X-~XUPg5HXJ@A|$f^(o^ zXY}6f5J3=#!J2mGy?fN{>Ghb+Taz@{q{3UtEG&F5AD`J3DMEKivr~DL z8>^;#Q8^yKu>M~8E8b7jUzG!CzdQ4t9)*thvuC~%C6~$aN6Q1;Ph|8(UMrH zuwAVx6|}Ea1!8u#s!V(?tt%C_yH%xPb8A(Zh#jsgBJ8oJX%Wi3>P_ClI(lH}Mv zPxq~=m8aQ;J1<7ZO6b+f<)K$fS)o7DbM=qT+s&K~_RPc|5FSaVbmh;5gs001Jhg>nE*ULKL=DdX(C{eeEIAO=nwP z+-S6mQI*lnzei{;4U~)6OGV{RvFo8~Y3YQ^7kB(9YzpgtJjsQt^tdK>+?##5jjMo2 z@lH?WsYL8}yFgw0FhA54F!f_NvuOBZyx-ZUcMiy{rHl)K2C03*030q+MaU9eVnP^o zkNc|$rn$&hflI0F@dA+9#;d?o*IjXS2={+@KePgwn8kIJg9fNuB>ba6|I2M8*Jlr{ zf-)42@l782<3{DEn$hqW*Nk+`SEa0R&q`ea`;mTmUEijx>zw|0^1!}Pg#Dq4Mv!eWU51Ru>HG$NuKDDZzCF zs5UVXoBhTV`^_j`>o;a{qu-Fr_1W+zJeyX^d((gaqN1a>=(UW7RJZy)To@kCA2cwz z8%k*#AP&#IcClo6BY+L7f#e zkjr{85mz>PWsUAdsmsoEbkKzIAzrYfgD99E^%$RisH?J;byWt@^Q$_Py#X>+px2jG zJ)!6}K-`!*T&rE^3aX6UkX?s#Ex(N0fZ>%jVi-}u(-}P;%kr+{T$XCs1X-++>}8=Q zjapTW8X@0OLYw?TO`GJGYStpZOp^v(b9xD>H4<7CDA}}WfuhaY7bw`Ik())YrM0nK zuxS&^C7ZRdT&_U_vCp9H8PnA#b8V%p-(>t%^mabw(<>zFJh# zT%0|Bn{r`vkC2;XN=xrEG@GwMH7|#ic(Zcq;ZIara$Kt?4SF+H9g`1dSa$Wk#1;Q~ zN6^%Tr66K)u<|gas+Ksq5IvoSg^gENeJNTRQYos-+1jWOqpEF{7Qwo*(Xc^#u)kBYuVWTB^_W;K)l(au;0bZsA8U--togO%koHM6 zyiubqao}SvIG`%_N9g=z)7pqFEOoukXMVDfG8CgXUjM*Du>tTxh&DmT> z1Xu1Nnp%{9RX=VFI(t7={DY?kScYIO`$kWjND1;$O5IRdG6iZlYAR8K-$YmjSJAGs z2wRi!1UccFY@ig=tx70{z3bXN7ga><*N-S?vGOu%{iBt&*%2~md`TxOhuD6vtz{EA z!e|$-QG+MnYli0$t=D;w&DBokzCqWbk_K3Y^OpS78?DXhKs*w)vMbMw8zMv4bhXYlsslTkdn820jZ7gxk@uXNGfIK4nI zXc|OzgX;MBOl|Q zBvaRu=~UB%k;3fadDXYj7f%6 ziG^INM#C3&wK3{y%qwhKQ=}uB6^At?`v&W_sjXX`0%9f%lqf=$O=+ayeLS6!iwn$S_qS|XX0Uixc@FD`(^{)S% zZR=cAN$sc{S9(cDIihh_?HEa!IpcUmUlc`btU;Ytt)C!5S4B)Z*Tb$k$(HyD2pubJ zpMgL?po!L8iDEY=YXbmlh$2infdvi#ujiG>mRZ;^cf`6z2I0yBc(UaI6jPydEw6|k zPP;jwE?H7i)~-s}%8PQ_LC%%BG`e;(egULP;?2IN7Ue4a%A4tfLYZ^Bpv+V@rIMsp zHq6y~tB9~Z!QgW0U(YPjt;8~Kttpmyj2Z#+ic2Bmh{2#iXrq0N9mv<+7^w^`DUn(U zjpq_pwg!|aweGJHMVy1{?CdsR+p&`F$5KzbA4_CcaAR1f2b3n$As<32RTDze)!qJ~ zL#uSZuuwDiQ(&Om8`AExL`LmaHq2)`TVh;frSTOpF0c%?O36m>>H;F|R{}!9>y9Eh zNnwv9I_A52^(UlS_1BatbQcIU>aXi*O(IYIx$?m6qgwSx(Ny(UMbgwCMVhNW(N9u; z#Za31t0HOYuh>dae=3lo{tCZB{i7ZtneOsr5l5#jo{~k4qtm9iN}}%Nj|q6nSiqCJ zEJsS5GVPx)o-*W^A`wDQkcg)KvG{H&k!)|jY)JD-vAK2T+-zEOVSw`)cxfR^2@P%y zgd=tVRfaSd7qavqP}@ebxJ?d2a6&f9&?_=7ol_N zfr`O7TybQ-(%I2z6I1;cdS~DED(hgKLcqO-2ZwvL^vt#K2FVmt%dD=5{8w>1yC{tp z4W^6^3u>^tGRhv1{?&d@EjxsXbla7U5sisDMHz(dtXb-74NHFrkC@^_NCwDm4br<>yuh4v>FlK zovfv_22uEqU3Lr9tvr0(>LrJZ8((X9SdG$0T=%n@x`sNii5Yf0Lx@3_GlbaI{SML0 zbTfGy730nB>OrfTXUKzes;4>xUwLbY))nf8#^+X9q1j={-FglTZFBaJI02bm3wP*b zlEO}>INMqP(Ji{mOAN8I;2QtZyi9NN33nw|!m3_s&jr`JvO*0$8w|e0tIro*x4Jlu zGv)b_%D~*f8C|r*AJFZSi>-HsE`hKkPLFe$>hVU(aiz8`NYivOB6RvsqwREg&$hi+ zjI!abS};_tLl)HhRag9HPsD5;pyE1jTX-OGPl~%}MTkYz>iia0a zr2q_PM=c@;T#m#W(c9|vsR#-VHodH7l=>-AauqGY3s(hoq;@%0sin4el@#3ZZ=_%c zYGkWAaGD(%RzZqsk}Zv#0L|EFi1ilJEG2y7aUA!^lL^+j_;mykae?FC`^A!`k9=p{ z<9+q0bazf2RJ~|vT|vthm^F(N+W?+Lr@9|Y8w~EpkmahRRkm6R-5G}tdHku zXbb$m7+4PabtfRACVpa_->fiE7S5oYiw2Uc(QOX$MaT&mCyO0l%%o&w< z9H)r=b*6ns?Ay@zavX5Dn7gBrQZ8_s-=;Y2LMCvXeIS!jN&4n}g9m9G{DvFL9he1IhX>@rR-z%IDTJ1NU|&Hj{ir!a%ykih-!n~rkd`y? zg}yspGk;dkRR-2%)DPabK!m=+p|@g9`54ZggX4;$TuI>guUtzE$*o3e7u2R)TRE=0 zgyU{Al|DwUwvazZ;`2lkjVo+Q)wG}iRfFmZBzu6A_{(=erB3Be#3h#6Zl9LBtK|l8 zfI~Ahi_Nq^tzjh3Wi=>R-Ovj;A8k|B#1t)Z>vIbXJG-Bb