@evomap/evolver 1.88.3 → 1.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/BUGBOT.md +182 -0
- package/.env.example +68 -0
- package/.git-commit-guard-token +1 -0
- package/.github/CODEOWNERS +63 -0
- package/.github/ISSUE_TEMPLATE/good_first_issue.md +23 -0
- package/.github/pull_request_template.md +45 -0
- package/.github/workflows/test.yml +75 -0
- package/CHANGELOG.md +1123 -0
- package/README.md +86 -543
- package/README.public.md +594 -0
- package/SECURITY.md +108 -0
- package/assets/gep/events.jsonl +3 -0
- package/examples/atp-consumer-quickstart.md +100 -0
- package/examples/hello-world.md +38 -0
- package/index.js +30 -1
- package/package.json +5 -15
- package/proxy-package.json +39 -0
- package/public.manifest.json +141 -0
- package/src/evolve/guards.js +721 -1
- package/src/evolve/pipeline/collect.js +1283 -1
- package/src/evolve/pipeline/dispatch.js +421 -1
- package/src/evolve/pipeline/enrich.js +434 -1
- package/src/evolve/pipeline/hub.js +319 -1
- package/src/evolve/pipeline/select.js +274 -1
- package/src/evolve/pipeline/signals.js +206 -1
- package/src/evolve/utils.js +264 -1
- package/src/evolve.js +350 -1
- package/src/gep/a2aProtocol.js +4395 -1
- package/src/gep/assetCallLog.js +30 -2
- package/src/gep/autoDistillConv.js +205 -1
- package/src/gep/autoDistillLlm.js +315 -1
- package/src/gep/candidateEval.js +92 -1
- package/src/gep/candidates.js +198 -1
- package/src/gep/contentHash.js +30 -1
- package/src/gep/conversationSniffer.js +266 -1
- package/src/gep/crypto.js +89 -1
- package/src/gep/curriculum.js +163 -1
- package/src/gep/deviceId.js +218 -1
- package/src/gep/envFingerprint.js +118 -1
- package/src/gep/epigenetics.js +31 -1
- package/src/gep/execBridge.js +711 -1
- package/src/gep/explore.js +289 -1
- package/src/gep/hash.js +15 -1
- package/src/gep/hubFetch.js +359 -1
- package/src/gep/hubReview.js +207 -1
- package/src/gep/hubSearch.js +526 -1
- package/src/gep/hubVerify.js +306 -1
- package/src/gep/learningSignals.js +89 -1
- package/src/gep/memoryGraph.js +1374 -1
- package/src/gep/memoryGraphAdapter.js +203 -1
- package/src/gep/mutation.js +203 -1
- package/src/gep/narrativeMemory.js +108 -1
- package/src/gep/oauthLogin.js +143 -0
- package/src/gep/openPRRegistry.js +205 -1
- package/src/gep/personality.js +423 -1
- package/src/gep/policyCheck.js +599 -1
- package/src/gep/prompt.js +836 -1
- package/src/gep/recallInject.js +409 -1
- package/src/gep/recallVerifier.js +318 -1
- package/src/gep/reflection.js +177 -1
- package/src/gep/schemas/capsule.js +26 -0
- package/src/gep/selector.js +602 -1
- package/src/gep/skillDistiller.js +1294 -1
- package/src/gep/solidify.js +1699 -1
- package/src/gep/strategy.js +136 -1
- package/src/gep/tokenSavings.js +88 -0
- package/src/gep/workspaceKeychain.js +174 -1
- package/src/proxy/extensions/traceControl.js +99 -1
- package/src/proxy/index.js +36 -6
- package/src/proxy/inject.js +52 -1
- package/src/proxy/trace/extractor.js +534 -1
- package/src/proxy/trace/usage.js +105 -0
- package/CONTRIBUTING.md +0 -11
- package/assets/cover.png +0 -0
- package/scripts/a2a_export.js +0 -63
- package/scripts/a2a_ingest.js +0 -79
- package/scripts/a2a_promote.js +0 -118
- package/scripts/analyze_by_skill.js +0 -121
- package/scripts/build_binaries.js +0 -479
- package/scripts/check-changelog.js +0 -166
- package/scripts/extract_log.js +0 -85
- package/scripts/generate_history.js +0 -75
- package/scripts/gep_append_event.js +0 -96
- package/scripts/gep_personality_report.js +0 -234
- package/scripts/human_report.js +0 -147
- package/scripts/recall-verify-report.js +0 -234
- package/scripts/recover_loop.js +0 -61
- package/scripts/seed-merchants.js +0 -91
- package/scripts/suggest_version.js +0 -89
- package/scripts/validate-modules.js +0 -38
- package/scripts/validate-suite.js +0 -78
- package/skills/index.json +0 -14
- /package/assets/gep/{genes.seed.json → genes.json} +0 -0
- /package/{skills → bundled-skills}/_meta/SKILL.md +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// OAuth device-flow login (RFC 8628) for the published `evolver` CLI.
|
|
3
|
+
//
|
|
4
|
+
// `evolver login` runs the device authorization grant against the hub
|
|
5
|
+
// (gh-auth-login style): print a user code + verification URL, poll until the
|
|
6
|
+
// user approves in the browser, then store the token at ~/.evomap/oauth_token.json.
|
|
7
|
+
//
|
|
8
|
+
// The resulting access token carries the `a2a` scope, so it is the converged
|
|
9
|
+
// replacement for node_secret on the hub's agent surface (hub Phase 2). It is
|
|
10
|
+
// consumed by a2aProtocol.buildHubHeaders(), which prefers a valid OAuth token
|
|
11
|
+
// over node_secret. Existing node_secret flows are untouched when no token file
|
|
12
|
+
// is present.
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
'use strict';
|
|
15
|
+
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
const path = require('path');
|
|
18
|
+
const { getEvomapDir } = require('./paths');
|
|
19
|
+
|
|
20
|
+
const CLIENT_ID = 'evolver-cli';
|
|
21
|
+
const DEVICE_GRANT = 'urn:ietf:params:oauth:grant-type:device_code';
|
|
22
|
+
const DEFAULT_SCOPES = 'a2a recipe:read recipe:write recipe:publish gene:read reuse:query';
|
|
23
|
+
const DEFAULT_HUB_URL = 'https://evomap.ai';
|
|
24
|
+
// Refresh slightly early so a token in active use does not expire mid-request.
|
|
25
|
+
const EXPIRY_SKEW_MS = 60 * 1000;
|
|
26
|
+
|
|
27
|
+
function tokenFile() { return path.join(getEvomapDir(), 'oauth_token.json'); }
|
|
28
|
+
|
|
29
|
+
/** @returns {{access_token:string, refresh_token?:string, expires_at:number, scope?:string}|null} */
|
|
30
|
+
function loadOAuthToken() {
|
|
31
|
+
try {
|
|
32
|
+
const raw = fs.readFileSync(tokenFile(), 'utf8');
|
|
33
|
+
const t = JSON.parse(raw);
|
|
34
|
+
if (t && typeof t.access_token === 'string' && t.access_token) return t;
|
|
35
|
+
} catch {}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Sync: the current access token if present and not (nearly) expired, else null. */
|
|
40
|
+
function loadValidAccessToken() {
|
|
41
|
+
const t = loadOAuthToken();
|
|
42
|
+
if (!t) return null;
|
|
43
|
+
if (typeof t.expires_at === 'number' && t.expires_at - EXPIRY_SKEW_MS <= Date.now()) return null;
|
|
44
|
+
return t.access_token;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function saveOAuthToken(tok) {
|
|
48
|
+
const dir = getEvomapDir();
|
|
49
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
50
|
+
fs.writeFileSync(tokenFile(), JSON.stringify(tok, null, 2), { encoding: 'utf8', mode: 0o600 });
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function clearOAuthToken() {
|
|
54
|
+
try { fs.unlinkSync(tokenFile()); return true; } catch { return false; }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function resolveHubUrl(explicit) {
|
|
58
|
+
const u = (explicit || process.env.A2A_HUB_URL || process.env.EVOMAP_HUB_URL || DEFAULT_HUB_URL).replace(/\/+$/, '');
|
|
59
|
+
return u;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function postJson(url, body) {
|
|
63
|
+
const res = await fetch(url, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: { 'Content-Type': 'application/json' },
|
|
66
|
+
body: JSON.stringify(body),
|
|
67
|
+
});
|
|
68
|
+
let json = {};
|
|
69
|
+
try { json = await res.json(); } catch {}
|
|
70
|
+
return { status: res.status, json };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function toStored(json, prev) {
|
|
74
|
+
return {
|
|
75
|
+
access_token: json.access_token,
|
|
76
|
+
refresh_token: json.refresh_token || (prev && prev.refresh_token) || undefined,
|
|
77
|
+
expires_at: Date.now() + (Number(json.expires_in) > 0 ? json.expires_in * 1000 : 3600 * 1000),
|
|
78
|
+
scope: json.scope,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Run the full device flow and persist the token. `onCode` is invoked once with
|
|
84
|
+
* { userCode, verificationUri } so the caller can show the user where to go.
|
|
85
|
+
* @returns {Promise<{access_token:string, expires_at:number, scope?:string}>}
|
|
86
|
+
*/
|
|
87
|
+
async function deviceLogin(opts = {}) {
|
|
88
|
+
const hubUrl = resolveHubUrl(opts.hubUrl);
|
|
89
|
+
const scope = opts.scope || DEFAULT_SCOPES;
|
|
90
|
+
const onCode = opts.onCode || (() => {});
|
|
91
|
+
const sleep = opts.sleep || ((ms) => new Promise((r) => setTimeout(r, ms)));
|
|
92
|
+
const now = opts.now || (() => Date.now());
|
|
93
|
+
|
|
94
|
+
const start = await postJson(`${hubUrl}/oauth/device_authorization`, { client_id: CLIENT_ID, scope });
|
|
95
|
+
const s = start.json || {};
|
|
96
|
+
if (start.status >= 400 || !s.device_code || !s.user_code) {
|
|
97
|
+
throw new Error(`device_authorization failed (HTTP ${start.status}): ${s.error || 'no device_code'}`);
|
|
98
|
+
}
|
|
99
|
+
onCode({ userCode: s.user_code, verificationUri: s.verification_uri_complete || s.verification_uri || `${hubUrl}/device` });
|
|
100
|
+
|
|
101
|
+
const deadline = now() + (opts.maxWaitMs || 15 * 60 * 1000);
|
|
102
|
+
let intervalMs = (Number(s.interval) > 0 ? s.interval : 5) * 1000;
|
|
103
|
+
for (;;) {
|
|
104
|
+
await sleep(intervalMs);
|
|
105
|
+
const poll = await postJson(`${hubUrl}/oauth/token`, { grant_type: DEVICE_GRANT, device_code: s.device_code, client_id: CLIENT_ID });
|
|
106
|
+
const p = poll.json || {};
|
|
107
|
+
if (p.access_token) {
|
|
108
|
+
const tok = toStored(p, null);
|
|
109
|
+
saveOAuthToken(tok);
|
|
110
|
+
return tok;
|
|
111
|
+
}
|
|
112
|
+
if (p.error === 'authorization_pending') { /* keep waiting */ }
|
|
113
|
+
else if (p.error === 'slow_down') { intervalMs += 5000; }
|
|
114
|
+
else throw new Error(`device login failed (HTTP ${poll.status}): ${p.error || 'unknown'}`);
|
|
115
|
+
if (now() >= deadline) throw new Error('device_flow_timeout');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Refresh the stored token via the refresh_token grant. Returns the new access token, or null if not possible. */
|
|
120
|
+
async function refreshOAuthToken(opts = {}) {
|
|
121
|
+
const t = loadOAuthToken();
|
|
122
|
+
if (!t || !t.refresh_token) return null;
|
|
123
|
+
const hubUrl = resolveHubUrl(opts.hubUrl);
|
|
124
|
+
const res = await postJson(`${hubUrl}/oauth/token`, { grant_type: 'refresh_token', refresh_token: t.refresh_token, client_id: CLIENT_ID });
|
|
125
|
+
const p = res.json || {};
|
|
126
|
+
if (!p.access_token) return null;
|
|
127
|
+
const tok = toStored(p, t);
|
|
128
|
+
saveOAuthToken(tok);
|
|
129
|
+
return tok.access_token;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
module.exports = {
|
|
133
|
+
tokenFile,
|
|
134
|
+
loadOAuthToken,
|
|
135
|
+
loadValidAccessToken,
|
|
136
|
+
saveOAuthToken,
|
|
137
|
+
clearOAuthToken,
|
|
138
|
+
resolveHubUrl,
|
|
139
|
+
deviceLogin,
|
|
140
|
+
refreshOAuthToken,
|
|
141
|
+
CLIENT_ID,
|
|
142
|
+
DEFAULT_SCOPES,
|
|
143
|
+
};
|
|
@@ -1 +1,205 @@
|
|
|
1
|
-
var _0x5b1d1c=_0x2519;(function(_0x8f6535,_0x18d41b){var _0xda75c4=_0x2519,_0x2ef657=_0x8f6535();while(!![]){try{var _0x46b667=parseInt(_0xda75c4(0x224,'\x6b\x26\x36\x6e'))/(-0x655+-0x20d5+-0x25*-0x10f)+-parseInt(_0xda75c4(0x192,'\x46\x49\x41\x26'))/(0x1855+0x1c4e*-0x1+-0x3fb*-0x1)*(-parseInt(_0xda75c4(0x259,'\x71\x66\x6e\x68'))/(-0x2688+0x2a1*-0x2+0x2bcd))+parseInt(_0xda75c4(0x178,'\x48\x40\x6b\x43'))/(-0x1796*-0x1+-0x261f+-0x2e9*-0x5)+parseInt(_0xda75c4(0x1e5,'\x50\x6d\x2a\x70'))/(0x334+0x2c2*0x2+-0x83*0x11)+parseInt(_0xda75c4(0x18b,'\x66\x56\x5a\x36'))/(-0xd79*0x1+-0x1a14+0x2793)*(parseInt(_0xda75c4(0x204,'\x57\x5a\x63\x5e'))/(-0x1f61+-0x159e+-0x1a83*-0x2))+parseInt(_0xda75c4(0x16d,'\x57\x5a\x63\x5e'))/(-0x1*-0x8a1+0x7*-0x1c8+-0x3df*-0x1)+-parseInt(_0xda75c4(0x1d9,'\x5e\x48\x79\x47'))/(-0xe54*0x1+0x273+0xbea)*(parseInt(_0xda75c4(0x194,'\x49\x6a\x4d\x55'))/(0x2041+0x2*0xd3f+-0x3ab5));if(_0x46b667===_0x18d41b)break;else _0x2ef657['push'](_0x2ef657['shift']());}catch(_0x25f783){_0x2ef657['push'](_0x2ef657['shift']());}}}(_0x3c03,0xd8619+0x74ec8+0x1*-0xc6a2d));var _0x57f002=(function(){var _0x1695b5=_0x2519,_0x466de7={};_0x466de7[_0x1695b5(0x1c1,'\x49\x6a\x4d\x55')]=_0x1695b5(0x225,'\x6b\x26\x36\x6e');var _0x4c440b=_0x466de7,_0x5f363b=!![];return function(_0xfdf60f,_0x1db3d8){var _0x452024=_0x5f363b?function(){var _0x2a73e7=_0x2519;if(_0x1db3d8){if(_0x4c440b[_0x2a73e7(0x244,'\x32\x49\x56\x74')]!==_0x4c440b['\x58\x5a\x6d\x53\x69']){var _0x4a602e=_0x393fbe[_0x2a73e7(0x25c,'\x29\x5b\x28\x56')](_0x1696e9[_0x2a73e7(0x26e,'\x49\x6a\x4d\x55')])?_0x2804ec[_0x2a73e7(0x1cb,'\x4d\x41\x23\x65')][_0x2a73e7(0x193,'\x5e\x65\x37\x4f')](-0x58d+0x3b*-0x65+0x1cd4,-0x19b0*0x1+-0x1*-0x2526+-0xb71):[],_0x573d4d={};_0x573d4d[_0x2a73e7(0x180,'\x71\x66\x6e\x68')]=_0x59c0e0[_0x2a73e7(0x285,'\x6b\x49\x35\x71')],_0x573d4d['\x74\x69\x74\x6c\x65']=_0x2a766d[_0x2a73e7(0x276,'\x64\x48\x4b\x33')],_0x573d4d[_0x2a73e7(0x1f2,'\x32\x49\x56\x74')+'\x61\x6d\x65']=_0x463e09[_0x2a73e7(0x17b,'\x77\x35\x40\x52')+'\x61\x6d\x65'],_0x573d4d[_0x2a73e7(0x245,'\x4c\x50\x69\x6b')]=_0x4a602e,_0x573d4d[_0x2a73e7(0x1dd,'\x6b\x49\x35\x71')+_0x2a73e7(0x20f,'\x4c\x50\x69\x6b')]=_0x55c12a,_0x46ec9a[_0x2a73e7(0x22c,'\x65\x4a\x24\x43')](_0x573d4d);}else{var _0x47808e=_0x1db3d8[_0x2a73e7(0x1dc,'\x69\x31\x43\x61')](_0xfdf60f,arguments);return _0x1db3d8=null,_0x47808e;}}}:function(){};return _0x5f363b=![],_0x452024;};}()),_0x10494e=_0x57f002(this,function(){var _0x5d73c2=_0x2519,_0x1ab5b5={};_0x1ab5b5[_0x5d73c2(0x1e3,'\x78\x72\x70\x56')]=_0x5d73c2(0x1ee,'\x48\x49\x33\x68')+_0x5d73c2(0x1a3,'\x47\x36\x73\x77');var _0x571da1=_0x1ab5b5;return _0x10494e[_0x5d73c2(0x278,'\x73\x67\x75\x31')]()[_0x5d73c2(0x1ea,'\x56\x73\x31\x7a')](_0x5d73c2(0x1a2,'\x26\x55\x43\x70')+_0x5d73c2(0x227,'\x57\x6f\x7a\x57'))[_0x5d73c2(0x23b,'\x63\x45\x57\x35')]()[_0x5d73c2(0x19a,'\x6b\x6b\x5e\x79')+_0x5d73c2(0x172,'\x67\x6a\x28\x4e')](_0x10494e)[_0x5d73c2(0x1aa,'\x71\x66\x6e\x68')](_0x571da1[_0x5d73c2(0x1d1,'\x4e\x78\x26\x59')]);});_0x10494e();function _0x2519(_0x59e883,_0x852a0e){_0x59e883=_0x59e883-(-0x1a2d+-0x2489+0x23*0x1d5);var _0x4636e0=_0x3c03();var _0x39e49d=_0x4636e0[_0x59e883];if(_0x2519['\x79\x42\x54\x52\x7a\x62']===undefined){var _0x2017ee=function(_0x3bbdeb){var _0x5b3426='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';var _0x2ced16='',_0x3415a5='',_0x58c98d=_0x2ced16+_0x2017ee,_0x53a2d2=(''+function(){return 0x1*-0x8ad+-0x25*0x83+0xdce*0x2;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')!==-(-0x81e*-0x1+0x772*-0x1+-0x1*0xab);for(var _0x1563a4=0x735+-0x1bae+0x1479,_0x5eec04,_0x15ab85,_0x3de8c2=0x1627+0x1292*0x2+0x2b*-0x161;_0x15ab85=_0x3bbdeb['\x63\x68\x61\x72\x41\x74'](_0x3de8c2++);~_0x15ab85&&(_0x5eec04=_0x1563a4%(0x2d*-0x9e+0x1507+0x6c3*0x1)?_0x5eec04*(0x61e+-0x1f0+-0x3ee)+_0x15ab85:_0x15ab85,_0x1563a4++%(-0x2*-0xef+-0x1342+0x1168))?_0x2ced16+=_0x53a2d2||_0x58c98d['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3de8c2+(-0x1dde+-0x724+0x2*0x1286))-(-0x19d7+-0x35*-0xb4+-0x37*0x35)!==-0x13d9+-0x2*-0xeed+-0xa01?String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x1*-0x19d3+-0x1*0x214b+0x877&_0x5eec04>>(-(-0xe*-0x5a+-0x266+-0x284)*_0x1563a4&-0x266a+-0x1*-0x1791+0x8d*0x1b)):_0x1563a4:0x3d5+0x9*0x20b+-0x1638){_0x15ab85=_0x5b3426['\x69\x6e\x64\x65\x78\x4f\x66'](_0x15ab85);}for(var _0x3f581e=-0x9cf*-0x2+0x1*-0x5c+-0x1342,_0x24c114=_0x2ced16['\x6c\x65\x6e\x67\x74\x68'];_0x3f581e<_0x24c114;_0x3f581e++){_0x3415a5+='\x25'+('\x30\x30'+_0x2ced16['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3f581e)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](-0x1a4c+0x1541*-0x1+0x2f9d))['\x73\x6c\x69\x63\x65'](-(-0x19ff+0x176e+0x293));}return decodeURIComponent(_0x3415a5);};var _0x22aab2=function(_0x50a48d,_0x41b429){var _0x1656d8=[],_0x34367e=0x1*-0xced+-0x1113+0x1e00,_0x832b6d,_0x301fce='';_0x50a48d=_0x2017ee(_0x50a48d);var _0x39a45c;for(_0x39a45c=-0x166c+-0x7ec*-0x3+0x8*-0x2b;_0x39a45c<-0x8f*0x1d+0xa2e*0x2+-0x329;_0x39a45c++){_0x1656d8[_0x39a45c]=_0x39a45c;}for(_0x39a45c=0x129e+0x10b7+-0x2355;_0x39a45c<0x1*0xe69+-0x43*0x5+-0xc1a;_0x39a45c++){_0x34367e=(_0x34367e+_0x1656d8[_0x39a45c]+_0x41b429['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x39a45c%_0x41b429['\x6c\x65\x6e\x67\x74\x68']))%(0x13f3+-0x2620+0x132d*0x1),_0x832b6d=_0x1656d8[_0x39a45c],_0x1656d8[_0x39a45c]=_0x1656d8[_0x34367e],_0x1656d8[_0x34367e]=_0x832b6d;}_0x39a45c=0x2635+-0x16c4+-0xf71,_0x34367e=-0xe1b+-0x454*0x5+-0x23bf*-0x1;for(var _0x13d63f=-0x14c*-0x14+-0x145d+-0x593;_0x13d63f<_0x50a48d['\x6c\x65\x6e\x67\x74\x68'];_0x13d63f++){_0x39a45c=(_0x39a45c+(0x1*-0x1b49+-0xd+0x1b57*0x1))%(-0xf*0x118+-0xa7*0x4+0x2*0xa02),_0x34367e=(_0x34367e+_0x1656d8[_0x39a45c])%(-0x8f*-0x8+0x272*-0x5+0x8c2),_0x832b6d=_0x1656d8[_0x39a45c],_0x1656d8[_0x39a45c]=_0x1656d8[_0x34367e],_0x1656d8[_0x34367e]=_0x832b6d,_0x301fce+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x50a48d['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x13d63f)^_0x1656d8[(_0x1656d8[_0x39a45c]+_0x1656d8[_0x34367e])%(0x25bf+0x2216+-0x46d5)]);}return _0x301fce;};_0x2519['\x4a\x70\x6a\x51\x44\x61']=_0x22aab2,_0x2519['\x4d\x69\x59\x6b\x6e\x70']={},_0x2519['\x79\x42\x54\x52\x7a\x62']=!![];}var _0x3764a4=_0x4636e0[-0x121a+-0x1*-0x122b+0x1*-0x11],_0x26e950=_0x59e883+_0x3764a4,_0x5c3209=_0x2519['\x4d\x69\x59\x6b\x6e\x70'][_0x26e950];if(!_0x5c3209){if(_0x2519['\x59\x53\x44\x64\x46\x56']===undefined){var _0x1671c4=function(_0x3dc05c){this['\x65\x51\x63\x73\x43\x72']=_0x3dc05c,this['\x68\x4f\x53\x63\x45\x56']=[0x2*-0x112+-0x1*0x1b73+0x8*0x3b3,0x1c63+0x88*-0x1+-0x949*0x3,0xc*-0xd1+0x1c71+-0x3*0x637],this['\x4b\x59\x6c\x48\x4c\x56']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';},this['\x6a\x43\x5a\x42\x7a\x61']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a',this['\x76\x42\x58\x50\x62\x58']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x1671c4['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x77\x4c\x46\x4b\x52\x50']=function(){var _0x808901=new RegExp(this['\x6a\x43\x5a\x42\x7a\x61']+this['\x76\x42\x58\x50\x62\x58']),_0x423151=_0x808901['\x74\x65\x73\x74'](this['\x4b\x59\x6c\x48\x4c\x56']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x68\x4f\x53\x63\x45\x56'][-0x5e*-0xb+-0x18d+-0x13e*0x2]:--this['\x68\x4f\x53\x63\x45\x56'][-0xbf*-0x22+-0x1ad7*-0x1+-0x3435];return this['\x73\x5a\x65\x48\x75\x4f'](_0x423151);},_0x1671c4['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x73\x5a\x65\x48\x75\x4f']=function(_0xed84ea){if(!Boolean(~_0xed84ea))return _0xed84ea;return this['\x5a\x6f\x4b\x49\x70\x63'](this['\x65\x51\x63\x73\x43\x72']);},_0x1671c4['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x5a\x6f\x4b\x49\x70\x63']=function(_0x7d15f7){for(var _0x3b3007=0x130a+0xb7d*0x3+-0x3581,_0x27c1b9=this['\x68\x4f\x53\x63\x45\x56']['\x6c\x65\x6e\x67\x74\x68'];_0x3b3007<_0x27c1b9;_0x3b3007++){this['\x68\x4f\x53\x63\x45\x56']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']())),_0x27c1b9=this['\x68\x4f\x53\x63\x45\x56']['\x6c\x65\x6e\x67\x74\x68'];}return _0x7d15f7(this['\x68\x4f\x53\x63\x45\x56'][0xca*0x25+-0x2326+-0x6*-0xfe]);},(''+function(){return-0x65c+-0x1c31+0x228d;})['\x69\x6e\x64\x65\x78\x4f\x66']('\x0a')===-(-0x24bb+-0x1db*-0x11+0x531)&&new _0x1671c4(_0x2519)['\x77\x4c\x46\x4b\x52\x50'](),_0x2519['\x59\x53\x44\x64\x46\x56']=!![];}_0x39e49d=_0x2519['\x4a\x70\x6a\x51\x44\x61'](_0x39e49d,_0x852a0e),_0x2519['\x4d\x69\x59\x6b\x6e\x70'][_0x26e950]=_0x39e49d;}else _0x39e49d=_0x5c3209;return _0x39e49d;}'use strict';const {envInt:_0x269146}=require(_0x5b1d1c(0x179,'\x5e\x65\x37\x4f')+'\x67'),_0x5388b3=(-0x2117+-0x157d+0x369e)*(0x22e7+0x1*-0x1c89+-0x25e)*(-0x18db+0x171e+0x5bd),_0x3796c0=-0x2558+-0x1*-0x2082+0xc2f*0x2;let _0x575183=null,_0x3c48d2=0x3ee*0x1+0x1e68+-0x2256,_0x1ee1cb=null,_0x363af5=![];function _0x144f25(){var _0x31ed0d=_0x5b1d1c;return Date[_0x31ed0d(0x232,'\x48\x49\x33\x68')]();}function _0x4c1cd0(){var _0x4c9ecc=_0x5b1d1c,_0x504e71={};_0x504e71[_0x4c9ecc(0x174,'\x5a\x55\x67\x28')]=function(_0x146477,_0x2e5d67){return _0x146477!==_0x2e5d67;};var _0x4f1a9f=_0x504e71;return _0x4f1a9f[_0x4c9ecc(0x185,'\x73\x6d\x71\x21')](String(process.env.EVOLVE_OPEN_PR_DEDUP||'\x31'),'\x30');}function _0x4b1c39(){var _0xab72e9=_0x5b1d1c,_0x5f1f7c={};_0x5f1f7c[_0xab72e9(0x1ca,'\x71\x66\x6e\x68')]=_0xab72e9(0x273,'\x6b\x49\x35\x71')+'\x50\x45\x4e\x5f\x50\x52\x5f\x54'+_0xab72e9(0x252,'\x6b\x6b\x5e\x79');var _0x4e7a35=_0x5f1f7c;return _0x269146(_0x4e7a35[_0xab72e9(0x220,'\x5e\x65\x37\x4f')],0xb3e0+0x172f0+-0x13c70);}function _0x8027d7(){var _0x58c77d=_0x5b1d1c,_0x43768b={'\x69\x50\x57\x6f\x46':function(_0x52d5e6,_0x4174e1){return _0x52d5e6(_0x4174e1);},'\x6c\x66\x6e\x68\x50':function(_0x5f4c52,_0x33f92e){return _0x5f4c52(_0x33f92e);},'\x4a\x57\x79\x7a\x6b':_0x58c77d(0x22e,'\x46\x30\x5d\x4f')+_0x58c77d(0x1bf,'\x46\x49\x41\x26'),'\x49\x68\x77\x51\x78':_0x58c77d(0x1a9,'\x5e\x65\x37\x4f'),'\x6b\x5a\x49\x51\x55':function(_0x2e73ec,_0x1322b2){return _0x2e73ec||_0x1322b2;},'\x57\x43\x68\x48\x72':function(_0x18ba05,_0x300ea8){return _0x18ba05===_0x300ea8;},'\x41\x4c\x71\x59\x4d':_0x58c77d(0x22a,'\x6f\x57\x78\x59'),'\x64\x67\x44\x56\x75':_0x58c77d(0x226,'\x64\x48\x4b\x33'),'\x53\x42\x68\x4d\x4c':function(_0x3a9ec0,_0x36cd76){return _0x3a9ec0!==_0x36cd76;},'\x48\x68\x57\x76\x4b':'\x49\x75\x63\x4a\x6d','\x48\x70\x69\x47\x6f':_0x58c77d(0x1a4,'\x32\x49\x56\x74')+_0x58c77d(0x288,'\x73\x6d\x71\x21')+_0x58c77d(0x175,'\x6b\x26\x36\x6e')+_0x58c77d(0x21e,'\x5a\x55\x67\x28')+_0x58c77d(0x284,'\x66\x49\x76\x78')+_0x58c77d(0x1da,'\x66\x49\x76\x78')+_0x58c77d(0x27d,'\x57\x6f\x7a\x57')+_0x58c77d(0x268,'\x75\x51\x28\x73')+_0x58c77d(0x1ec,'\x46\x30\x5d\x4f')+_0x58c77d(0x272,'\x57\x6f\x7a\x57')+_0x58c77d(0x238,'\x6b\x6b\x5e\x79')+'\x65\x74\x20\x45\x56\x4f\x4c\x56'+_0x58c77d(0x18f,'\x71\x66\x6e\x68')+_0x58c77d(0x1f6,'\x57\x5a\x63\x5e')+_0x58c77d(0x24e,'\x75\x51\x28\x73')+_0x58c77d(0x1c6,'\x33\x62\x4c\x37'),'\x52\x55\x47\x6d\x77':function(_0x3ed7aa,_0x4a8315){return _0x3ed7aa===_0x4a8315;},'\x46\x46\x4e\x47\x55':_0x58c77d(0x1ba,'\x46\x30\x5d\x4f'),'\x4b\x48\x65\x6a\x78':function(_0x52f424,_0x3cb26e){return _0x52f424+_0x3cb26e;},'\x4d\x51\x67\x6f\x4b':_0x58c77d(0x261,'\x26\x55\x43\x70')+_0x58c77d(0x26b,'\x48\x49\x33\x68')+_0x58c77d(0x1be,'\x65\x4a\x24\x43')+_0x58c77d(0x1db,'\x4e\x78\x26\x59')+_0x58c77d(0x28b,'\x59\x66\x50\x41')};try{const _0xf0599f=require(_0x43768b[_0x58c77d(0x1ac,'\x48\x49\x33\x68')])[_0x58c77d(0x1ed,'\x78\x72\x70\x56')](_0x58c77d(0x1ae,'\x5e\x48\x79\x47')+_0x58c77d(0x210,'\x76\x41\x46\x40')+_0x58c77d(0x23d,'\x6b\x49\x35\x71')+_0x58c77d(0x26c,'\x46\x49\x41\x26')+_0x58c77d(0x16b,'\x63\x45\x57\x35')+_0x58c77d(0x275,'\x47\x36\x73\x77')+'\x52\x65\x66\x4e\x61\x6d\x65\x2c'+_0x58c77d(0x1ce,'\x73\x67\x75\x31')+_0x58c77d(0x1cf,'\x6b\x49\x35\x71'),{'\x65\x6e\x63\x6f\x64\x69\x6e\x67':_0x58c77d(0x1f5,'\x48\x49\x33\x68'),'\x74\x69\x6d\x65\x6f\x75\x74':_0x3796c0,'\x73\x74\x64\x69\x6f':[_0x43768b[_0x58c77d(0x1d3,'\x65\x4a\x24\x43')],'\x70\x69\x70\x65',_0x58c77d(0x287,'\x4c\x50\x69\x6b')],'\x6d\x61\x78\x42\x75\x66\x66\x65\x72':_0x5388b3}),_0xefe0a1=JSON[_0x58c77d(0x1e0,'\x48\x49\x33\x68')](_0x43768b['\x6b\x5a\x49\x51\x55'](_0xf0599f,'\x5b\x5d'));if(!Array['\x69\x73\x41\x72\x72\x61\x79'](_0xefe0a1))return[];return _0xefe0a1[_0x58c77d(0x282,'\x65\x4a\x24\x43')](function(_0x4f2f8f){var _0x132aaf=_0x58c77d,_0x25814b={'\x53\x6e\x43\x6f\x71':function(_0x37e580,_0x47d9d7){return _0x43768b['\x69\x50\x57\x6f\x46'](_0x37e580,_0x47d9d7);}};return{'\x6e\x75\x6d\x62\x65\x72':_0x4f2f8f[_0x132aaf(0x28a,'\x59\x66\x50\x41')],'\x74\x69\x74\x6c\x65':String(_0x4f2f8f[_0x132aaf(0x1fa,'\x46\x49\x41\x26')]||''),'\x68\x65\x61\x64\x52\x65\x66\x4e\x61\x6d\x65':_0x43768b[_0x132aaf(0x187,'\x6f\x74\x6b\x74')](String,_0x4f2f8f['\x68\x65\x61\x64\x52\x65\x66\x4e'+_0x132aaf(0x27f,'\x4c\x50\x69\x6b')]||''),'\x66\x69\x6c\x65\x73':Array['\x69\x73\x41\x72\x72\x61\x79'](_0x4f2f8f[_0x132aaf(0x203,'\x64\x48\x4b\x33')])?_0x4f2f8f['\x66\x69\x6c\x65\x73']['\x6d\x61\x70'](function(_0x5bc3c6){var _0x41df95=_0x132aaf;return _0x25814b[_0x41df95(0x246,'\x65\x4a\x24\x43')](String,_0x5bc3c6[_0x41df95(0x1d6,'\x56\x73\x31\x7a')]||'');})[_0x132aaf(0x25a,'\x23\x75\x32\x47')](Boolean):[]};});}catch(_0x2de25b){if(_0x43768b['\x57\x43\x68\x48\x72'](_0x43768b[_0x58c77d(0x250,'\x6f\x57\x78\x59')],_0x43768b[_0x58c77d(0x176,'\x26\x55\x43\x70')]))return _0x419efe[_0x58c77d(0x208,'\x6b\x26\x36\x6e')]();else{var _0x3d5147=_0x2de25b&&_0x2de25b[_0x58c77d(0x25e,'\x35\x76\x46\x50')]?String(_0x2de25b[_0x58c77d(0x253,'\x48\x40\x6b\x43')]):'';if(/not found|ENOENT|command not found/i[_0x58c77d(0x1e4,'\x66\x49\x76\x78')](_0x3d5147))_0x43768b[_0x58c77d(0x16e,'\x57\x5a\x63\x5e')](_0x43768b[_0x58c77d(0x248,'\x57\x6f\x7a\x57')],_0x43768b[_0x58c77d(0x256,'\x69\x31\x43\x61')])?(_0xd47be4=null,_0x146612=0x1d*-0x1+0xb0*-0x1+0xcd,_0x17ce98=null,_0xaece8f=![]):!_0x363af5&&(_0x363af5=!![],console[_0x58c77d(0x280,'\x6f\x74\x6b\x74')](_0x43768b[_0x58c77d(0x169,'\x65\x4a\x24\x43')]));else{if(_0x43768b[_0x58c77d(0x1d7,'\x57\x6f\x7a\x57')](_0x43768b[_0x58c77d(0x27b,'\x4c\x50\x69\x6b')],_0x58c77d(0x211,'\x65\x4a\x24\x43')))console[_0x58c77d(0x1fd,'\x47\x36\x73\x77')](_0x43768b[_0x58c77d(0x1b6,'\x6b\x49\x35\x71')](_0x43768b['\x4d\x51\x67\x6f\x4b'],_0x3d5147[_0x58c77d(0x237,'\x71\x66\x6e\x68')](0x5*-0x3dd+-0x5d*0x3f+0x2*0x151a,-0x70*-0x3d+-0x137*0x11+-0x541)));else return qXxxwW[_0x58c77d(0x202,'\x48\x40\x6b\x43')](_0x280ac9,_0x387c52.env.EVOLVE_OPEN_PR_DEDUP||'\x31')!=='\x30';}return[];}}}function _0x375f33(_0x76f6e0){var _0x533cdd=_0x5b1d1c,_0x35a025={'\x48\x46\x56\x6a\x57':function(_0x14f1af){return _0x14f1af();},'\x56\x77\x61\x46\x68':function(_0x29f0a5){return _0x29f0a5();},'\x64\x79\x71\x72\x51':function(_0x3f1215,_0x539978){return _0x3f1215-_0x539978;},'\x56\x59\x78\x59\x5a':function(_0x396ea5,_0x53608d){return _0x396ea5<_0x53608d;},'\x55\x6d\x6d\x79\x68':function(_0x3a1739){return _0x3a1739();},'\x79\x77\x48\x5a\x4c':function(_0x1b9908,_0x4e8f8d){return _0x1b9908===_0x4e8f8d;},'\x78\x54\x59\x6c\x76':_0x533cdd(0x18c,'\x59\x66\x50\x41')};if(!_0x35a025[_0x533cdd(0x1c2,'\x66\x56\x5a\x36')](_0x4c1cd0))return[];var _0x25c2c6=_0x76f6e0&&Number[_0x533cdd(0x1a7,'\x5e\x48\x79\x47')](_0x76f6e0[_0x533cdd(0x20e,'\x23\x75\x32\x47')])?_0x76f6e0[_0x533cdd(0x249,'\x73\x67\x75\x31')]:_0x35a025[_0x533cdd(0x1ad,'\x48\x40\x6b\x43')](_0x4b1c39),_0x460a4f=_0x35a025[_0x533cdd(0x1eb,'\x52\x6a\x55\x5a')](_0x144f25(),_0x3c48d2);if(_0x575183&&_0x35a025[_0x533cdd(0x25b,'\x35\x79\x25\x4d')](_0x460a4f,_0x25c2c6))return _0x575183;if(_0x1ee1cb)return _0x575183||[];_0x1ee1cb=!![];try{var _0x408fbb=_0x35a025[_0x533cdd(0x1d8,'\x48\x49\x33\x68')](_0x8027d7);return _0x575183=_0x408fbb,_0x3c48d2=_0x35a025[_0x533cdd(0x22d,'\x59\x66\x50\x41')](_0x144f25),_0x408fbb;}finally{if(_0x35a025[_0x533cdd(0x17c,'\x50\x6d\x2a\x70')](_0x35a025[_0x533cdd(0x16a,'\x77\x35\x40\x52')],_0x35a025[_0x533cdd(0x27a,'\x46\x49\x41\x26')]))_0x1ee1cb=![];else{if(_0x2c8111['\x68\x61\x73'](_0x5a2595))_0x23f422[_0x533cdd(0x289,'\x69\x31\x43\x61')](_0x469557);}}}function _0x3dea97(_0x493a33){var _0x1802d8=_0x5b1d1c,_0x190819={'\x71\x74\x50\x73\x6c':function(_0x215e0c,_0x2f632c){return _0x215e0c!==_0x2f632c;},'\x4d\x7a\x66\x56\x6b':_0x1802d8(0x190,'\x43\x46\x26\x54'),'\x59\x53\x52\x6b\x55':'\x5b\x4f\x70\x65\x6e\x50\x52\x5d'+'\x20\x67\x68\x20\x43\x4c\x49\x20'+_0x1802d8(0x212,'\x43\x46\x26\x54')+_0x1802d8(0x195,'\x47\x36\x73\x77')+_0x1802d8(0x18d,'\x56\x73\x31\x7a')+_0x1802d8(0x1cc,'\x46\x49\x41\x26')+_0x1802d8(0x1e2,'\x5e\x48\x79\x47')+_0x1802d8(0x177,'\x35\x76\x46\x50')+'\x70\x72\x6f\x63\x65\x73\x73\x2e'+_0x1802d8(0x1c3,'\x46\x49\x41\x26')+_0x1802d8(0x188,'\x25\x72\x69\x54')+_0x1802d8(0x271,'\x65\x4a\x24\x43')+_0x1802d8(0x1de,'\x6d\x74\x32\x47')+_0x1802d8(0x1a5,'\x56\x73\x31\x7a')+_0x1802d8(0x25d,'\x6f\x74\x6b\x74')+_0x1802d8(0x221,'\x6f\x74\x6b\x74'),'\x4c\x62\x42\x74\x72':function(_0x255fe0,_0x5e8fcb){return _0x255fe0===_0x5e8fcb;},'\x58\x41\x6f\x67\x6b':_0x1802d8(0x206,'\x67\x6a\x28\x4e')+'\x65\x64\x5f\x66\x69\x6c\x65\x73','\x65\x7a\x74\x50\x42':function(_0x5900c9){return _0x5900c9();},'\x54\x61\x57\x45\x72':function(_0x4711cd,_0x2b6438){return _0x4711cd<_0x2b6438;},'\x4f\x57\x6d\x47\x45':_0x1802d8(0x215,'\x63\x45\x57\x35'),'\x65\x57\x44\x65\x57':_0x1802d8(0x228,'\x65\x4a\x24\x43'),'\x54\x75\x6b\x76\x72':function(_0x1ded13,_0x5e348c){return _0x1ded13/_0x5e348c;},'\x4e\x77\x62\x57\x6b':function(_0x1684d1,_0xa191e5){return _0x1684d1>_0xa191e5;},'\x56\x4f\x66\x44\x47':function(_0x4b96c8,_0x2c4250){return _0x4b96c8||_0x2c4250;},'\x6e\x4d\x4e\x58\x6d':_0x1802d8(0x1b7,'\x73\x6d\x71\x21')+_0x1802d8(0x1ff,'\x59\x66\x50\x41')},_0x2bf9c5={};_0x2bf9c5[_0x1802d8(0x1ab,'\x6b\x6b\x5e\x79')]=![],_0x2bf9c5[_0x1802d8(0x207,'\x35\x76\x46\x50')]=_0x1802d8(0x19f,'\x73\x67\x75\x31')+_0x1802d8(0x241,'\x57\x6f\x7a\x57');if(!_0x4c1cd0())return _0x2bf9c5;var _0x5f2458=_0x493a33&&Array[_0x1802d8(0x1c0,'\x67\x6a\x28\x4e')](_0x493a33[_0x1802d8(0x196,'\x59\x66\x50\x41')+_0x1802d8(0x230,'\x35\x76\x46\x50')])?_0x493a33['\x63\x68\x61\x6e\x67\x65\x64\x46'+_0x1802d8(0x223,'\x57\x5a\x63\x5e')]:[];if(_0x190819['\x4c\x62\x42\x74\x72'](_0x5f2458['\x6c\x65\x6e\x67\x74\x68'],-0x107+-0x1887+0x198e))return{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x190819[_0x1802d8(0x254,'\x66\x56\x5a\x36')]};var _0x58cf0e=_0x493a33&&Array[_0x1802d8(0x1c8,'\x6b\x49\x35\x71')](_0x493a33[_0x1802d8(0x28d,'\x57\x5a\x63\x5e')])?_0x493a33[_0x1802d8(0x1bb,'\x73\x67\x75\x31')]:_0x190819[_0x1802d8(0x218,'\x6f\x57\x78\x59')](_0x375f33),_0x269c0d={};_0x269c0d[_0x1802d8(0x1f3,'\x73\x6d\x71\x21')]=![],_0x269c0d[_0x1802d8(0x25f,'\x48\x40\x6b\x43')]='\x6e\x6f\x5f\x6f\x70\x65\x6e\x5f'+_0x1802d8(0x205,'\x76\x41\x46\x40');if(_0x58cf0e[_0x1802d8(0x20b,'\x29\x5b\x28\x56')]===0x2183+0xd*-0x45+-0x2e*0xa7)return _0x269c0d;var _0x36c5e4=new Set(_0x5f2458[_0x1802d8(0x1a1,'\x52\x6a\x55\x5a')](String)),_0x5dc9ed=null;for(var _0x42e7f2=0x1a9e+0x42d*-0x1+-0x1671;_0x190819[_0x1802d8(0x270,'\x25\x72\x69\x54')](_0x42e7f2,_0x58cf0e[_0x1802d8(0x184,'\x4e\x78\x26\x59')]);_0x42e7f2++){if(_0x190819[_0x1802d8(0x20a,'\x32\x49\x56\x74')]!==_0x190819[_0x1802d8(0x274,'\x52\x6a\x55\x5a')]){var _0x36befb=_0x58cf0e[_0x42e7f2];if(!_0x36befb||!Array[_0x1802d8(0x262,'\x71\x66\x6e\x68')](_0x36befb['\x66\x69\x6c\x65\x73'])||_0x36befb[_0x1802d8(0x1a0,'\x63\x45\x57\x35')][_0x1802d8(0x22f,'\x48\x40\x6b\x43')]===0x6*0x5db+-0x13*-0x1d1+-0x7bd*0x9)continue;var _0x377569=new Set(_0x36befb[_0x1802d8(0x16c,'\x78\x72\x70\x56')]['\x6d\x61\x70'](String)),_0x3b9790=[];_0x36c5e4['\x66\x6f\x72\x45\x61\x63\x68'](function(_0x511e49){var _0x459b2b=_0x1802d8;if(_0x190819['\x71\x74\x50\x73\x6c'](_0x190819['\x4d\x7a\x66\x56\x6b'],_0x459b2b(0x16f,'\x35\x76\x46\x50'))){if(_0x377569['\x68\x61\x73'](_0x511e49))_0x3b9790[_0x459b2b(0x17e,'\x52\x6a\x55\x5a')](_0x511e49);}else return _0x2cc2fd(_0x5ce93e[_0x459b2b(0x183,'\x66\x49\x76\x78')]||'');});if(_0x3b9790['\x6c\x65\x6e\x67\x74\x68']===0x5c*-0x46+-0x6*0x5a0+0x41*0xe8)continue;var _0x22c1a7=_0x190819[_0x1802d8(0x18a,'\x48\x40\x6b\x43')](_0x3b9790[_0x1802d8(0x1e8,'\x33\x62\x4c\x37')],_0x5f2458[_0x1802d8(0x170,'\x6b\x6b\x5e\x79')]);if(!_0x5dc9ed||_0x190819[_0x1802d8(0x1d2,'\x71\x66\x6e\x68')](_0x22c1a7,_0x5dc9ed[_0x1802d8(0x235,'\x46\x30\x5d\x4f')+'\x61\x74\x69\x6f'])){if(_0x1802d8(0x1b5,'\x63\x45\x57\x35')==='\x68\x54\x72\x64\x56')_0x1e2cec=!![],_0x1fe90a[_0x1802d8(0x1e9,'\x57\x5a\x63\x5e')](XtFtWj['\x59\x53\x52\x6b\x55']);else{var _0x50340f={};_0x50340f[_0x1802d8(0x240,'\x5e\x65\x37\x4f')]=!![],_0x50340f['\x70\x72\x4e\x75\x6d\x62\x65\x72']=_0x36befb['\x6e\x75\x6d\x62\x65\x72'],_0x50340f[_0x1802d8(0x23a,'\x63\x45\x57\x35')]=_0x36befb[_0x1802d8(0x1c5,'\x46\x30\x5d\x4f')],_0x50340f[_0x1802d8(0x265,'\x64\x48\x4b\x33')+_0x1802d8(0x219,'\x6b\x49\x35\x71')]=_0x36befb[_0x1802d8(0x279,'\x5a\x55\x67\x28')+_0x1802d8(0x1a8,'\x57\x5a\x63\x5e')],_0x50340f['\x6f\x76\x65\x72\x6c\x61\x70\x52'+_0x1802d8(0x182,'\x48\x49\x33\x68')]=_0x22c1a7,_0x50340f[_0x1802d8(0x19e,'\x5e\x48\x79\x47')+_0x1802d8(0x1f1,'\x65\x4a\x24\x43')]=_0x3b9790,_0x5dc9ed=_0x50340f;}}}else _0x341b91=![];}return _0x190819[_0x1802d8(0x17a,'\x6b\x26\x36\x6e')](_0x5dc9ed,{'\x6f\x76\x65\x72\x6c\x61\x70':![],'\x72\x65\x61\x73\x6f\x6e':_0x190819[_0x1802d8(0x197,'\x32\x49\x56\x74')]});}function _0x3c03(){var _0x546add=['\x6a\x78\x31\x45\x57\x35\x65\x30','\x57\x52\x6c\x64\x47\x43\x6f\x49\x6a\x48\x50\x70\x44\x49\x57','\x57\x50\x52\x63\x4f\x4d\x6c\x64\x4d\x43\x6b\x79','\x7a\x32\x64\x64\x4f\x73\x38','\x62\x53\x6b\x7a\x63\x72\x46\x64\x4b\x5a\x72\x45\x69\x57','\x57\x4f\x56\x63\x47\x57\x70\x63\x50\x43\x6f\x63','\x57\x34\x5a\x64\x51\x6d\x6f\x67\x57\x37\x56\x63\x55\x61\x70\x64\x4f\x38\x6f\x38','\x75\x43\x6b\x64\x75\x72\x70\x63\x4b\x47','\x74\x53\x6b\x35\x6e\x30\x39\x47','\x72\x6d\x6b\x36\x66\x38\x6f\x46\x6e\x61','\x57\x4f\x4a\x63\x4a\x5a\x47','\x74\x6d\x6b\x6e\x75\x4c\x4b\x58','\x79\x53\x6b\x4e\x64\x30\x4c\x41','\x63\x43\x6b\x41\x6b\x57','\x65\x59\x33\x64\x55\x61\x64\x64\x4e\x61','\x57\x36\x65\x51\x57\x4f\x65\x59\x57\x36\x34','\x6f\x64\x46\x64\x55\x47\x56\x64\x55\x66\x33\x63\x4f\x57','\x57\x51\x4a\x64\x4c\x38\x6f\x6b\x64\x64\x42\x64\x55\x4d\x30','\x71\x6d\x6b\x32\x79\x74\x35\x66\x57\x51\x4a\x49\x47\x37\x6e\x5a','\x6d\x4e\x35\x64\x57\x34\x53','\x77\x30\x66\x36\x61\x53\x6b\x67','\x57\x4f\x7a\x4f\x57\x52\x38\x67\x6e\x47','\x57\x37\x54\x4c\x57\x50\x65\x48','\x66\x66\x44\x51\x57\x37\x53','\x57\x52\x38\x57\x57\x34\x44\x4e\x57\x36\x70\x63\x56\x6d\x6b\x2f\x6a\x53\x6f\x65\x6a\x38\x6b\x65\x57\x52\x43','\x57\x36\x39\x4f\x57\x51\x47\x30\x57\x50\x43','\x57\x50\x4e\x64\x4b\x53\x6f\x6b\x6b\x59\x61','\x57\x37\x2f\x63\x54\x43\x6b\x68\x57\x50\x38','\x57\x50\x74\x63\x4e\x62\x2f\x63\x51\x38\x6f\x30','\x57\x37\x64\x64\x56\x43\x6b\x71\x75\x6d\x6b\x4f\x41\x38\x6f\x30\x71\x57','\x42\x53\x6b\x76\x63\x66\x66\x77','\x73\x53\x6f\x46\x66\x6d\x6b\x36\x57\x51\x4e\x63\x56\x71','\x57\x50\x64\x63\x4d\x5a\x4a\x63\x51\x61','\x57\x52\x79\x70\x41\x6d\x6f\x39\x63\x71','\x77\x4d\x75\x67\x74\x72\x56\x64\x4d\x38\x6b\x6b\x57\x37\x71','\x57\x50\x7a\x78\x44\x74\x50\x6c\x68\x47','\x57\x34\x74\x63\x47\x5a\x4b\x68','\x72\x53\x6b\x43\x44\x62\x44\x49','\x57\x4f\x37\x63\x49\x78\x4f','\x69\x43\x6b\x6e\x57\x34\x46\x63\x52\x38\x6f\x41','\x41\x6d\x6b\x39\x72\x64\x37\x63\x4a\x57','\x76\x4e\x53\x6b\x75\x58\x70\x64\x50\x43\x6b\x6b\x57\x35\x71','\x66\x53\x6b\x46\x57\x36\x53','\x57\x35\x78\x64\x48\x68\x42\x64\x4b\x6d\x6f\x73','\x6b\x72\x2f\x63\x52\x58\x79\x6b\x62\x62\x4b\x6c','\x6a\x63\x65\x49\x57\x34\x6d\x30','\x43\x38\x6b\x67\x69\x53\x6f\x65\x62\x78\x71\x45','\x44\x38\x6b\x42\x6a\x43\x6f\x7a\x61\x33\x65\x76\x57\x52\x57','\x57\x4f\x2f\x63\x53\x4d\x4f','\x68\x6d\x6b\x73\x43\x38\x6b\x6f\x74\x43\x6b\x4a\x57\x36\x48\x42','\x78\x43\x6b\x77\x45\x6d\x6b\x53\x57\x4f\x2f\x63\x50\x53\x6b\x61\x66\x57','\x57\x50\x68\x63\x4d\x66\x42\x64\x51\x38\x6b\x49\x57\x37\x79\x78\x57\x36\x6d','\x7a\x31\x54\x70\x65\x53\x6b\x64\x57\x36\x4c\x53','\x57\x52\x64\x64\x54\x43\x6f\x46\x57\x35\x50\x69\x57\x37\x4f\x74\x73\x57','\x66\x6d\x6f\x67\x73\x38\x6b\x35\x57\x37\x46\x63\x48\x63\x38','\x74\x38\x6b\x58\x72\x48\x78\x63\x52\x57','\x74\x38\x6f\x48\x57\x50\x2f\x64\x53\x33\x30','\x43\x32\x78\x64\x52\x64\x4f\x31','\x57\x52\x70\x63\x47\x61\x4a\x63\x52\x38\x6f\x71','\x57\x4f\x57\x7a\x76\x38\x6f\x35\x65\x47','\x57\x50\x5a\x64\x54\x6d\x6f\x37\x57\x34\x31\x48','\x44\x53\x6b\x71\x43\x43\x6b\x73\x57\x50\x4b','\x79\x53\x6f\x30\x75\x38\x6b\x4e\x57\x36\x75','\x57\x34\x37\x63\x52\x4a\x31\x54\x7a\x38\x6f\x71\x57\x37\x34\x74\x77\x59\x74\x63\x47\x53\x6b\x69','\x57\x4f\x74\x63\x54\x77\x5a\x64\x4f\x38\x6b\x72','\x6e\x53\x6f\x78\x6b\x38\x6f\x50\x57\x35\x6c\x64\x4f\x6d\x6f\x2b\x6c\x76\x70\x63\x55\x38\x6f\x31\x6b\x53\x6f\x77','\x66\x53\x6b\x41\x64\x53\x6b\x59\x57\x37\x33\x63\x50\x4d\x68\x63\x55\x71','\x7a\x78\x4e\x64\x53\x5a\x43','\x72\x53\x6b\x72\x63\x4b\x62\x76','\x6d\x73\x69\x35\x57\x36\x75\x57\x70\x6d\x6b\x42','\x78\x74\x74\x63\x4d\x68\x53\x32','\x57\x50\x44\x78\x41\x63\x35\x45\x65\x43\x6b\x44','\x78\x43\x6b\x76\x67\x38\x6b\x61\x6c\x57','\x57\x36\x35\x50\x68\x43\x6b\x4a\x68\x6d\x6b\x4e\x57\x50\x47\x46','\x45\x68\x4c\x48\x57\x52\x2f\x63\x52\x47','\x57\x51\x46\x64\x49\x38\x6f\x35\x6f\x59\x78\x64\x55\x68\x57','\x6a\x63\x71\x58\x57\x34\x75','\x57\x50\x78\x63\x4e\x73\x42\x63\x48\x6d\x6b\x64\x57\x50\x71\x73\x57\x36\x56\x63\x49\x38\x6b\x42\x67\x6d\x6b\x65','\x57\x4f\x4a\x63\x56\x32\x6c\x64\x4f\x6d\x6b\x6f\x57\x52\x6d','\x57\x34\x42\x64\x48\x64\x68\x63\x49\x43\x6b\x63','\x75\x5a\x4e\x64\x51\x4d\x54\x67\x6e\x6d\x6f\x31','\x57\x35\x6d\x4d\x57\x51\x47\x6d\x6f\x65\x6c\x64\x4c\x43\x6f\x53','\x57\x34\x64\x63\x49\x49\x38\x68\x57\x51\x71\x4c\x57\x35\x4b','\x57\x4f\x48\x78\x45\x49\x35\x71\x67\x61','\x71\x33\x48\x6d\x57\x51\x57','\x57\x36\x4a\x64\x54\x78\x4e\x63\x47\x4c\x68\x64\x49\x57\x34\x34','\x57\x34\x2f\x64\x4d\x31\x37\x64\x47\x43\x6f\x66\x57\x34\x43\x6d','\x78\x53\x6f\x69\x45\x38\x6b\x6c','\x64\x43\x6f\x53\x57\x51\x74\x64\x4a\x77\x78\x64\x4b\x57','\x57\x51\x4e\x64\x47\x43\x6f\x51\x67\x48\x42\x64\x56\x4e\x69\x75','\x57\x35\x64\x64\x55\x57\x52\x63\x4f\x43\x6f\x4e\x57\x51\x48\x62\x57\x52\x71\x6b\x57\x4f\x4b\x39\x43\x43\x6f\x6f\x57\x37\x34','\x73\x38\x6b\x59\x44\x58\x31\x71\x57\x36\x33\x63\x49\x71\x6d','\x73\x43\x6f\x69\x77\x53\x6b\x50\x57\x52\x78\x63\x56\x68\x56\x64\x54\x71','\x6c\x74\x68\x64\x52\x59\x64\x64\x55\x66\x6c\x63\x55\x61','\x62\x6d\x6b\x73\x69\x6d\x6b\x67\x73\x43\x6b\x55','\x57\x34\x64\x63\x47\x77\x75\x68\x57\x50\x72\x76\x57\x36\x75\x65','\x46\x68\x4a\x64\x4f\x43\x6f\x6d\x75\x6d\x6f\x35\x57\x52\x33\x63\x4e\x71','\x57\x50\x74\x64\x51\x65\x69\x5a\x70\x43\x6b\x6c\x57\x36\x30\x48','\x42\x38\x6b\x7a\x77\x62\x70\x63\x50\x61','\x6f\x65\x4a\x63\x50\x4c\x57\x31\x6f\x33\x69\x6d','\x6e\x43\x6f\x4f\x57\x50\x33\x64\x52\x32\x6d','\x57\x4f\x78\x63\x4d\x4d\x56\x63\x48\x43\x6f\x33\x57\x50\x4e\x64\x48\x6d\x6f\x52','\x57\x37\x74\x64\x4c\x43\x6f\x63\x57\x34\x48\x45\x57\x37\x43\x41\x71\x57','\x6c\x43\x6b\x48\x61\x43\x6b\x54\x41\x38\x6b\x64\x57\x35\x4b\x30','\x57\x35\x64\x64\x56\x6d\x6b\x42\x45\x43\x6b\x50','\x57\x37\x38\x6e\x57\x50\x6e\x42\x57\x34\x74\x63\x49\x4d\x6c\x63\x54\x57','\x57\x52\x78\x64\x4a\x43\x6f\x2f\x65\x49\x65','\x71\x6d\x6f\x74\x66\x53\x6b\x50\x57\x52\x4a\x63\x50\x57','\x44\x53\x6b\x6c\x74\x53\x6b\x52\x57\x50\x4a\x63\x55\x38\x6b\x4f\x68\x57','\x72\x6d\x6b\x59\x79\x4a\x7a\x59\x57\x36\x33\x63\x47\x72\x30','\x6b\x71\x68\x64\x4b\x53\x6f\x74\x73\x71','\x75\x30\x52\x64\x4a\x48\x47\x74','\x57\x50\x6a\x78\x45\x4a\x4c\x54\x65\x38\x6b\x45\x6d\x61','\x57\x51\x46\x64\x56\x43\x6f\x6f\x57\x35\x44\x70\x57\x37\x6a\x77\x73\x71','\x79\x77\x70\x64\x4a\x64\x61\x58\x57\x52\x64\x63\x56\x53\x6f\x4a','\x44\x67\x68\x64\x50\x71','\x57\x50\x72\x4e\x57\x51\x34\x6e','\x64\x30\x44\x57\x57\x37\x6a\x49','\x57\x4f\x33\x63\x4a\x5a\x53','\x57\x4f\x57\x53\x74\x53\x6f\x37\x70\x38\x6b\x74\x67\x47','\x74\x43\x6b\x77\x42\x4d\x44\x55\x57\x50\x33\x63\x53\x59\x65','\x62\x53\x6b\x63\x69\x38\x6b\x64\x77\x6d\x6b\x30','\x57\x36\x48\x4b\x57\x50\x75','\x7a\x77\x78\x64\x53\x64\x4f','\x44\x59\x4f\x4a\x57\x4f\x61\x73\x65\x38\x6b\x36\x57\x4f\x79','\x71\x67\x72\x66\x57\x51\x65','\x57\x50\x61\x38\x75\x38\x6f\x31\x6f\x38\x6b\x63','\x57\x50\x47\x4f\x73\x53\x6f\x32\x6d\x53\x6f\x7a\x72\x43\x6b\x4e','\x7a\x76\x31\x70\x6f\x6d\x6b\x76','\x64\x75\x4c\x38','\x57\x51\x4a\x63\x4e\x49\x6c\x63\x48\x38\x6f\x6f','\x57\x52\x37\x64\x55\x53\x6f\x71\x6c\x57\x69','\x44\x53\x6b\x7a\x66\x6d\x6f\x69\x61\x5a\x71\x70\x57\x52\x69','\x73\x38\x6f\x69\x42\x43\x6b\x6c\x57\x34\x38','\x73\x57\x4b\x37\x57\x52\x4c\x2b\x6a\x6d\x6b\x76\x44\x74\x52\x63\x54\x43\x6b\x52\x57\x52\x54\x30','\x6c\x4e\x4c\x4e\x57\x34\x75\x61','\x57\x37\x78\x63\x56\x49\x79\x58\x57\x4f\x71','\x7a\x72\x33\x63\x51\x76\x65\x72\x68\x47','\x43\x4d\x75\x6f\x44\x49\x75','\x63\x53\x6b\x72\x57\x36\x4f','\x6f\x43\x6b\x32\x57\x37\x74\x63\x49\x38\x6f\x42','\x7a\x6d\x6b\x35\x76\x61\x7a\x78','\x57\x36\x44\x4d\x57\x4f\x72\x58\x57\x52\x56\x64\x56\x43\x6b\x41\x69\x71','\x57\x35\x46\x64\x4e\x75\x33\x63\x53\x75\x4f','\x57\x34\x6c\x63\x4e\x78\x57\x61\x57\x51\x30\x52\x57\x34\x2f\x64\x4e\x71','\x57\x34\x34\x62\x6c\x77\x53\x68\x72\x6d\x6f\x61\x6b\x30\x34\x59\x6f\x32\x6e\x73','\x6a\x47\x6d\x66\x61\x38\x6b\x61\x57\x36\x7a\x36\x41\x57','\x57\x35\x39\x67\x57\x50\x79\x76\x57\x50\x30','\x57\x51\x37\x64\x49\x38\x6f\x4f\x6a\x59\x7a\x4c\x7a\x47\x43','\x57\x4f\x74\x64\x52\x65\x57\x61\x68\x57','\x46\x38\x6f\x30\x66\x6d\x6b\x30\x57\x52\x69','\x57\x34\x78\x64\x4e\x53\x6b\x53\x44\x61','\x57\x4f\x76\x56\x57\x52\x61\x67\x41\x57','\x57\x34\x4a\x64\x4e\x78\x6c\x64\x4b\x43\x6f\x73\x57\x35\x71','\x57\x37\x37\x64\x51\x75\x2f\x63\x47\x31\x47','\x57\x4f\x68\x63\x4b\x4d\x72\x69','\x75\x53\x6b\x68\x46\x32\x65','\x76\x38\x6b\x4b\x57\x4f\x6d\x33\x72\x5a\x65','\x68\x59\x6d\x43\x57\x37\x71\x4d','\x57\x36\x6c\x63\x55\x47\x34\x39\x57\x50\x57','\x57\x4f\x39\x47\x57\x52\x69\x6c\x73\x61','\x71\x43\x6f\x55\x57\x51\x6c\x63\x49\x4e\x37\x64\x49\x43\x6b\x63\x57\x35\x53','\x57\x37\x76\x51\x6f\x43\x6b\x78\x6b\x47','\x57\x51\x35\x68\x43\x63\x54\x6e','\x6e\x38\x6f\x4d\x72\x53\x6f\x45\x43\x63\x42\x64\x4b\x5a\x6c\x64\x51\x4a\x58\x51\x71\x38\x6b\x38','\x57\x50\x69\x7a\x41\x53\x6f\x61\x68\x57','\x69\x53\x6b\x56\x57\x36\x78\x63\x49\x43\x6b\x74\x66\x53\x6f\x59\x71\x57','\x61\x6d\x6b\x30\x74\x4e\x78\x63\x52\x71','\x57\x36\x70\x64\x54\x31\x64\x64\x4f\x38\x6f\x59\x57\x36\x47\x51\x57\x36\x57','\x57\x37\x56\x64\x4c\x6d\x6f\x78\x57\x52\x68\x63\x53\x71','\x57\x4f\x68\x63\x56\x76\x4a\x64\x48\x43\x6b\x55','\x79\x67\x78\x64\x51\x53\x6f\x76\x42\x38\x6f\x41\x57\x35\x42\x63\x48\x57','\x45\x30\x66\x64\x61\x38\x6b\x6b','\x6f\x53\x6f\x68\x64\x75\x2f\x64\x50\x53\x6b\x50\x57\x36\x75\x73\x57\x35\x6e\x6b\x6d\x64\x76\x42\x71\x61','\x57\x36\x43\x61\x57\x50\x71\x42\x57\x34\x4e\x64\x4a\x2b\x6b\x61\x4c\x38\x6f\x5a','\x57\x50\x30\x48\x78\x38\x6f\x35\x6f\x43\x6b\x76\x67\x38\x6f\x62','\x45\x43\x6f\x32\x57\x52\x5a\x64\x55\x68\x4b','\x57\x34\x56\x63\x48\x4a\x69\x71\x57\x4f\x4f\x30\x57\x35\x4e\x63\x4a\x57','\x57\x34\x50\x70\x63\x6d\x6b\x49\x69\x71','\x41\x48\x46\x63\x51\x75\x75\x72\x62\x65\x57\x42','\x44\x67\x4a\x64\x50\x61','\x61\x43\x6b\x66\x77\x31\x2f\x63\x4a\x73\x39\x66\x6c\x47','\x57\x35\x74\x64\x48\x68\x37\x64\x47\x57','\x63\x4d\x5a\x64\x54\x65\x58\x62\x57\x36\x2f\x64\x4b\x66\x47','\x7a\x6d\x6b\x62\x46\x6d\x6b\x52\x57\x50\x2f\x63\x4f\x6d\x6b\x4a\x6a\x57','\x7a\x43\x6b\x44\x67\x53\x6f\x69\x61\x47','\x57\x35\x4a\x64\x49\x53\x6b\x56','\x57\x50\x56\x63\x4b\x49\x68\x64\x49\x72\x74\x63\x53\x4e\x44\x6d','\x57\x51\x62\x69\x57\x35\x31\x74','\x74\x6d\x6f\x30\x57\x4f\x6c\x64\x48\x78\x52\x64\x4e\x31\x5a\x64\x52\x61','\x68\x38\x6b\x61\x57\x34\x74\x63\x4f\x53\x6f\x36\x65\x38\x6f\x57\x78\x47','\x57\x34\x30\x47\x57\x4f\x71\x75\x57\x35\x71','\x65\x68\x46\x64\x4b\x31\x44\x6b\x57\x36\x6c\x64\x4f\x4c\x71','\x68\x66\x7a\x51','\x79\x75\x50\x65\x64\x38\x6b\x44\x57\x36\x30','\x57\x35\x78\x64\x4a\x78\x37\x64\x47\x43\x6f\x75\x57\x34\x34','\x7a\x47\x37\x63\x4f\x4b\x71\x6a\x66\x30\x4b','\x57\x51\x52\x63\x53\x78\x72\x44\x57\x4f\x38','\x57\x51\x58\x66\x45\x48\x54\x78','\x68\x4d\x5a\x63\x54\x75\x35\x77\x57\x51\x56\x64\x55\x4c\x47','\x65\x63\x42\x64\x52\x6d\x6f\x77\x44\x47','\x57\x51\x4a\x63\x4a\x67\x52\x64\x4b\x38\x6b\x6e','\x71\x53\x6b\x49\x42\x4a\x62\x66\x57\x37\x4f','\x57\x36\x4c\x4f\x63\x6d\x6b\x4f\x64\x53\x6b\x4a\x57\x4f\x71','\x57\x35\x75\x2f\x57\x36\x54\x76\x69\x71\x42\x64\x55\x6d\x6f\x55\x7a\x6d\x6b\x63\x57\x52\x5a\x64\x4a\x71','\x45\x66\x39\x7a','\x75\x53\x6b\x61\x68\x38\x6f\x50\x6a\x57','\x69\x38\x6b\x2f\x6b\x38\x6b\x6c\x72\x71','\x6f\x73\x69\x75\x57\x34\x4b\x2f\x6b\x38\x6b\x77\x57\x35\x71','\x7a\x6d\x6f\x78\x57\x50\x56\x64\x47\x33\x65','\x41\x6d\x6b\x44\x75\x71','\x75\x4d\x61\x4e\x72\x62\x57','\x43\x53\x6b\x77\x42\x47','\x64\x72\x69\x67\x44\x43\x6b\x69\x57\x34\x34\x6f','\x57\x37\x5a\x64\x56\x64\x4b','\x57\x4f\x4e\x63\x4e\x74\x2f\x64\x4f\x6d\x6f\x68\x57\x52\x46\x64\x4f\x43\x6f\x72','\x70\x4a\x42\x64\x52\x53\x6f\x6d\x74\x61','\x66\x38\x6b\x6e\x57\x35\x4c\x4b\x6e\x32\x33\x63\x4a\x57','\x75\x43\x6b\x51\x77\x73\x78\x63\x56\x47','\x74\x43\x6b\x73\x69\x53\x6b\x6e\x65\x57','\x43\x72\x5a\x64\x50\x43\x6f\x6d\x73\x38\x6f\x32\x57\x37\x68\x63\x4e\x57','\x57\x51\x2f\x63\x47\x32\x6a\x75\x57\x4f\x4f','\x74\x77\x71\x42\x74\x72\x4f','\x57\x37\x39\x56\x64\x6d\x6b\x4a\x71\x71','\x57\x51\x56\x63\x4a\x4d\x58\x57\x57\x52\x34','\x61\x43\x6b\x65\x64\x38\x6b\x74\x74\x38\x6b\x4e\x57\x37\x38','\x65\x38\x6f\x4c\x57\x51\x56\x64\x4d\x47','\x57\x37\x78\x64\x48\x65\x2f\x64\x4b\x43\x6f\x45','\x6a\x4e\x54\x6f\x57\x35\x35\x69','\x6e\x74\x64\x64\x52\x38\x6f\x6b\x74\x38\x6b\x33\x57\x37\x4e\x63\x4d\x47','\x74\x53\x6b\x64\x7a\x77\x34\x33\x57\x51\x75','\x7a\x6d\x6b\x6e\x43\x43\x6b\x36\x57\x50\x4e\x64\x53\x53\x6f\x52\x76\x71','\x62\x6d\x6b\x45\x69\x38\x6b\x69\x73\x43\x6f\x4d\x57\x52\x6e\x6c','\x57\x52\x47\x39\x57\x4f\x69\x38\x57\x52\x56\x64\x4f\x6d\x6b\x4a\x61\x47','\x71\x53\x6b\x47\x57\x4f\x47\x2b\x7a\x57','\x57\x36\x4a\x64\x4e\x33\x33\x64\x50\x6d\x6f\x43','\x57\x51\x4e\x63\x48\x4a\x5a\x63\x4b\x43\x6f\x7a','\x76\x43\x6f\x75\x72\x6d\x6b\x65\x57\x36\x47','\x61\x6d\x6b\x43\x42\x30\x52\x63\x55\x57','\x70\x43\x6b\x2b\x57\x37\x74\x63\x4a\x57','\x57\x4f\x42\x64\x49\x43\x6f\x52\x57\x35\x7a\x44','\x57\x52\x78\x63\x49\x32\x62\x45\x57\x4f\x57','\x71\x67\x70\x64\x4e\x32\x4c\x56\x57\x35\x56\x64\x4c\x71','\x72\x53\x6b\x64\x42\x33\x57\x5a\x57\x36\x33\x63\x48\x77\x47','\x78\x53\x6b\x4c\x57\x34\x31\x34\x78\x74\x42\x63\x4d\x71\x71','\x75\x77\x66\x67\x57\x51\x78\x63\x4e\x61','\x68\x6d\x6b\x79\x6a\x43\x6b\x65\x75\x38\x6b\x6a\x57\x37\x61\x45','\x6b\x73\x65\x62\x74\x6d\x6b\x4a\x57\x37\x71\x49\x62\x57','\x42\x61\x64\x63\x54\x31\x4b\x78\x61\x4b\x4f','\x57\x50\x64\x63\x48\x33\x39\x75\x57\x4f\x65','\x41\x62\x5a\x63\x4f\x57','\x63\x4d\x78\x64\x54\x31\x6a\x62\x57\x36\x2f\x63\x54\x4c\x43','\x76\x6d\x6f\x61\x7a\x6d\x6b\x61\x57\x36\x47','\x76\x53\x6b\x64\x45\x68\x30','\x57\x34\x2f\x63\x51\x4a\x31\x4f\x7a\x53\x6f\x73\x57\x51\x4b\x51\x74\x64\x70\x63\x55\x43\x6b\x64\x78\x71','\x7a\x4c\x48\x68\x61\x53\x6b\x6b\x57\x37\x4f','\x63\x68\x4a\x63\x4d\x73\x61\x61\x79\x38\x6b\x30\x61\x74\x65\x36\x6c\x78\x6e\x62','\x57\x37\x7a\x4b\x61\x43\x6b\x48\x67\x38\x6b\x4e','\x63\x4c\x50\x39\x57\x36\x79','\x70\x53\x6b\x36\x57\x36\x68\x63\x4c\x43\x6f\x44\x6c\x47','\x57\x35\x68\x64\x4b\x53\x6b\x55\x42\x53\x6b\x56','\x73\x78\x38\x61\x71\x48\x52\x64\x54\x38\x6b\x6a\x57\x51\x47','\x73\x6d\x6f\x7a\x7a\x6d\x6b\x6e\x57\x36\x2f\x63\x52\x71\x6c\x64\x4b\x61','\x57\x34\x4a\x64\x4a\x49\x75\x6a\x57\x34\x38\x6f\x57\x36\x35\x62','\x67\x38\x6b\x79\x70\x6d\x6b\x76','\x44\x58\x4e\x64\x52\x78\x31\x74','\x57\x4f\x5a\x63\x49\x5a\x47','\x46\x38\x6f\x45\x57\x50\x70\x64\x48\x65\x42\x64\x51\x4d\x4a\x64\x56\x57','\x6f\x64\x53\x55\x57\x35\x69\x39\x70\x53\x6b\x64','\x57\x52\x78\x64\x4e\x6d\x6f\x6d\x6f\x4a\x47','\x57\x50\x78\x63\x4b\x4d\x53\x46','\x6c\x32\x72\x6c\x57\x34\x30\x69\x71\x6d\x6f\x5a\x64\x57','\x57\x52\x6c\x64\x53\x38\x6f\x45\x57\x37\x35\x6c\x57\x37\x75\x45','\x57\x37\x4a\x64\x4e\x38\x6f\x37\x57\x51\x33\x63\x51\x71','\x57\x36\x56\x63\x52\x49\x34\x78\x57\x52\x30','\x6a\x74\x5a\x64\x56\x38\x6f\x74\x77\x47','\x57\x35\x6c\x64\x48\x33\x74\x64\x4c\x53\x6f\x7a\x57\x36\x4b\x64\x57\x35\x4b','\x79\x38\x6f\x75\x57\x50\x4e\x64\x48\x78\x52\x64\x47\x68\x4a\x64\x4c\x61','\x57\x37\x57\x61\x57\x4f\x71\x7a','\x70\x4a\x34\x6b\x57\x35\x69\x4a\x70\x53\x6b\x6b','\x57\x4f\x30\x53\x78\x43\x6f\x4a\x6e\x38\x6b\x46\x65\x71','\x57\x4f\x76\x56\x57\x52\x69\x68\x73\x31\x4a\x64\x4d\x38\x6f\x55','\x57\x52\x4c\x71\x57\x34\x39\x66\x57\x50\x4e\x64\x4e\x5a\x70\x63\x56\x78\x48\x54\x57\x37\x4e\x64\x47\x67\x69','\x57\x50\x7a\x75\x44\x74\x76\x56','\x57\x51\x46\x64\x4a\x43\x6f\x4e\x67\x5a\x43','\x74\x61\x39\x39\x57\x36\x75\x54\x46\x53\x6f\x37\x45\x61','\x62\x43\x6b\x46\x77\x47','\x65\x6d\x6b\x72\x57\x34\x44\x31\x6c\x77\x33\x63\x4d\x6d\x6b\x52','\x57\x35\x2f\x63\x49\x4a\x30\x68\x57\x51\x4f\x53','\x57\x36\x44\x4d\x57\x4f\x43','\x6e\x5a\x5a\x64\x50\x38\x6f\x41\x74\x61','\x77\x6d\x6f\x53\x57\x50\x2f\x64\x50\x31\x65','\x76\x49\x2f\x64\x48\x78\x35\x61\x70\x71'];_0x3c03=function(){return _0x546add;};return _0x3c03();}function _0x488b7d(_0x98005f){var _0x1eea81=_0x5b1d1c,_0x451500={'\x65\x68\x73\x73\x7a':function(_0xe8622a,_0x43837f,_0x2a079f){return _0xe8622a(_0x43837f,_0x2a079f);},'\x4f\x55\x52\x49\x59':function(_0x47e29e,_0x51e7e6){return _0x47e29e>=_0x51e7e6;},'\x58\x73\x65\x65\x45':function(_0x4acdb3,_0x19868b){return _0x4acdb3===_0x19868b;},'\x4d\x53\x46\x64\x67':'\x44\x47\x6b\x67\x4a','\x5a\x58\x49\x76\x70':function(_0x47b9cd,_0x2523bb){return _0x47b9cd(_0x2523bb);},'\x73\x72\x45\x79\x4c':function(_0x4ad06e,_0x12c833){return _0x4ad06e||_0x12c833;},'\x6a\x63\x62\x77\x7a':function(_0x10b940,_0x3ab835){return _0x10b940-_0x3ab835;},'\x46\x41\x72\x63\x78':function(_0x2077a9,_0x5b7bd9){return _0x2077a9===_0x5b7bd9;},'\x6a\x4b\x77\x45\x42':_0x1eea81(0x18e,'\x76\x41\x46\x40'),'\x6e\x6b\x59\x50\x72':_0x1eea81(0x1d4,'\x78\x72\x70\x56'),'\x72\x50\x69\x6e\x4c':_0x1eea81(0x1b0,'\x23\x75\x32\x47'),'\x4f\x65\x6f\x73\x6e':_0x1eea81(0x1c7,'\x48\x49\x33\x68'),'\x59\x4e\x6e\x69\x6f':function(_0x3ae56b){return _0x3ae56b();},'\x61\x4d\x70\x48\x58':function(_0x442ff9,_0x264eb6){return _0x442ff9<_0x264eb6;},'\x6c\x52\x47\x48\x64':function(_0x2950f5,_0x142965){return _0x2950f5!==_0x142965;},'\x50\x4e\x67\x64\x4e':_0x1eea81(0x214,'\x6f\x57\x78\x59'),'\x6f\x6b\x56\x51\x45':function(_0x114a86,_0xd2501b){return _0x114a86(_0xd2501b);},'\x58\x46\x51\x59\x78':function(_0x275d23,_0x2ada37){return _0x275d23/_0x2ada37;}};if(!_0x451500[_0x1eea81(0x17d,'\x75\x51\x28\x73')](_0x4c1cd0))return[];var _0x3c6487=_0x98005f&&Array[_0x1eea81(0x21d,'\x64\x48\x4b\x33')](_0x98005f[_0x1eea81(0x21c,'\x21\x4e\x5a\x33')])?_0x98005f[_0x1eea81(0x1b2,'\x33\x62\x4c\x37')]:[];if(_0x3c6487['\x6c\x65\x6e\x67\x74\x68']===0x2b*0x2b+-0x1499+-0x1ac*-0x8)return[];var _0x6cd488=_0x98005f&&Array[_0x1eea81(0x1fe,'\x73\x6d\x71\x21')](_0x98005f['\x70\x72\x73'])?_0x98005f[_0x1eea81(0x1b4,'\x5e\x65\x37\x4f')]:_0x375f33();if(_0x451500[_0x1eea81(0x21a,'\x21\x4e\x5a\x33')](_0x6cd488['\x6c\x65\x6e\x67\x74\x68'],-0xb*-0xbe+0x269+-0x1*0xa93))return[];var _0x2f28a7=_0x98005f&&Number[_0x1eea81(0x26d,'\x50\x6d\x2a\x70')](_0x98005f[_0x1eea81(0x19c,'\x76\x41\x46\x40')+'\x64'])?_0x98005f[_0x1eea81(0x255,'\x33\x62\x4c\x37')+'\x64']:-0xe28+0x29*-0x62+0x1dda+0.5;function _0x40c0c3(_0x12c83d){var _0x38b0c1=_0x1eea81,_0xec4cd4={'\x75\x71\x46\x70\x45':function(_0x52cabd,_0x2f8264){var _0x221548=_0x2519;return _0x451500[_0x221548(0x186,'\x35\x76\x46\x50')](_0x52cabd,_0x2f8264);}};return _0x451500[_0x38b0c1(0x213,'\x49\x6a\x4d\x55')](_0x451500[_0x38b0c1(0x181,'\x26\x55\x43\x70')],_0x451500[_0x38b0c1(0x1f0,'\x29\x5b\x28\x56')])?_0x451500[_0x38b0c1(0x1f8,'\x43\x46\x26\x54')](String,_0x451500[_0x38b0c1(0x1f4,'\x77\x35\x40\x52')](_0x12c83d,''))[_0x38b0c1(0x27e,'\x4c\x50\x69\x6b')+'\x61\x73\x65']()[_0x38b0c1(0x283,'\x59\x66\x50\x41')](/[^a-z0-9]+/g,'\x20')['\x73\x70\x6c\x69\x74'](/\s+/)[_0x38b0c1(0x277,'\x75\x51\x28\x73')](function(_0xe3dd98){var _0x354d0f=_0x38b0c1;return _0xec4cd4[_0x354d0f(0x1d5,'\x76\x41\x46\x40')](_0xe3dd98[_0x354d0f(0x264,'\x25\x72\x69\x54')],-0x100d+-0x1*-0x6ab+0x965);}):MVKGiX['\x65\x68\x73\x73\x7a'](_0x1dc726,_0x38b0c1(0x229,'\x52\x6a\x55\x5a')+'\x50\x45\x4e\x5f\x50\x52\x5f\x54'+'\x54\x4c\x5f\x4d\x53',0x389*-0x55+-0x1025b+0x31938*0x1);}var _0x56a29a=new Set();for(var _0x325ba1=-0x531*-0x5+-0xf54+0x38b*-0x3;_0x451500[_0x1eea81(0x234,'\x49\x6a\x4d\x55')](_0x325ba1,_0x3c6487[_0x1eea81(0x22b,'\x75\x51\x28\x73')]);_0x325ba1++){if(_0x451500[_0x1eea81(0x233,'\x56\x73\x31\x7a')](_0x1eea81(0x1af,'\x46\x49\x41\x26'),_0x451500[_0x1eea81(0x199,'\x33\x62\x4c\x37')]))_0x451500[_0x1eea81(0x191,'\x23\x75\x32\x47')](_0x40c0c3,_0x3c6487[_0x325ba1])[_0x1eea81(0x257,'\x64\x48\x4b\x33')](function(_0x476697){var _0x53ddd2=_0x1eea81;_0x56a29a[_0x53ddd2(0x1e1,'\x6b\x6b\x5e\x79')](_0x476697);});else return _0x451500['\x6a\x63\x62\x77\x7a'](_0x4f760c[_0x1eea81(0x1fb,'\x71\x66\x6e\x68')+_0x1eea81(0x1c9,'\x25\x72\x69\x54')],_0x52e07f['\x74\x6f\x6b\x65\x6e\x4f\x76\x65'+_0x1eea81(0x21f,'\x4d\x41\x23\x65')]);}if(_0x451500[_0x1eea81(0x1a6,'\x47\x36\x73\x77')](_0x56a29a[_0x1eea81(0x260,'\x69\x31\x43\x61')],-0x1*-0x1af0+0x1*-0x329+-0x17c7))return[];var _0x17f33c=[];for(var _0x28c2a4=-0x128f+0x1*-0x202d+0x32bc;_0x28c2a4<_0x6cd488[_0x1eea81(0x26a,'\x6b\x49\x35\x71')];_0x28c2a4++){var _0x3b7d18=_0x6cd488[_0x28c2a4];if(!_0x3b7d18)continue;var _0x1b3a57=new Set();_0x451500['\x6f\x6b\x56\x51\x45'](_0x40c0c3,_0x3b7d18['\x74\x69\x74\x6c\x65'])[_0x1eea81(0x269,'\x21\x4e\x5a\x33')](function(_0x3355e2){var _0x27d3bc=_0x1eea81;_0x1b3a57[_0x27d3bc(0x1e1,'\x6b\x6b\x5e\x79')](_0x3355e2);}),_0x451500[_0x1eea81(0x189,'\x33\x62\x4c\x37')](_0x40c0c3,_0x3b7d18[_0x1eea81(0x17b,'\x77\x35\x40\x52')+_0x1eea81(0x286,'\x6b\x26\x36\x6e')])[_0x1eea81(0x251,'\x73\x6d\x71\x21')](function(_0x6eed9c){var _0x52aeb2=_0x1eea81;_0x451500[_0x52aeb2(0x1f9,'\x35\x76\x46\x50')](_0x451500[_0x52aeb2(0x21b,'\x47\x36\x73\x77')],_0x451500[_0x52aeb2(0x231,'\x5a\x55\x67\x28')])?_0x1b3a57[_0x52aeb2(0x23c,'\x23\x75\x32\x47')](_0x6eed9c):_0x47d5a4[_0x52aeb2(0x19b,'\x4c\x50\x69\x6b')](_0x133fae);});if(_0x1b3a57[_0x1eea81(0x258,'\x73\x6d\x71\x21')]===-0x34+0x18fd+-0x18c9)continue;var _0x13d565=0xab9+0x6*0x325+-0x1f9*0xf;_0x56a29a[_0x1eea81(0x1f7,'\x57\x6f\x7a\x57')](function(_0x2b6bf2){var _0x3d91f6=_0x1eea81,_0x3f7de7={'\x6d\x70\x65\x58\x7a':function(_0xed5030,_0x2830f0){var _0x43b55e=_0x2519;return _0x451500[_0x43b55e(0x24a,'\x78\x72\x70\x56')](_0xed5030,_0x2830f0);}};if(_0x451500[_0x3d91f6(0x243,'\x49\x6a\x4d\x55')](_0x451500[_0x3d91f6(0x217,'\x66\x49\x76\x78')],_0x451500[_0x3d91f6(0x247,'\x59\x66\x50\x41')]))return CavRiS[_0x3d91f6(0x28c,'\x5e\x65\x37\x4f')](_0x4d5ad2[_0x3d91f6(0x1cd,'\x66\x49\x76\x78')],-0x121*0x22+0x114c+0x1519);else{if(_0x1b3a57[_0x3d91f6(0x216,'\x65\x4a\x24\x43')](_0x2b6bf2))_0x13d565++;}});var _0x1de360=_0x451500[_0x1eea81(0x20c,'\x57\x5a\x63\x5e')](_0x13d565,_0x56a29a[_0x1eea81(0x263,'\x78\x72\x70\x56')]);if(_0x451500[_0x1eea81(0x281,'\x4d\x41\x23\x65')](_0x1de360,_0x2f28a7)){var _0x1d64bb=Array['\x69\x73\x41\x72\x72\x61\x79'](_0x3b7d18[_0x1eea81(0x209,'\x46\x49\x41\x26')])?_0x3b7d18[_0x1eea81(0x245,'\x4c\x50\x69\x6b')][_0x1eea81(0x239,'\x73\x6d\x71\x21')](-0x13d*-0x19+0x1*0x259d+-0x4492*0x1,0x12d1*-0x1+-0x268d+0x3963):[],_0x59aea5={};_0x59aea5[_0x1eea81(0x1e6,'\x5e\x65\x37\x4f')]=_0x3b7d18[_0x1eea81(0x1b1,'\x5a\x55\x67\x28')],_0x59aea5[_0x1eea81(0x276,'\x64\x48\x4b\x33')]=_0x3b7d18[_0x1eea81(0x173,'\x56\x73\x31\x7a')],_0x59aea5[_0x1eea81(0x27c,'\x48\x40\x6b\x43')+'\x61\x6d\x65']=_0x3b7d18[_0x1eea81(0x27c,'\x48\x40\x6b\x43')+_0x1eea81(0x1b9,'\x49\x6a\x4d\x55')],_0x59aea5[_0x1eea81(0x17f,'\x6f\x74\x6b\x74')]=_0x1d64bb,_0x59aea5[_0x1eea81(0x20d,'\x77\x35\x40\x52')+_0x1eea81(0x222,'\x6b\x26\x36\x6e')]=_0x1de360,_0x17f33c[_0x1eea81(0x24f,'\x4c\x50\x69\x6b')](_0x59aea5);}}return _0x17f33c[_0x1eea81(0x1ef,'\x6b\x49\x35\x71')](function(_0x195a17,_0x11fec5){var _0xd2fc07=_0x1eea81;if(_0xd2fc07(0x171,'\x46\x30\x5d\x4f')===_0x451500[_0xd2fc07(0x1c4,'\x48\x49\x33\x68')])return _0x451500[_0xd2fc07(0x24c,'\x23\x75\x32\x47')](_0x11fec5['\x74\x6f\x6b\x65\x6e\x4f\x76\x65'+'\x72\x6c\x61\x70'],_0x195a17[_0xd2fc07(0x1fc,'\x32\x49\x56\x74')+_0xd2fc07(0x19d,'\x71\x66\x6e\x68')]);else{if(_0x349e32[_0xd2fc07(0x236,'\x67\x6a\x28\x4e')](_0x2dcb4f))_0x442922++;}}),_0x17f33c[_0x1eea81(0x1b8,'\x32\x49\x56\x74')](0x1662+0x99f*-0x2+0x192*-0x2,-0x2205+0x16a*0x6+0x198c);}function _0x1cac2b(){_0x575183=null,_0x3c48d2=0x3*-0x209+-0xd*0x2c6+-0xfb*-0x2b,_0x1ee1cb=null,_0x363af5=![];}var _0x5b85c1={};_0x5b85c1[_0x5b1d1c(0x267,'\x5a\x55\x67\x28')+'\x52\x73']=_0x375f33,_0x5b85c1[_0x5b1d1c(0x198,'\x35\x76\x46\x50')+_0x5b1d1c(0x1bd,'\x35\x79\x25\x4d')]=_0x3dea97,_0x5b85c1[_0x5b1d1c(0x200,'\x6f\x74\x6b\x74')+_0x5b1d1c(0x1bc,'\x6d\x74\x32\x47')]=_0x488b7d,_0x5b85c1[_0x5b1d1c(0x23e,'\x73\x67\x75\x31')+_0x5b1d1c(0x23f,'\x35\x35\x30\x79')]=_0x1cac2b,module[_0x5b1d1c(0x1df,'\x6b\x6b\x5e\x79')]=_0x5b85c1;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// openPRRegistry — fetch and cache the current repo's open PR list, and decide
|
|
5
|
+
// whether a daemon-driven cycle's planned changes overlap with any of them.
|
|
6
|
+
//
|
|
7
|
+
// Why this exists: evolver --loop has been observed to independently
|
|
8
|
+
// re-implement work that's already in flight on an open PR (PR #38's a2a
|
|
9
|
+
// integrity check, PR #43's rollback safety, both rebuilt from scratch by
|
|
10
|
+
// the daemon). This dirties the working tree and triggers downstream
|
|
11
|
+
// rollback risk (see feedback_evolver_solidify_rollback). The fix: at
|
|
12
|
+
// solidify time, before the cycle commits, check whether the changed files
|
|
13
|
+
// substantially overlap with an open PR — if yes, rollback this cycle.
|
|
14
|
+
//
|
|
15
|
+
// The module is graceful: if `gh` is missing, unauthenticated, or the API
|
|
16
|
+
// errors, getOpenPRs returns [] and findOverlap returns { overlap: false }.
|
|
17
|
+
// EVOLVE_OPEN_PR_DEDUP=0 short-circuits the whole feature.
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
// Note: do not destructure execSync at module load — tests stub
|
|
21
|
+
// child_process.execSync at call time via the live module reference.
|
|
22
|
+
const { envInt } = require('../config');
|
|
23
|
+
|
|
24
|
+
const MAX_EXEC_BUFFER = 10 * 1024 * 1024;
|
|
25
|
+
const GH_TIMEOUT_MS = 5000;
|
|
26
|
+
|
|
27
|
+
let _cache = null;
|
|
28
|
+
let _cacheAt = 0;
|
|
29
|
+
let _inflight = null;
|
|
30
|
+
let _ghMissingWarned = false;
|
|
31
|
+
|
|
32
|
+
function _now() { return Date.now(); }
|
|
33
|
+
|
|
34
|
+
function _isFeatureEnabled() {
|
|
35
|
+
return String(process.env.EVOLVE_OPEN_PR_DEDUP || '1') !== '0';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function _getTtlMs() {
|
|
39
|
+
return envInt('EVOLVE_OPEN_PR_TTL_MS', 60000);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Run `gh pr list ...` and parse JSON. Returns [] on any failure.
|
|
43
|
+
function _fetchOpenPRsSync() {
|
|
44
|
+
try {
|
|
45
|
+
const raw = require('child_process').execSync('gh pr list --state=open --json number,title,headRefName,files --limit 50', {
|
|
46
|
+
encoding: 'utf8',
|
|
47
|
+
timeout: GH_TIMEOUT_MS,
|
|
48
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
49
|
+
maxBuffer: MAX_EXEC_BUFFER,
|
|
50
|
+
});
|
|
51
|
+
const arr = JSON.parse(raw || '[]');
|
|
52
|
+
if (!Array.isArray(arr)) return [];
|
|
53
|
+
return arr.map(function (pr) {
|
|
54
|
+
return {
|
|
55
|
+
number: pr.number,
|
|
56
|
+
title: String(pr.title || ''),
|
|
57
|
+
headRefName: String(pr.headRefName || ''),
|
|
58
|
+
files: Array.isArray(pr.files) ? pr.files.map(function (f) { return String(f.path || ''); }).filter(Boolean) : [],
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
} catch (e) {
|
|
62
|
+
var msg = e && e.message ? String(e.message) : '';
|
|
63
|
+
if (/not found|ENOENT|command not found/i.test(msg)) {
|
|
64
|
+
if (!_ghMissingWarned) {
|
|
65
|
+
_ghMissingWarned = true;
|
|
66
|
+
console.warn('[OpenPR] gh CLI not available — open-PR dedup disabled for this process. Install gh or set EVOLVE_OPEN_PR_DEDUP=0 to silence.');
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
console.warn('[OpenPR] gh pr list failed (non-fatal): ' + msg.slice(0, 200));
|
|
70
|
+
}
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Public: get the current open-PR list, cached for EVOLVE_OPEN_PR_TTL_MS.
|
|
76
|
+
// Concurrent callers within the same TTL window share the same fetch.
|
|
77
|
+
function getOpenPRs(opts) {
|
|
78
|
+
if (!_isFeatureEnabled()) return [];
|
|
79
|
+
var ttlMs = (opts && Number.isFinite(opts.ttlMs)) ? opts.ttlMs : _getTtlMs();
|
|
80
|
+
var age = _now() - _cacheAt;
|
|
81
|
+
if (_cache && age < ttlMs) return _cache;
|
|
82
|
+
// Single-flight: if a fetch is already in progress, return the prior cache
|
|
83
|
+
// (or []) rather than spawning a second gh call.
|
|
84
|
+
if (_inflight) return _cache || [];
|
|
85
|
+
_inflight = true;
|
|
86
|
+
try {
|
|
87
|
+
var fresh = _fetchOpenPRsSync();
|
|
88
|
+
_cache = fresh;
|
|
89
|
+
_cacheAt = _now();
|
|
90
|
+
return fresh;
|
|
91
|
+
} finally {
|
|
92
|
+
_inflight = false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Compute overlap between this cycle's changed files and each open PR's files.
|
|
97
|
+
// Returns the strongest overlap by ratio. Ratio = |intersection| / |changedFiles|.
|
|
98
|
+
//
|
|
99
|
+
// Why we use changedFiles as the denominator (not the PR's files): we're asking
|
|
100
|
+
// "is this cycle re-doing work that the PR is already doing?" — the right
|
|
101
|
+
// question is "what fraction of MY changes are also in their PR?". If the daemon
|
|
102
|
+
// changes 4 files and 3 are also in PR #38's 11-file diff, that's 0.75 overlap
|
|
103
|
+
// from the daemon's POV (re-doing most of its own work) even though it's only
|
|
104
|
+
// 0.27 from the PR's POV.
|
|
105
|
+
function findOverlap(opts) {
|
|
106
|
+
if (!_isFeatureEnabled()) return { overlap: false, reason: 'feature_disabled' };
|
|
107
|
+
var changedFiles = (opts && Array.isArray(opts.changedFiles)) ? opts.changedFiles : [];
|
|
108
|
+
if (changedFiles.length === 0) return { overlap: false, reason: 'no_changed_files' };
|
|
109
|
+
var prs = (opts && Array.isArray(opts.prs)) ? opts.prs : getOpenPRs();
|
|
110
|
+
if (prs.length === 0) return { overlap: false, reason: 'no_open_prs' };
|
|
111
|
+
|
|
112
|
+
var changedSet = new Set(changedFiles.map(String));
|
|
113
|
+
var best = null;
|
|
114
|
+
for (var i = 0; i < prs.length; i++) {
|
|
115
|
+
var pr = prs[i];
|
|
116
|
+
if (!pr || !Array.isArray(pr.files) || pr.files.length === 0) continue;
|
|
117
|
+
var prSet = new Set(pr.files.map(String));
|
|
118
|
+
var shared = [];
|
|
119
|
+
changedSet.forEach(function (f) { if (prSet.has(f)) shared.push(f); });
|
|
120
|
+
if (shared.length === 0) continue;
|
|
121
|
+
var ratio = shared.length / changedFiles.length;
|
|
122
|
+
if (!best || ratio > best.overlapRatio) {
|
|
123
|
+
best = {
|
|
124
|
+
overlap: true,
|
|
125
|
+
prNumber: pr.number,
|
|
126
|
+
prTitle: pr.title,
|
|
127
|
+
headRefName: pr.headRefName,
|
|
128
|
+
overlapRatio: ratio,
|
|
129
|
+
sharedFiles: shared,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return best || { overlap: false, reason: 'no_intersection' };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Token-overlap version for the select-stage hint (no file paths available).
|
|
137
|
+
// Compares a Gene's signals_match against a PR's title + headRefName tokens.
|
|
138
|
+
// Returns the top-N matches with ratio >= threshold (default 0.5).
|
|
139
|
+
function findSignalHints(opts) {
|
|
140
|
+
if (!_isFeatureEnabled()) return [];
|
|
141
|
+
var signals = (opts && Array.isArray(opts.signals)) ? opts.signals : [];
|
|
142
|
+
if (signals.length === 0) return [];
|
|
143
|
+
var prs = (opts && Array.isArray(opts.prs)) ? opts.prs : getOpenPRs();
|
|
144
|
+
if (prs.length === 0) return [];
|
|
145
|
+
var threshold = (opts && Number.isFinite(opts.threshold)) ? opts.threshold : 0.5;
|
|
146
|
+
|
|
147
|
+
function tokenize(s) {
|
|
148
|
+
return String(s || '')
|
|
149
|
+
.toLowerCase()
|
|
150
|
+
.replace(/[^a-z0-9]+/g, ' ')
|
|
151
|
+
.split(/\s+/)
|
|
152
|
+
.filter(function (t) { return t.length >= 3; });
|
|
153
|
+
}
|
|
154
|
+
var sigTokens = new Set();
|
|
155
|
+
for (var i = 0; i < signals.length; i++) {
|
|
156
|
+
tokenize(signals[i]).forEach(function (t) { sigTokens.add(t); });
|
|
157
|
+
}
|
|
158
|
+
if (sigTokens.size === 0) return [];
|
|
159
|
+
|
|
160
|
+
var hits = [];
|
|
161
|
+
for (var j = 0; j < prs.length; j++) {
|
|
162
|
+
var pr = prs[j];
|
|
163
|
+
if (!pr) continue;
|
|
164
|
+
var prTokens = new Set();
|
|
165
|
+
tokenize(pr.title).forEach(function (t) { prTokens.add(t); });
|
|
166
|
+
tokenize(pr.headRefName).forEach(function (t) { prTokens.add(t); });
|
|
167
|
+
if (prTokens.size === 0) continue;
|
|
168
|
+
var common = 0;
|
|
169
|
+
sigTokens.forEach(function (t) { if (prTokens.has(t)) common++; });
|
|
170
|
+
var ratio = common / sigTokens.size;
|
|
171
|
+
if (ratio >= threshold) {
|
|
172
|
+
// Guard against pr.files being missing/null — getOpenPRs always
|
|
173
|
+
// populates it, but tests and external callers may pass partial
|
|
174
|
+
// PR objects. Without this guard pr.files.slice would throw a
|
|
175
|
+
// TypeError, the try/catch in select.js would swallow it, and we
|
|
176
|
+
// would silently lose ALL hits for that invocation rather than
|
|
177
|
+
// just the malformed PR. (Bugbot review on PR #50.)
|
|
178
|
+
var fileSample = Array.isArray(pr.files) ? pr.files.slice(0, 5) : [];
|
|
179
|
+
hits.push({
|
|
180
|
+
number: pr.number,
|
|
181
|
+
title: pr.title,
|
|
182
|
+
headRefName: pr.headRefName,
|
|
183
|
+
files: fileSample,
|
|
184
|
+
tokenOverlap: ratio,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
hits.sort(function (a, b) { return b.tokenOverlap - a.tokenOverlap; });
|
|
189
|
+
return hits.slice(0, 3);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Internal: reset cache for tests.
|
|
193
|
+
function _resetForTesting() {
|
|
194
|
+
_cache = null;
|
|
195
|
+
_cacheAt = 0;
|
|
196
|
+
_inflight = null;
|
|
197
|
+
_ghMissingWarned = false;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
module.exports = {
|
|
201
|
+
getOpenPRs,
|
|
202
|
+
findOverlap,
|
|
203
|
+
findSignalHints,
|
|
204
|
+
_resetForTesting,
|
|
205
|
+
};
|